phptl / parser
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 } }