Diese Bibliothek phpstan/phpdoc-parser repräsentiert PHPDocs mit einem AST (Abstract Syntax Tree). Es unterstützt das Parsen und Ändern von PHPDocs.
Die vollständige Liste der unterstützten PHPDoc-Funktionen finden Sie in der PHPStan-Dokumentation. PHPStan ist der Hauptnutzer (aber nicht der einzige) dieser Bibliothek.
Dieser Parser unterstützt auch das Parsen von Doctrine Annotations. Die AST-Knoten befinden sich im 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'Mit dieser Komponente kann der AST modifiziert und erneut möglichst originalgetreu gedruckt werden.
Es ist stark von der formaterhaltenden Druckerkomponente in nikic/PHP-Parser inspiriert.
<?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 */' Dieses Projekt unterliegt einem Verhaltenskodex für Mitwirkende. Durch die Teilnahme an diesem Projekt und seiner Community wird von Ihnen erwartet, dass Sie diesen Kodex einhalten.
Zunächst müssen Sie composer install oder composer update ausführen, falls Sie nicht in einem Ordner arbeiten, der zuvor erstellt wurde.
Anschließend können Sie entweder den gesamten Build einschließlich Linting und Codierungsstandards ausführen
make
oder führen Sie nur Tests mit aus
make tests