rector / simple-php-doc-parser
This package is abandoned and no longer maintained.
The author suggests using the symplify/simple-php-doc-parser package instead.
Service integration of phpstan/phpdoc-parser, with few extra goodies for practical simple use
Package info
github.com/deprecated-packages/simple-php-doc-parser
pkg:composer/rector/simple-php-doc-parser
10.0.25
2022-02-20 11:17 UTC
Requires
- php: >=8.0
- phpstan/phpdoc-parser: ^1.2
- symfony/config: ^5.4|^6.0
- symfony/dependency-injection: ^5.4|^6.0
- symplify/package-builder: ^10.0.25
Requires (Dev)
- phpunit/phpunit: ^9.5
- symplify/easy-testing: ^10.0.25
Conflicts
- symplify/amnesia: <10.0.25
- symplify/astral: <10.0.25
- symplify/autowire-array-parameter: <10.0.25
- symplify/coding-standard: <10.0.25
- symplify/composer-json-manipulator: <10.0.25
- symplify/config-transformer: <10.0.25
- symplify/easy-ci: <10.0.25
- symplify/easy-coding-standard: <10.0.25
- symplify/easy-parallel: <10.0.25
- symplify/easy-testing: <10.0.25
- symplify/git-wrapper: <10.0.25
- symplify/latte-phpstan-compiler: <10.0.25
- symplify/markdown-diff: <10.0.25
- symplify/monorepo-builder: <10.0.25
- symplify/neon-config-dumper: <10.0.25
- symplify/php-config-printer: <10.0.25
- symplify/phpstan-extensions: <10.0.25
- symplify/phpstan-latte-rules: <10.0.25
- symplify/phpstan-rules: <10.0.25
- symplify/rule-doc-generator: <10.0.25
- symplify/rule-doc-generator-contracts: <10.0.25
- symplify/skipper: <10.0.25
- symplify/smart-file-system: <10.0.25
- symplify/symfony-static-dumper: <10.0.25
- symplify/symplify-kernel: <10.0.25
- symplify/template-phpstan-compiler: <10.0.25
- symplify/vendor-patches: <10.0.25
This package is auto-updated.
Last update: 2022-02-20 11:19:58 UTC
README
Simple service integration of phpstan/phpdoc-parser, with few extra goodies for practical use
1. Install
composer require symplify/simple-php-doc-parser
2. Register Config
Register config in your config/config.php:
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; use Symplify\SimplePhpDocParser\ValueObject\SimplePhpDocParserConfig; return static function (ContainerConfigurator $containerConfigurator): void { $containerConfigurator->import(SimplePhpDocParserConfig::FILE_PATH); };
3. Usage of SimplePhpDocParser
Required services Symplify\SimplePhpDocParser\SimplePhpDocParser in constructor, where you need it, and use it:
use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode; use PHPStan\PhpDocParser\Ast\Type\TypeNode; use Symplify\SimplePhpDocParser\SimplePhpDocParser; final class SomeClass { /** * @var SimplePhpDocParser */ private $simplePhpDocParser; public function __construct(SimplePhpDocParser $simplePhpDocParser) { $this->simplePhpDocParser = $simplePhpDocParser; } public function some(): void { $docBlock = '/** @param int $name */'; /** @var PhpDocNode $phpDocNode */ $simplePhpDocNode = $this->simplePhpDocParser->parseDocBlock($docBlock); // param extras /** @var TypeNode $nameParamType */ $nameParamType = $simplePhpDocNode->getParamType('name'); /** @var ParamTagValueNode $nameParamTagValueNode */ $nameParamTagValueNode = $simplePhpDocNode->getParam('name'); } }
4. Traverse Nodes with PhpDocNodeTraverser
use PHPStan\PhpDocParser\Ast\Node; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocNode; use PHPStan\PhpDocParser\Ast\PhpDoc\PhpDocTagNode; use PHPStan\PhpDocParser\Ast\PhpDoc\VarTagValueNode; use PHPStan\PhpDocParser\Ast\Type\IdentifierTypeNode; use Symplify\SimplePhpDocParser\PhpDocNodeTraverser; use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\AbstractPhpDocNodeVisitor; use Symplify\SimplePhpDocParser\PhpDocNodeVisitor\CallablePhpDocNodeVisitor; $phpDocNodeTraverser = new PhpDocNodeTraverser(); $phpDocNode = new PhpDocNode([new PhpDocTagNode('@var', new VarTagValueNode(new IdentifierTypeNode('string')))]); // A. you can use callable to traverse $callable = function (Node $node): Node { if (! $node instanceof VarTagValueNode) { return $node; } $node->type = new IdentifierTypeNode('int'); return $node; }; $callablePhpDocNodeVisitor = new CallablePhpDocNodeVisitor($callable, null); $phpDocNodeTraverser->addPhpDocNodeVisitor($callablePhpDocNodeVisitor); // B. or class that extends AbstractPhpDocNodeVisitor final class IntegerPhpDocNodeVisitor extends AbstractPhpDocNodeVisitor { /** * @return Node|int|null */ public function enterNode(Node $node) { if (! $node instanceof VarTagValueNode) { return $node; } $node->type = new IdentifierTypeNode('int'); return $node; } } $integerPhpDocNodeVisitor = new IntegerPhpDocNodeVisitor(); $phpDocNodeTraverser->addPhpDocNodeVisitor($integerPhpDocNodeVisitor); // then traverse the main node $phpDocNodeTraverser->traverse($phpDocNode);