An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          



---


PHP 8.1+
Latest Stable Version
Latest Unstable Version
License MIT




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";
}
}
}
```