facebook/hack-codegen

此包的最新版本(v4.5.1)没有可用的许可信息。

Hack Codegen 是一个用于编程生成 Hack 代码的库

安装数量: 534,336

依赖者: 7

建议者: 0

安全性: 0

星标: 341

关注者: 66

分支: 93

开放问题: 7

语言:Hack

v4.5.1 2022-06-06 17:05 UTC

README

Hack Codegen 是一个库,可以轻松生成 Hack 代码并将其写入签名文件,以防止不希望的改变。编写编写代码的代码背后的理念是提高抽象层次并减少耦合。您可以以自己的方式描述问题并生成相应的代码。例如,请参阅 examples/dorm。在这个例子中,我们使用一个模式来描述数据的结构,并使用 Hack Codegen 来编写匹配的代码。

示例

DORM 示例展示了如何在简化的实际例子中使用代码生成的不同方面。包含的测试也举例说明了不同组件的使用。

需求

Hack Codegen 需要

  • HHVM
  • Composer

安装 Hack Codegen

此包可以通过 composer 安装

composer require facebook/hack-codegen

用法

包含由 composer 生成的自动加载文件,您就可以开始使用它了。例如

<?hh
require 'vendor/autoload.php';

use Facebook\HackCodegen\HackCodegenFactory;

$cg = new HackCodegenFactory(new HackCodegenConfig());

echo $cg->codegenFile('HelloWorld.php')
  ->addClass(
    $cg->codegenClass('HelloWorld')
      ->addMethod(
        $cg->codegenMethod('sayHi')
          ->setReturnType('void')
          ->setBody(
            $cg->codegenHackBuilder()
              ->addAssignment(
                '$some_vector',
                Vector { 1, 2, 3 },
                HackBuilderValues::vector(
                  HackBuilderValues::export(),
                ),
              )
              ->addAssignment(
                '$debug_info',
                Map { 'file' => '__FILE__', 'line' => '__LINE__' },
                HackBuilderValues::map(
                  HackBuilderKeys::export(),
                  HackBuilderValues::literal(),
                ),
              )
              ->addAssignment(
                '$some_vector_of_vectors',
                Vector { Vector { 1, 2, 3 }, Vector { 4, 5, 6 } },
                HackBuilderValues::vector(
                  HackBuilderValues::vector(
                    HackBuilderValues::export(),
                  ),
                ),
              )
              ->addLine('echo "hello world\n";')
              ->getCode();
          );
      )
  )->save();

配置

您可以通过实现 IHackCodegenConfig 并将其实例传递给 HackCodegenFactory 的构造函数来配置一些选项,例如最大行宽、间距和标题。

许可

Hack Codegen 使用 MIT 许可。