1 | <?php declare(strict_types=1); |
||
2 | /** |
||
3 | * This source file is subject to the license that is bundled with this package in the file LICENSE. |
||
4 | */ |
||
5 | |||
6 | namespace PhUml\Parser\Code; |
||
7 | |||
8 | use phpDocumentor\Reflection\DocBlockFactory; |
||
0 ignored issues
–
show
|
|||
9 | use PhpParser\Node\Stmt; |
||
0 ignored issues
–
show
The type
PhpParser\Node\Stmt was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
10 | use PhpParser\NodeTraverser; |
||
0 ignored issues
–
show
The type
PhpParser\NodeTraverser was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
11 | use PhpParser\NodeVisitor\NameResolver; |
||
0 ignored issues
–
show
The type
PhpParser\NodeVisitor\NameResolver was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
12 | use PhpParser\NodeVisitor\NodeConnectingVisitor; |
||
0 ignored issues
–
show
The type
PhpParser\NodeVisitor\NodeConnectingVisitor was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
13 | use PhpParser\Parser; |
||
0 ignored issues
–
show
The type
PhpParser\Parser was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
14 | use PhpParser\ParserFactory; |
||
0 ignored issues
–
show
The type
PhpParser\ParserFactory was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
15 | use PhUml\Code\Codebase; |
||
16 | use PhUml\Parser\Code\Builders\AttributeAnalyzer; |
||
17 | use PhUml\Parser\Code\Builders\ClassDefinitionBuilder; |
||
18 | use PhUml\Parser\Code\Builders\EnumDefinitionBuilder; |
||
19 | use PhUml\Parser\Code\Builders\Filters\PrivateVisibilityFilter; |
||
20 | use PhUml\Parser\Code\Builders\Filters\ProtectedVisibilityFilter; |
||
21 | use PhUml\Parser\Code\Builders\InterfaceDefinitionBuilder; |
||
22 | use PhUml\Parser\Code\Builders\Members\NoConstantsBuilder; |
||
23 | use PhUml\Parser\Code\Builders\Members\NoMethodsBuilder; |
||
24 | use PhUml\Parser\Code\Builders\Members\NoPropertiesBuilder; |
||
25 | use PhUml\Parser\Code\Builders\Members\ParametersBuilder; |
||
26 | use PhUml\Parser\Code\Builders\Members\ParsedConstantsBuilder; |
||
27 | use PhUml\Parser\Code\Builders\Members\ParsedMethodsBuilder; |
||
28 | use PhUml\Parser\Code\Builders\Members\ParsedPropertiesBuilder; |
||
29 | use PhUml\Parser\Code\Builders\Members\TypeBuilder; |
||
0 ignored issues
–
show
The type
PhUml\Parser\Code\Builders\Members\TypeBuilder was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
30 | use PhUml\Parser\Code\Builders\Members\VisibilityBuilder; |
||
31 | use PhUml\Parser\Code\Builders\Members\VisibilityFilters; |
||
32 | use PhUml\Parser\Code\Builders\MembersBuilder; |
||
33 | use PhUml\Parser\Code\Builders\ParameterTagFilterFactory; |
||
34 | use PhUml\Parser\Code\Builders\TagTypeFactory; |
||
0 ignored issues
–
show
The type
PhUml\Parser\Code\Builders\TagTypeFactory was not found. Maybe you did not declare it correctly or list all dependencies?
The issue could also be caused by a filter entry in the build configuration.
If the path has been excluded in your configuration, e.g. filter:
dependency_paths: ["lib/*"]
For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths ![]() |
|||
35 | use PhUml\Parser\Code\Builders\TraitDefinitionBuilder; |
||
36 | use PhUml\Parser\Code\Builders\UseStatementsBuilder; |
||
37 | use PhUml\Parser\Code\Visitors\ClassVisitor; |
||
38 | use PhUml\Parser\Code\Visitors\EnumVisitor; |
||
39 | use PhUml\Parser\Code\Visitors\InterfaceVisitor; |
||
40 | use PhUml\Parser\Code\Visitors\TraitVisitor; |
||
41 | use PhUml\Parser\CodeParserConfiguration; |
||
42 | use PhUml\Parser\SourceCode; |
||
43 | |||
44 | /** |
||
45 | * It traverses the AST of all the files and interfaces found by the `CodeFinder` and builds a |
||
46 | * `Codebase` object |
||
47 | * |
||
48 | * In order to create the collection of definitions it uses the following visitors |
||
49 | * |
||
50 | * - The `ClassVisitor` which builds `ClassDefinition`s |
||
51 | * - The `InterfaceVisitor` which builds `InterfaceDefinition`s |
||
52 | * - The `TraitVisitor` which builds `TraitDefinition`s |
||
53 | */ |
||
54 | final class PhpCodeParser |
||
55 | { |
||
56 | 38 | public static function fromConfiguration(CodeParserConfiguration $configuration): PhpCodeParser |
|
57 | { |
||
58 | 38 | if ($configuration->hideAttributes()) { |
|
59 | 6 | $constantsBuilder = new NoConstantsBuilder(); |
|
60 | 6 | $propertiesBuilder = new NoPropertiesBuilder(); |
|
61 | } |
||
62 | 38 | if ($configuration->hideMethods()) { |
|
63 | 6 | $methodsBuilder = new NoMethodsBuilder(); |
|
64 | } |
||
65 | 38 | $filters = []; |
|
66 | 38 | if ($configuration->hidePrivate()) { |
|
67 | 5 | $filters[] = new PrivateVisibilityFilter(); |
|
68 | } |
||
69 | 38 | if ($configuration->hideProtected()) { |
|
70 | 5 | $filters[] = new ProtectedVisibilityFilter(); |
|
71 | } |
||
72 | 38 | $visibilityBuilder = new VisibilityBuilder(); |
|
73 | 38 | $typeBuilder = new TypeBuilder(new TypeResolver(new TagTypeFactory(DocBlockFactory::createInstance()))); |
|
74 | 38 | $parameterFilter = new ParameterTagFilterFactory(); |
|
75 | 38 | $methodsBuilder ??= new ParsedMethodsBuilder( |
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||
76 | 32 | new ParametersBuilder($typeBuilder, $parameterFilter), |
|
77 | $typeBuilder, |
||
78 | $visibilityBuilder, |
||
79 | ); |
||
80 | 38 | $constantsBuilder ??= new ParsedConstantsBuilder($visibilityBuilder); |
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||
81 | 38 | $propertiesBuilder ??= new ParsedPropertiesBuilder($visibilityBuilder, $typeBuilder, $parameterFilter); |
|
0 ignored issues
–
show
Comprehensibility
Best Practice
introduced
by
|
|||
82 | 38 | $filters = new VisibilityFilters($filters); |
|
83 | 38 | $membersBuilder = new MembersBuilder($constantsBuilder, $propertiesBuilder, $methodsBuilder, $filters); |
|
84 | 38 | $useStatementsBuilder = new UseStatementsBuilder(); |
|
85 | 38 | $classBuilder = new ClassDefinitionBuilder($membersBuilder, $useStatementsBuilder, new AttributeAnalyzer()); |
|
86 | 38 | $interfaceBuilder = new InterfaceDefinitionBuilder($membersBuilder, $useStatementsBuilder); |
|
87 | 38 | $traitBuilder = new TraitDefinitionBuilder($membersBuilder, $useStatementsBuilder); |
|
88 | 38 | $enumBuilder = new EnumDefinitionBuilder($membersBuilder, $useStatementsBuilder); |
|
89 | |||
90 | 38 | $codebase = new Codebase(); |
|
91 | |||
92 | 38 | $parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7); |
|
93 | 38 | $traverser = new NodeTraverser(); |
|
94 | 38 | $traverser->addVisitor(new NameResolver()); |
|
95 | 38 | $traverser->addVisitor(new NodeConnectingVisitor()); |
|
96 | 38 | $traverser->addVisitor(new ClassVisitor($classBuilder, $codebase)); |
|
97 | 38 | $traverser->addVisitor(new InterfaceVisitor($interfaceBuilder, $codebase)); |
|
98 | 38 | $traverser->addVisitor(new TraitVisitor($traitBuilder, $codebase)); |
|
99 | 38 | $traverser->addVisitor(new EnumVisitor($enumBuilder, $codebase)); |
|
100 | 38 | $traverser = new PhpTraverser($traverser, $codebase); |
|
101 | |||
102 | 38 | return new self($parser, $traverser); |
|
103 | } |
||
104 | |||
105 | 38 | private function __construct( |
|
106 | private readonly Parser $parser, |
||
107 | private readonly PhpTraverser $traverser, |
||
108 | ) { |
||
109 | } |
||
110 | |||
111 | 32 | public function parse(SourceCode $sourceCode): Codebase |
|
112 | { |
||
113 | 32 | foreach ($sourceCode->fileContents() as $code) { |
|
114 | /** @var Stmt[] $nodes Since the parser is configured to throw in case of errors */ |
||
115 | 30 | $nodes = $this->parser->parse($code); |
|
116 | 30 | $this->traverser->traverse($nodes); |
|
117 | } |
||
118 | 32 | return $this->traverser->codebase(); |
|
119 | } |
||
120 | } |
||
121 |
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths