ไลบรารีนี้ phpstan/phpdoc-parser แสดงถึง PHPDocs ด้วย AST (Abstract Syntax Tree) รองรับการแยกวิเคราะห์และแก้ไข PHPDocs
สำหรับรายการคุณสมบัติ PHPDoc ที่รองรับทั้งหมด โปรดดูเอกสารประกอบของ PHPStan PHPStan เป็นผู้ใช้หลัก (แต่ไม่ใช่เพียงคนเดียว) ของไลบรารีนี้
parser นี้ยังสนับสนุนการแยกวิเคราะห์คำอธิบายประกอบหลักคำสอนด้วย โหนด 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 ในกรณีที่คุณไม่ได้ทำงานในโฟลเดอร์ที่สร้างขึ้นก่อนหน้านี้
หลังจากนั้นคุณสามารถรันทั้งบิลด์รวมถึง linting และ coding มาตรฐานโดยใช้
make
หรือรันเฉพาะการทดสอบโดยใช้
make tests