Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

πŸ“° Library for reading TypeLang AST nodes from types exposed by PHP Reflection objects

License

Notifications You must be signed in to change notification settings

php-type-language/reader

Repository files navigation


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 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:

composer require type-lang/reader

Quick Start

$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

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

About

πŸ“° Library for reading TypeLang AST nodes from types exposed by PHP Reflection objects

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /