https://github.com/krypt0nn/moduleparser
Парсер классов, функций, трейтов и интерфейсов из PHP кода для PHP 5.3+
https://github.com/krypt0nn/moduleparser
Last synced: about 2 months ago
JSON representation
Парсер классов, функций, трейтов и интерфейсов из PHP кода для PHP 5.3+
- Host: GitHub
- URL: https://github.com/krypt0nn/moduleparser
- Owner: krypt0nn
- License: gpl-3.0
- Created: 2020-05-04T16:26:43.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2020-08-27T16:38:15.000Z (almost 6 years ago)
- Last Synced: 2025-02-24T06:16:58.602Z (over 1 year ago)
- Language: PHP
- Homepage:
- Size: 66.4 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
🚀 ModuleParser
**ModuleParser** - класс для анализа PHP файлов на классы, функции, интерфейсы и трейты. С помощью этого класса можно узнать позиции начала и конца синтаксических структур, их названия и описания. Так же поддерживаются лямбда-функции и классы
## Установка
```cmd
php qero.phar i KRypt0nn/ModuleParser
```
```php
или
Скачайте файл `ModuleParser.php` и подключите его к проекту с помощью *require*
```php
. Не является уникальным идентификатором
| description | string | Полное описание структуры формата `public function example($a): int`
| begin | int | Индекс начала структуры внутри кода. Под началом подразумевается первый символ ключевых слов структуры (public, class и т.п.) |
| bracket_begin | int \| null | Индекс начала структуры внутри кода, где под началом подразумевается первый символ открывающейся фигурной скобки. Может быть равен null если этого символа нет (к примеру, у функций интерфейсов) |
| end | int | Индекс конца структуры внутри кода. Может указывать как на закрывающую фигурную скобку, так и на точку с запятой (см. выше) |
| code | string \| null | Код синтаксической структуры начиная с bracket_begin и заканчивая end. Может быть равен пустой строке либо null, если код не указан (см. выше) |
| definition | string | Код объявления синтаксической структуры начиная с begin и заканчивая end. Как и код выше, автоматически приводится в нижнее значение табуляции |
| return_type | string \| null | Тип возвращаемого значения (для функций). Если не указан - принимает значение null |
| subitems | array | Массив дочерних элементов, аналогичный возвращаемому методом `ModuleParser\ModuleParser::parse`. Для классов - это функции, которые находятся внутри него, и т.п. |
| keywords | array | Массив ключевых слов структуры. К примеру, `[public, static]` |
| arguments | array | Массив аргументов функций. К примеру, `[$a, $b = null]` |
| points = 0 | int | Системное свойство, отвечающее в процессе работы за анализ правильной скобочной последовательности. **Не используется на практике** |
Помимо этого класс `ModuleParser\ModuleParser` имеет несколько статичных свойств
| Свойство | Тип | Описание |
| - | - | - |
| parse_lambda_functions = true | bool | Парсить ли анонимные функции |
| parse_lambda_classes = true | bool | Парсить ли анонимные классы |
| allowed_chars = [...] | array | Список символов, после которых разрешено использование синтаксических конструкций |
| keywords = [...] | array | Список ключевых слов для функций и классов |
| tab_weight = 4 | int | Количество пробелов, соразмерных с одним табом |
К примеру, для оптимизации работы кода вы можете отключить парсинг лямбда-классов и функций
## Пример работы
```php
description . PHP_EOL;
if (sizeof ($module->subitems) > 0)
{
echo str_repeat (' ', $deep) .' +---+'. PHP_EOL;
printStructure ($module->subitems, $deep + 4);
echo str_repeat (' ', $deep) .' +---+'. PHP_EOL;
}
}
}
printStructure (ModuleParser::parse ('example.php'));
```
К примеру, `example.php` (где я понабирал этот ужас можете не спрашивать):
```php
color = $this->colorOne;
$this->font->color = $this->FontColorOne;
$this->alignment = $this->hAlign;
$this->autoSize = false;
$this->layout = $this->vAlign;
}
public function __initComponentInfo()
{
$this->alignment = $this->hAlign;
$this->autoSize = false;
$this->layout = $this->vAlign;
$obj = $this;
$this->onMouseLeave = function() use ($obj)
{
$obj->color = $obj->ColorOne;
$obj->font->color = $obj->FontColorOne;
};
$this->onMouseEnter = function() use ($obj)
{
$obj->color = $obj->ColorTwo;
$obj->font->color = $obj->FontColorTwo;
};
$this->onMouseDown = function() use ($obj)
{
$obj->color = $obj->ColorThree;
$obj->font->color = $obj->FontColorThree;
};
$this->onMouseUp = function() use ($obj)
{
$obj->color = $obj->ColorTwo;
$obj->font->color = $obj->FontColorTwo;
};
}
}
$test = function () {};
$test = (new class { public static function test () { (function () {(new class { public static function test () { (function () {}) (); } })::test ();}) (); } })::test ();
function test1 () {}
interface test2
{
public static function test ($a, $b, $c);
}
trait example{public static function test ($a, $b, $c){}}
// function test1 () {}
# function test2 () {}
/*
function test3 () {}
*/
/**
* function test4 () {}
*/
$test = <<< TEST1
function test5 () {}
TEST1;
$test = <<< 'TEST2'
function test6 () {}
TEST2;
```
преобразуется в
```
| final class TMultiButton extends TLabel
+---+
| function __construct($onwer = nil, $init = true, $self = nil)
| public function __initComponentInfo()
+---+
| function() use ($obj)
| function() use ($obj)
| function() use ($obj)
| function() use ($obj)
+---+
+---+
| function ()
| new class
+---+
| public static function test()
+---+
| function ()
+---+
| new class
+---+
| public static function test()
+---+
| function()
+---+
+---+
+---+
+---+
+---+
| function test1()
| interface test2
+---+
| public static function test($a, $b, $c)
+---+
| trait example
+---+
| public static function test($a, $b, $c)
+---+
```
## Известные проблемы
- [ ] Возможно использование многострочных комментариев для сбивания алгоритма
```php