type-lang / parser
用于解析和验证 TypeLang 语法并将其转换为 AST 节点的库
1.0.2
2024-07-02 11:21 UTC
Requires
- php: ^8.1
- phplrt/lexer: ^3.6
- phplrt/parser: ^3.6
- phplrt/source: ^3.6
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.53
- jetbrains/phpstorm-attributes: ^1.0
- phplrt/compiler: ^3.6
- phpstan/extension-installer: ^1.4
- phpstan/phpstan: ^1.11
- phpstan/phpstan-strict-rules: ^1.6
- phpunit/phpunit: ^10.5|^11.0
- rector/rector: ^1.1
This package is auto-updated.
Last update: 2024-09-11 01:06:51 UTC
README

TypeLang 解析器的参考实现。
TypeLang 是一种受静态分析器如 PHPStan 和 Psalm 启发的声明性类型语言。
阅读 文档页面 了解更多信息。
安装
TypeLang 解析器作为 Composer 仓库提供,可以在项目根目录下使用以下命令安装
composer require type-lang/parser
快速开始
$parser = new \TypeLang\Parser\Parser(); $type = $parser->parse(<<<'PHP' array{ key: callable(Example, int): mixed, ... } PHP); var_dump($type);
预期输出
TypeLang\Parser\Node\Stmt\NamedTypeNode { +offset: 0 +name: TypeLang\Parser\Node\Name { +offset: 0 -parts: array:1 [ 0 => TypeLang\Parser\Node\Identifier { +offset: 0 +value: "array" } ] } +arguments: null +fields: TypeLang\Parser\Node\Stmt\Shape\FieldsListNode { +offset: 11 +items: array:1 [ 0 => TypeLang\Parser\Node\Stmt\Shape\NamedFieldNode { +offset: 11 +type: TypeLang\Parser\Node\Stmt\CallableTypeNode { +offset: 16 +name: TypeLang\Parser\Node\Name { +offset: 16 -parts: array:1 [ 0 => TypeLang\Parser\Node\Identifier { +offset: 16 +value: "callable" } ] } +parameters: TypeLang\Parser\Node\Stmt\Callable\ParametersListNode { +offset: 25 +items: array:2 [ 0 => TypeLang\Parser\Node\Stmt\Callable\ParameterNode { +offset: 25 +type: TypeLang\Parser\Node\Stmt\NamedTypeNode { +offset: 25 +name: TypeLang\Parser\Node\Name { +offset: 25 -parts: array:1 [ 0 => TypeLang\Parser\Node\Identifier { +offset: 25 +value: "Example" } ] } +arguments: null +fields: null } +name: null +output: false +variadic: false +optional: false } 1 => TypeLang\Parser\Node\Stmt\Callable\ParameterNode { +offset: 34 +type: TypeLang\Parser\Node\Stmt\NamedTypeNode { +offset: 34 +name: TypeLang\Parser\Node\Name { +offset: 34 -parts: array:1 [ 0 => TypeLang\Parser\Node\Identifier { +offset: 34 +value: "int" } ] } +arguments: null +fields: null } +name: null +output: false +variadic: false +optional: false } ] } +type: TypeLang\Parser\Node\Stmt\NamedTypeNode { +offset: 40 +name: TypeLang\Parser\Node\Name { +offset: 40 -parts: array:1 [ 0 => TypeLang\Parser\Node\Identifier { +offset: 40 +value: "mixed" } ] } +arguments: null +fields: null } } +optional: false +key: TypeLang\Parser\Node\Identifier { +offset: 11 +value: "key" } } ] +sealed: false } }