https://github.com/php-type-language/reader
📰 Library for reading TypeLang AST nodes from types exposed by PHP Reflection objects
https://github.com/php-type-language/reader
ast converter php reader reflection types
Last synced: 3 months ago
JSON representation
📰 Library for reading TypeLang AST nodes from types exposed by PHP Reflection objects
- Host: GitHub
- URL: https://github.com/php-type-language/reader
- Owner: php-type-language
- License: mit
- Created: 2024-03-27T18:31:52.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2025-01-11T01:02:39.000Z (over 1 year ago)
- Last Synced: 2026-01-11T15:18:06.102Z (4 months ago)
- Topics: ast, converter, php, reader, reflection, types
- Language: PHP
- Homepage: https://typelang.dev
- Size: 58.6 KB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
---
Provides a set of methods for converting PHP Reflection objects into the
TypeLang AST Nodes.
Read [documentation pages](https://typelang.dev) for more information.
## Installation
TypeLang Reader is available as Composer repository and can
be installed using the following command in a root of your project:
```sh
composer require type-lang/reader
```
## Quick Start
```php
$reader = new \TypeLang\Reader\ReflectionReader();
$node = $reader->findFunctionType(
function: new \ReflectionFunction(function(): void {}),
);
var_dump($node);
```
**Expected Output:**
```
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: "void"
}
]
}
+arguments: null
+fields: null
}
```
### Creating From Reflection
```php
$class = new \ReflectionClass(Path\To\Example::class);
// Printer component provided by "type-lang/printer" package.
$printer = new \TypeLang\Printer\PrettyPrinter();
$converter = new \TypeLang\Reader\ReflectionReader();
// Dump all constants with its types.
foreach ($class->getReflectionConstants() as $constant) {
// Creates type node AST from a constant's type.
if ($type = $converter->findConstantType($constant)) {
echo 'const ' . $constant->name . ' has type ' . $printer->print($type) . "\n";
}
}
// Dump all properties with its types.
foreach ($class->getProperties() as $property) {
// Creates type node AST from a property's type.
if ($type = $converter->findPropertyType($property)) {
echo 'property ' . $property->name . ' has type ' . $printer->print($type) . "\n";
}
}
// Dump all methods with its types.
foreach ($class->getMethods() as $method) {
// Creates type node AST from any function's return type.
if ($type = $converter->findFunctionType($method)) {
echo 'function ' . $method->name . ' has type ' . $printer->print($type) . "\n";
}
// Creates type node AST from a parameter's type.
foreach ($method->getParameters() as $parameter) {
if ($type = $converter->findParameterType($parameter)) {
echo 'parameter ' . $parameter->name . ' has type ' . $printer->print($type) . "\n";
}
}
}
```