{"id":19325434,"url":"https://github.com/krypt0nn/moduleparser","last_synced_at":"2026-05-12T23:07:09.538Z","repository":{"id":144045211,"uuid":"261237434","full_name":"krypt0nn/ModuleParser","owner":"krypt0nn","description":"Парсер классов, функций, трейтов и интерфейсов из PHP кода для PHP 5.3+","archived":false,"fork":false,"pushed_at":"2020-08-27T16:38:15.000Z","size":68,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-24T06:16:58.602Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/krypt0nn.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,"publiccode":null,"codemeta":null}},"created_at":"2020-05-04T16:26:43.000Z","updated_at":"2020-08-27T16:38:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"d0db8aab-e31c-4b09-b003-6075fb97a87b","html_url":"https://github.com/krypt0nn/ModuleParser","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/krypt0nn/ModuleParser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krypt0nn%2FModuleParser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krypt0nn%2FModuleParser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krypt0nn%2FModuleParser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krypt0nn%2FModuleParser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/krypt0nn","download_url":"https://codeload.github.com/krypt0nn/ModuleParser/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/krypt0nn%2FModuleParser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32960363,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-12T09:19:52.626Z","status":"ssl_error","status_checked_at":"2026-05-12T09:17:33.438Z","response_time":102,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":[],"created_at":"2024-11-10T02:10:02.248Z","updated_at":"2026-05-12T23:07:09.502Z","avatar_url":"https://github.com/krypt0nn.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🚀 ModuleParser\u003c/h1\u003e\n\n**ModuleParser** - класс для анализа PHP файлов на классы, функции, интерфейсы и трейты. С помощью этого класса можно узнать позиции начала и конца синтаксических структур, их названия и описания. Так же поддерживаются лямбда-функции и классы\n\n## Установка\n```cmd\nphp qero.phar i KRypt0nn/ModuleParser\n```\n\n```php\n\u003c?php\n\nrequire 'qero-packages/autoload.php';\n```\n\n[Что такое Qero?](https://github.com/KRypt0nn/Qero)\n\n\u003cp align=\"center\"\u003eили\u003c/p\u003e\n\nСкачайте файл `ModuleParser.php` и подключите его к проекту с помощью *require*\n\n```php\n\u003c?php\n\nrequire 'ModuleParser.php';\n```\n\n## Быстрый старт\n\nДля получения информации о синтаксических конструкциях внутри кода необходимо вызвать метод `ModuleParser\\ModuleParser::parse(string $code): array`\n\nДанный метод принимает в качестве единственного аргумента либо текст, из которого необходимо получить все синтаксические структуры (классы, функции, интерфейсы и трейты), либо путь до файла, из которого этот текст необходимо взять\n\nВ качестве результата метод возвращает массив объектов `ModuleParser\\Item`, которые представляют собой структуры хранения информации о синтаксической структуре. Вот список доступных свойств\n\n| Свойство | Тип | Описание |\n| - | - | - |\n| type | string | Тип синтаксической структуры. Доступные значения: function, lambda_function, class, lambda_class, interface, trait\n| name | string | Название структуры. Имя функции / класса либо специальное значение вида \u003ctype @ random int\u003e. Не является уникальным идентификатором\n| description | string | Полное описание структуры формата `public function example($a): int`\n| begin | int | Индекс начала структуры внутри кода. Под началом подразумевается первый символ ключевых слов структуры (public, class и т.п.) |\n| bracket_begin | int \\| null | Индекс начала структуры внутри кода, где под началом подразумевается первый символ открывающейся фигурной скобки. Может быть равен null если этого символа нет (к примеру, у функций интерфейсов) |\n| end | int | Индекс конца структуры внутри кода. Может указывать как на закрывающую фигурную скобку, так и на точку с запятой (см. выше) |\n| code | string \\| null | Код синтаксической структуры начиная с bracket_begin и заканчивая end. Может быть равен пустой строке либо null, если код не указан (см. выше) |\n| definition | string | Код объявления синтаксической структуры начиная с begin и заканчивая end. Как и код выше, автоматически приводится в нижнее значение табуляции |\n| return_type | string \\| null | Тип возвращаемого значения (для функций). Если не указан - принимает значение null |\n| subitems | array | Массив дочерних элементов, аналогичный возвращаемому методом `ModuleParser\\ModuleParser::parse`. Для классов - это функции, которые находятся внутри него, и т.п. |\n| keywords | array | Массив ключевых слов структуры. К примеру, `[public, static]` |\n| arguments | array | Массив аргументов функций. К примеру, `[$a, $b = null]` |\n| points = 0 | int | Системное свойство, отвечающее в процессе работы за анализ правильной скобочной последовательности. **Не используется на практике** |\n\nПомимо этого класс `ModuleParser\\ModuleParser` имеет несколько статичных свойств\n\n| Свойство | Тип | Описание |\n| - | - | - |\n| parse_lambda_functions = true | bool | Парсить ли анонимные функции |\n| parse_lambda_classes = true | bool | Парсить ли анонимные классы |\n| allowed_chars = [...] | array | Список символов, после которых разрешено использование синтаксических конструкций |\n| keywords = [...] | array | Список ключевых слов для функций и классов |\n| tab_weight = 4 | int | Количество пробелов, соразмерных с одним табом |\n\nК примеру, для оптимизации работы кода вы можете отключить парсинг лямбда-классов и функций\n\n## Пример работы\n\n```php\n\u003c?php\n\nrequire 'qero-packages/autoload.php';\n\nuse ModuleParser\\ModuleParser;\n\nfunction printStructure ($modules, $deep = 0)\n{\n    foreach ($modules as $module)\n    {\n        echo str_repeat (' ', $deep) .' | '. $module-\u003edescription . PHP_EOL;\n\n        if (sizeof ($module-\u003esubitems) \u003e 0)\n        {\n            echo str_repeat (' ', $deep) .' +---+'. PHP_EOL;\n\n            printStructure ($module-\u003esubitems, $deep + 4);\n\n            echo str_repeat (' ', $deep) .' +---+'. PHP_EOL;\n        }\n    }\n}\n\nprintStructure (ModuleParser::parse ('example.php'));\n```\n\nК примеру, `example.php` (где я понабирал этот ужас можете не спрашивать):\n\n```php\n\u003c?php\n\nfinal class TMultiButton extends TLabel\n{\n\tpublic $class_name_ex = __CLASS__;\n\tfunction __construct($onwer = nil, $init = true, $self = nil)\n\t{\n\t\tparent::__construct($onwer, $init, $self);\n\t\t$this-\u003ecolor       = $this-\u003ecolorOne;\n\t\t$this-\u003efont-\u003ecolor = $this-\u003eFontColorOne;\n\t\t$this-\u003ealignment   = $this-\u003ehAlign;\n\t\t$this-\u003eautoSize    = false;\n\t\t$this-\u003elayout      = $this-\u003evAlign;\n\t}\n\tpublic function __initComponentInfo()\n\t{\n\t\t$this-\u003ealignment = $this-\u003ehAlign;\n\t\t$this-\u003eautoSize  = false;\n\t\t$this-\u003elayout    = $this-\u003evAlign;\n\t\t$obj             = $this;\n\t\t$this-\u003eonMouseLeave = function() use ($obj)\n\t\t{\n\t\t\t$obj-\u003ecolor       = $obj-\u003eColorOne;\n\t\t\t$obj-\u003efont-\u003ecolor = $obj-\u003eFontColorOne;\n\t\t};\n\t\t$this-\u003eonMouseEnter = function() use ($obj)\n\t\t{\n\t\t\t$obj-\u003ecolor       = $obj-\u003eColorTwo;\n\t\t\t$obj-\u003efont-\u003ecolor = $obj-\u003eFontColorTwo;\n\t\t};\n\t\t$this-\u003eonMouseDown = function() use ($obj)\n\t\t{\n\t\t\t$obj-\u003ecolor       = $obj-\u003eColorThree;\n\t\t\t$obj-\u003efont-\u003ecolor = $obj-\u003eFontColorThree;\n\t\t};\n\t\t$this-\u003eonMouseUp = function() use ($obj)\n\t\t{\n\t\t\t$obj-\u003ecolor       = $obj-\u003eColorTwo;\n\t\t\t$obj-\u003efont-\u003ecolor = $obj-\u003eFontColorTwo;\n\t\t};\n\t}\n}\n\n$test = function () {};\n\n$test = (new class { public static function test () { (function () {(new class { public static function test () { (function () {}) (); } })::test ();}) (); } })::test ();\n\nfunction test1 () {}\n\ninterface test2\n{\n\tpublic static function test ($a, $b, $c);\n}\n\ntrait example{public static function test ($a, $b, $c){}}\n\n// function test1 () {}\n# function test2 () {}\n\n/*\n\tfunction test3 () {}\n*/\n\n/**\n * function test4 () {}\n */\n\n$test = \u003c\u003c\u003c\t\t\t\t\t\tTEST1\n\nfunction test5 () {}\n\nTEST1;\n\n$test = \u003c\u003c\u003c\t\t\t\t'TEST2'\n\nfunction test6 () {}\n\nTEST2;\n```\n\nпреобразуется в\n\n```\n | final class TMultiButton extends TLabel\n +---+\n     | function __construct($onwer = nil, $init = true, $self = nil)\n     | public function __initComponentInfo()\n     +---+\n         | function() use ($obj)\n         | function() use ($obj)\n         | function() use ($obj)\n         | function() use ($obj)\n     +---+\n +---+\n | function ()\n | new class\n +---+\n     | public static function test()\n     +---+\n         | function ()\n         +---+\n             | new class\n             +---+\n                 | public static function test()\n                 +---+\n                     | function()\n                 +---+\n             +---+\n         +---+\n     +---+\n +---+\n | function test1()\n | interface test2\n +---+\n     | public static function test($a, $b, $c)\n +---+\n | trait example\n +---+\n     | public static function test($a, $b, $c)\n +---+\n```\n\n## Известные проблемы\n- [ ] Возможно использование многострочных комментариев для сбивания алгоритма\n\n```php\n\u003c?php\n\npublic /* 1 */ function /* 2 */ example /* 3 */ (/* 4 */)\n{\n\t// do something\n}\n\n```\n\nАвтор: [Подвирный Никита](https://vk.com/technomindlp). Специально для [Enfesto Studio Group](https://vk.com/hphp_convertation) и [Every Software](https://vk.com/evsoft)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrypt0nn%2Fmoduleparser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkrypt0nn%2Fmoduleparser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkrypt0nn%2Fmoduleparser/lists"}