Cette bibliothèque phpstan/phpdoc-parser
représente PHPDocs avec un AST (Abstract Syntax Tree). Il prend en charge l'analyse et la modification des PHPDocs.
Pour la liste complète des fonctionnalités PHPDoc prises en charge, consultez la documentation PHPStan. PHPStan est le principal (mais pas le seul) utilisateur de cette bibliothèque.
Cet analyseur prend également en charge l'analyse des annotations de doctrine. Les nœuds AST vivent dans l'espace de noms 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'
Ce composant peut être utilisé pour modifier l'AST et l'imprimer à nouveau au plus près de l'original.
Il est fortement inspiré du composant d'imprimante préservant le format dans 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 */'
Ce projet adhère à un code de conduite des contributeurs. En participant à ce projet et à sa communauté, vous êtes censé respecter ce code.
Au départ, vous devez exécuter composer install
ou composer update
au cas où vous ne travailleriez pas dans un dossier qui a été créé auparavant.
Ensuite, vous pouvez soit exécuter l'intégralité de la version, y compris les normes de peluchage et de codage, en utilisant
make
ou exécutez uniquement des tests en utilisant
make tests