{"id":35262262,"url":"https://github.com/php-type-language/reader","last_synced_at":"2026-01-14T00:34:51.868Z","repository":{"id":230098231,"uuid":"778445315","full_name":"php-type-language/reader","owner":"php-type-language","description":"📰 Library for reading TypeLang AST nodes from types exposed by PHP Reflection objects","archived":false,"fork":false,"pushed_at":"2025-01-11T01:02:39.000Z","size":60,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-11T15:18:06.102Z","etag":null,"topics":["ast","converter","php","reader","reflection","types"],"latest_commit_sha":null,"homepage":"https://typelang.dev","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/php-type-language.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-27T18:31:52.000Z","updated_at":"2025-01-11T00:57:13.000Z","dependencies_parsed_at":"2024-03-27T21:05:00.094Z","dependency_job_id":"e483b2eb-5948-42b0-af89-cb363dc8d338","html_url":"https://github.com/php-type-language/reader","commit_stats":null,"previous_names":["php-type-language/reflection-converter","php-type-language/reader"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/php-type-language/reader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-type-language%2Freader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-type-language%2Freader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-type-language%2Freader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-type-language%2Freader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/php-type-language","download_url":"https://codeload.github.com/php-type-language/reader/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-type-language%2Freader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28406513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T21:51:37.118Z","status":"ssl_error","status_checked_at":"2026-01-13T21:45:14.585Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","converter","php","reader","reflection","types"],"created_at":"2025-12-30T09:20:44.547Z","updated_at":"2026-01-14T00:34:51.857Z","avatar_url":"https://github.com/php-type-language.png","language":"PHP","readme":"\u003ca href=\"https://github.com/php-type-language\" target=\"_blank\"\u003e\n    \u003cimg align=\"center\" src=\"https://github.com/php-type-language/.github/blob/master/assets/dark.png?raw=true\"\u003e\n\u003c/a\u003e\n\n---\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://packagist.org/packages/type-lang/reader\"\u003e\u003cimg src=\"https://poser.pugx.org/type-lang/reader/require/php?style=for-the-badge\" alt=\"PHP 8.1+\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://packagist.org/packages/type-lang/reader\"\u003e\u003cimg src=\"https://poser.pugx.org/type-lang/reader/version?style=for-the-badge\" alt=\"Latest Stable Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://packagist.org/packages/type-lang/reader\"\u003e\u003cimg src=\"https://poser.pugx.org/type-lang/reader/v/unstable?style=for-the-badge\" alt=\"Latest Unstable Version\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://raw.githubusercontent.com/php-type-language/reader/blob/master/LICENSE\"\u003e\u003cimg src=\"https://poser.pugx.org/type-lang/reader/license?style=for-the-badge\" alt=\"License MIT\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/php-type-language/reader/actions\"\u003e\u003cimg src=\"https://github.com/php-type-language/reader/workflows/tests/badge.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\nProvides a set of methods for converting PHP Reflection objects into the\nTypeLang AST Nodes.\n\nRead [documentation pages](https://typelang.dev) for more information.\n\n## Installation\n\nTypeLang Reader is available as Composer repository and can \nbe installed using the following command in a root of your project:\n\n```sh\ncomposer require type-lang/reader\n```\n\n## Quick Start\n\n```php\n$reader = new \\TypeLang\\Reader\\ReflectionReader();\n\n$node = $reader-\u003efindFunctionType(\n    function: new \\ReflectionFunction(function(): void {}),\n);\n\nvar_dump($node);\n```\n\n**Expected Output:**\n```\nTypeLang\\Parser\\Node\\Stmt\\NamedTypeNode {\n  +offset: 0\n  +name: TypeLang\\Parser\\Node\\Name {\n    +offset: 0\n    -parts: array:1 [\n      0 =\u003e TypeLang\\Parser\\Node\\Identifier {\n        +offset: 0\n        +value: \"void\"\n      }\n    ]\n  }\n  +arguments: null\n  +fields: null\n}\n```\n\n### Creating From Reflection\n\n```php\n$class = new \\ReflectionClass(Path\\To\\Example::class);\n\n// Printer component provided by \"type-lang/printer\" package.\n$printer = new \\TypeLang\\Printer\\PrettyPrinter();\n\n$converter = new \\TypeLang\\Reader\\ReflectionReader();\n\n// Dump all constants with its types.\nforeach ($class-\u003egetReflectionConstants() as $constant) {\n    // Creates type node AST from a constant's type.\n    if ($type = $converter-\u003efindConstantType($constant)) {\n        echo 'const ' . $constant-\u003ename . ' has type ' . $printer-\u003eprint($type) . \"\\n\";\n    }\n}\n\n// Dump all properties with its types.\nforeach ($class-\u003egetProperties() as $property) {\n    // Creates type node AST from a property's type.\n    if ($type = $converter-\u003efindPropertyType($property)) {\n        echo 'property ' . $property-\u003ename . ' has type ' . $printer-\u003eprint($type) . \"\\n\";\n    }\n}\n\n// Dump all methods with its types.\nforeach ($class-\u003egetMethods() as $method) {\n    // Creates type node AST from any function's return type.\n    if ($type = $converter-\u003efindFunctionType($method)) {\n        echo 'function ' . $method-\u003ename . ' has type ' . $printer-\u003eprint($type) . \"\\n\";\n    }\n    \n    // Creates type node AST from a parameter's type.\n    foreach ($method-\u003egetParameters() as $parameter) {\n        if ($type = $converter-\u003efindParameterType($parameter)) {\n            echo 'parameter ' . $parameter-\u003ename . ' has type ' . $printer-\u003eprint($type) . \"\\n\";\n        }\n    }\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-type-language%2Freader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphp-type-language%2Freader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-type-language%2Freader/lists"}