Pustaka phpstan/phpdoc-parser
ini mewakili PHPDocs dengan AST (Pohon Sintaks Abstrak). Ini mendukung penguraian dan modifikasi PHPDocs.
Untuk daftar lengkap fitur PHPDoc yang didukung, lihat dokumentasi PHPStan. PHPStan adalah pengguna utama (tetapi bukan satu-satunya) perpustakaan ini.
Pengurai ini juga mendukung penguraian Anotasi Ajaran. Node AST berada di namespace 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'
Komponen ini dapat digunakan untuk memodifikasi AST dan mencetaknya kembali semirip mungkin dengan aslinya.
Ini sangat terinspirasi oleh komponen printer pelestarian format di 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 */'
Proyek ini mematuhi Kode Etik Kontributor. Dengan berpartisipasi dalam proyek ini dan komunitasnya, Anda diharapkan menjunjung tinggi kode ini.
Awalnya Anda perlu menjalankan composer install
, atau composer update
jika Anda tidak bekerja di folder yang dibuat sebelumnya.
Setelah itu Anda dapat menjalankan seluruh build termasuk menggunakan standar linting dan coding
make
atau jalankan tes saja menggunakan
make tests