تمثل مكتبة phpstan/phpdoc-parser
هذه PHPDocs باستخدام AST (شجرة بناء الجملة المجردة). وهو يدعم تحليل وتعديل PHPDocs.
للحصول على القائمة الكاملة لميزات PHPDoc المدعومة، راجع وثائق PHPStan. PHPStan هو المستخدم الرئيسي (ولكن ليس الوحيد) لهذه المكتبة.
يدعم هذا المحلل أيضًا تحليل التعليقات التوضيحية للمبادئ. تعيش عقد AST في مساحة الاسم PHPStanPhpDocParserAstPhpDocDoctrine.
composer require phpstan/phpdoc-parser
<?php
require_once __DIR__ . ' /vendor/autoload.php ' ;
use PHPStan PhpDocParser Ast PhpDoc ParamTagValueNode ;
use PHPStan PhpDocParser Ast PhpDoc PhpDocNode ;
use PHPStan PhpDocParser Ast Type IdentifierTypeNode ;
use PHPStan PhpDocParser Lexer Lexer ;
use PHPStan PhpDocParser ParserConfig ;
use PHPStan PhpDocParser Parser ConstExprParser ;
use PHPStan PhpDocParser Parser PhpDocParser ;
use PHPStan PhpDocParser Parser TokenIterator ;
use PHPStan PhpDocParser Parser TypeParser ;
// basic setup
$ config = new ParserConfig (usedAttributes: []);
$ lexer = new Lexer ( $ config );
$ constExprParser = new ConstExprParser ( $ config );
$ typeParser = new TypeParser ( $ config , $ constExprParser );
$ phpDocParser = new PhpDocParser ( $ config , $ typeParser , $ constExprParser );
// parsing and reading a PHPDoc string
$ tokens = new TokenIterator ( $ lexer -> tokenize ( ' /** @param Lorem $a */ ' ));
$ phpDocNode = $ phpDocParser -> parse ( $ tokens ); // PhpDocNode
$ paramTags = $ phpDocNode -> getParamTagValues (); // ParamTagValueNode[]
echo $ paramTags [ 0 ]-> parameterName ; // '$a'
echo $ paramTags [ 0 ]-> type ; // IdentifierTypeNode - 'Lorem'
يمكن استخدام هذا المكون لتعديل AST وطباعته مرة أخرى في أقرب وقت ممكن من الأصل.
إنه مستوحى بشكل كبير من مكون الطابعة الذي يحافظ على التنسيق في nikic/PHP-Parser.
<?php
require_once __DIR__ . ' /vendor/autoload.php ' ;
use PHPStan PhpDocParser Ast NodeTraverser ;
use PHPStan PhpDocParser Ast NodeVisitor CloningVisitor ;
use PHPStan PhpDocParser Ast PhpDoc PhpDocNode ;
use PHPStan PhpDocParser Ast Type IdentifierTypeNode ;
use PHPStan PhpDocParser Lexer Lexer ;
use PHPStan PhpDocParser ParserConfig ;
use PHPStan PhpDocParser Parser ConstExprParser ;
use PHPStan PhpDocParser Parser PhpDocParser ;
use PHPStan PhpDocParser Parser TokenIterator ;
use PHPStan PhpDocParser Parser TypeParser ;
use PHPStan PhpDocParser Printer Printer ;
// basic setup with enabled required lexer attributes
$ config = new ParserConfig (usedAttributes: [ ' lines ' => true , ' indexes ' => true ]);
$ lexer = new Lexer ( $ config );
$ constExprParser = new ConstExprParser ( $ config );
$ typeParser = new TypeParser ( $ config , $ constExprParser );
$ phpDocParser = new PhpDocParser ( $ config , $ typeParser , $ constExprParser );
$ tokens = new TokenIterator ( $ lexer -> tokenize ( ' /** @param Lorem $a */ ' ));
$ phpDocNode = $ phpDocParser -> parse ( $ tokens ); // PhpDocNode
$ cloningTraverser = new NodeTraverser ([ new CloningVisitor ()]);
/** @var PhpDocNode $newPhpDocNode */
[ $ newPhpDocNode ] = $ cloningTraverser -> traverse ([ $ phpDocNode ]);
// change something in $newPhpDocNode
$ newPhpDocNode -> getParamTagValues ()[ 0 ]-> type = new IdentifierTypeNode ( ' Ipsum ' );
// print changed PHPDoc
$ printer = new Printer ();
$ newPhpDoc = $ printer -> printFormatPreserving ( $ newPhpDocNode , $ phpDocNode , $ tokens );
echo $ newPhpDoc ; // '/** @param Ipsum $a */'
يلتزم هذا المشروع بقواعد سلوك المساهمين. من خلال المشاركة في هذا المشروع ومجتمعه، يتوقع منك التمسك بهذا الرمز.
في البداية تحتاج إلى تشغيل composer install
أو composer update
في حالة عدم العمل في مجلد تم إنشاؤه من قبل.
بعد ذلك، يمكنك إما تشغيل البنية بأكملها بما في ذلك معايير الفحص والترميز باستخدام
make
أو تشغيل الاختبارات فقط باستخدام
make tests