Skip to content

Commit 0c19cba

Browse files
committed
fixed new files parsing
Removed dependency on known FQCN before parsing, so that new files could be parsed now
1 parent 7d88d7a commit 0c19cba

11 files changed

Lines changed: 84 additions & 25 deletions

File tree

src/Complete/CompleteEngine.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,6 @@ protected function processFileContent(Project $project, $lines, $line, $file){
136136
$nodes = $parser->parseContent($fqcn, $file, $content);
137137
$this->generator->processFileNodes(
138138
$project->getIndex(),
139-
$fqcn,
140139
$nodes
141140
);
142141
$scopeNodes = $this->scopeProcessor->getResultNodes();

src/Entity/FQN.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@ class FQN {
66

77
public function __construct($namespace = ""){
88
if($namespace){
9-
if(!is_array($namespace)){
9+
if($namespace instanceof FQN){
10+
$this->parts = $namespace->getParts();
11+
}
12+
elseif(!is_array($namespace)){
1013
$this->parts = explode("\\", $namespace);
1114
}
1215
else{

src/Entity/Node/Uses.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ public function getFQCN(){
4343
return $this->fqcn;
4444
}
4545

46+
public function setFQCN(FQN $fqcn){
47+
$this->fqcn = $fqcn;
48+
}
49+
4650
/**
4751
* Adds FQCN to uses map
4852
*/

src/Generator/IndexGenerator.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -156,12 +156,14 @@ public function processFileNodes(Index $index, $nodes){
156156
$this->getLogger()->addDebug('Processing nodes ' . count($nodes));
157157
foreach($nodes as $node){
158158
if($node instanceof ClassData){
159+
$this->getLogger()->addDebug('Processing node ' . $node->name);
159160
$index->addFQCN($node->fqcn);
160-
$index->addClass($node, $node->fqcn->toString());
161+
$index->addClass($node);
161162
}
162163
elseif($node instanceof InterfaceData){
164+
$this->getLogger()->addDebug('Processing node ' . $node->name);
163165
$index->addFQCN($node->fqcn);
164-
$index->addInterface($node, $node->fqcn->toString());
166+
$index->addInterface($node);
165167
}
166168
}
167169
}

src/Parser/ClassParser.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ public function __construct(
3939
$this->useParser = $useParser;
4040
}
4141

42-
public function parse(Class_ $node, Entity\FQCN $fqcn, $file){
42+
public function parse(Class_ $node, Entity\FQN $fqn, $file){
43+
$fqcn = new Entity\FQCN($node->name, $fqn);
44+
print_r('Parsing class: ' . $fqcn->toString() . "\n");
4345
$classData = new Node\ClassData($fqcn, $file);
4446
if($node->extends instanceof Name){
4547
$classData->setParent(

src/Parser/InterfaceParser.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
namespace Parser;
44

5+
use Entity\FQN;
56
use Entity\FQCN;
67
use Entity\Node\InterfaceData;
78
use PhpParser\Node\Stmt\Interface_;
@@ -18,8 +19,9 @@ public function __construct(MethodParser $methodParser){
1819
*
1920
* @return InterfaceData
2021
*/
21-
public function parse(Interface_ $node, FQCN $fqcn, $file)
22+
public function parse(Interface_ $node, FQN $fqn, $file)
2223
{
24+
$fqcn = new FQCN($node->name, $fqn);
2325
$interace = new InterfaceData($fqcn, $file);
2426
foreach($node->stmts AS $child){
2527
if($child instanceof ClassMethod){

src/Parser/NamespaceParser.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Parser;
4+
5+
use PhpParser\Node\Stmt\Namespace_;
6+
use PhpParser\Node\Name;
7+
use Entity\FQN;
8+
use Entity\Node\Uses;
9+
10+
class NamespaceParser {
11+
public function parse(Namespace_ $node){
12+
if($node->name instanceof Name){
13+
$fqn = new FQN($node->name->parts);
14+
$this->uses->setFQCN($fqn);
15+
}
16+
}
17+
public function setUses(Uses $uses = null){
18+
$this->uses = $uses;
19+
}
20+
private $uses;
21+
}

src/Parser/Parser.php

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use PhpParser\Parser AS ASTGenerator;
1010
use PhpParser\NodeTraverser AS Traverser;
1111
use Psr\Log\LoggerInterface;
12+
use Parser\NamespaceParser;
1213

1314
class Parser{
1415

@@ -17,12 +18,14 @@ public function __construct(
1718
PathResolver $path,
1819
Traverser $traverser,
1920
UseParser $useParser,
21+
NamespaceParser $namespaceParser,
2022
LoggerInterface $logger
2123
){
2224
$this->path = $path;
2325
$this->parser = $parser;
2426
$this->traverser = $traverser;
2527
$this->useParser = $useParser;
28+
$this->namespaceParser = $namespaceParser;
2629
$this->processors = [];
2730
$this->astPool = [];
2831
$this->logger = $logger;
@@ -40,15 +43,15 @@ public function parseContent(FQN $fqcn, $file, $content, $createCache=true){
4043
}
4144
list($oldHash, $ast) = $this->astPool[$file];
4245
}
43-
var_dump($fqcn->toString());
4446
if($fqcn instanceof FQCN){
4547
$uses = new Uses($this->parseFQCN($fqcn->getNamespace()));
4648
}
4749
else {
4850
$uses = new Uses($fqcn);
4951
$fqcn = new FQCN('', $fqcn->getParts());
5052
}
51-
$this->useParser->setUses($uses);
53+
$this->setUses($uses);
54+
$this->setFileInfo($uses, $file);
5255
$this->logger->addDebug(sprintf('Cache status: %s', (
5356
$createCache ? 'active' : 'disabled'
5457
)));
@@ -64,7 +67,6 @@ public function parseContent(FQN $fqcn, $file, $content, $createCache=true){
6467
$this->astPool[$file] = [$hash, $ast];
6568
}
6669
}
67-
$this->setFileInfo($fqcn, $file);
6870
$this->logger->addInfo(sprintf("Traversing with %s processors",
6971
count($this->processors)
7072
));
@@ -74,6 +76,10 @@ public function parseContent(FQN $fqcn, $file, $content, $createCache=true){
7476
$this->logger->addInfo('Found ' . count($nodes) . ' nodes');
7577
return $nodes;
7678
}
79+
public function setUses(Uses $uses){
80+
$this->useParser->setUses($uses);
81+
$this->namespaceParser->setUses($uses);
82+
}
7783
public function parseFQCN($fqcn){
7884
return $this->useParser->parseFQCN($fqcn);
7985
}
@@ -95,9 +101,9 @@ public function getResultNode(){
95101
return $nodes;
96102
}
97103

98-
protected function setFileInfo(FQCN $fqcn, $file){
104+
protected function setFileInfo(Uses $uses, $file){
99105
foreach($this->processors AS $processor){
100-
$processor->setFileInfo($fqcn, $file);
106+
$processor->setFileInfo($uses, $file);
101107
}
102108
}
103109

@@ -112,4 +118,7 @@ protected function setFileInfo(FQCN $fqcn, $file){
112118
private $processors;
113119
private $astPool;
114120
private $logger;
121+
/** @var NamespaceParser */
122+
private $namespaceParser;
123+
private $useParser;
115124
}

src/Parser/Processor/IndexProcessor.php

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,32 @@
33
namespace Parser\Processor;
44

55
use Entity\FQCN;
6+
use Entity\Node\Uses;
67
use PhpParser\Node;
78
use PhpParser\NodeVisitorAbstract;
89
use PhpParser\Node\Stmt\Class_;
910
use PhpParser\Node\Stmt\Interface_;
1011
use PhpParser\Node\Stmt\Use_;
12+
use PhpParser\Node\Stmt\Namespace_;
1113
use Parser\ClassParser;
1214
use Parser\InterfaceParser;
1315
use Parser\UseParser;
16+
use Parser\NamespaceParser;
1417

1518
class IndexProcessor extends NodeVisitorAbstract implements ProcessorInterface {
1619
public function __construct(
1720
ClassParser $classParser,
1821
InterfaceParser $interfaceParser,
19-
UseParser $useParser
22+
UseParser $useParser,
23+
NamespaceParser $namespaceParser
2024
){
2125
$this->classParser = $classParser;
2226
$this->interfaceParser = $interfaceParser;
2327
$this->useParser = $useParser;
28+
$this->namespaceParser = $namespaceParser;
2429
}
25-
public function setFileInfo(FQCN $fqcn, $file){
26-
$this->fqcn = $fqcn;
30+
public function setFileInfo(Uses $uses, $file){
31+
$this->uses = $uses;
2732
$this->file = $file;
2833
}
2934
public function parseInterface(Interface_ $node, $fqcn, $file){
@@ -36,23 +41,26 @@ public function parseClass(Class_ $node, $fqcn, $file){
3641
$this->classParser->parse($node, $fqcn, $file)
3742
);
3843
}
39-
public function parseUse(Use_ $node, $fqcn, $file){
40-
$this->useParser->parse($node, $fqcn, $file);
44+
public function parseUse(Use_ $node){
45+
$this->useParser->parse($node);
4146
}
4247
public function parseFQCN($fqcn){
4348
return $this->useParser->parseFQCN($fqcn);
4449
}
4550
public function enterNode(Node $node){
4651
if($node instanceof Use_){
47-
$this->parseUse($node, $this->fqcn, $this->file);
52+
$this->parseUse($node);
53+
}
54+
elseif($node instanceof Namespace_){
55+
$this->namespaceParser->parse($node);
4856
}
4957
}
5058
public function leaveNode(Node $node){
5159
if($node instanceof Class_){
52-
$this->parseClass($node, $this->fqcn, $this->file);
60+
$this->parseClass($node, $this->uses->getFQCN(), $this->file);
5361
}
5462
elseif($node instanceof Interface_){
55-
$this->parseInterface($node, $this->fqcn, $this->file);
63+
$this->parseInterface($node, $this->uses->getFQCN(), $this->file);
5664
}
5765
}
5866
public function clearResultNodes(){
@@ -65,11 +73,11 @@ protected function addResultNode($resultNode){
6573
if(!$resultNode){
6674
return;
6775
}
68-
$resultNode->uses = $this->useParser->getUses();
6976
$this->resultNodes[] = $resultNode;
7077
}
7178

72-
private $fqcn;
79+
/** @var Uses */
80+
private $uses;
7381
private $file;
7482
private $parser;
7583
/** @var ClassParser */
@@ -80,4 +88,6 @@ protected function addResultNode($resultNode){
8088
private $useParser;
8189
/** @var ClassData[]|InterfaceData[] */
8290
private $resultNodes;
91+
/** @var NamespaceParser */
92+
private $namespaceParser;
8393
}

src/Parser/Processor/ProcessorInterface.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
namespace Parser\Processor;
44

5-
use Entity\FQCN;
5+
use Entity\Node\Uses;
66

77
interface ProcessorInterface {
8-
public function setFileInfo(FQCN $fqcn, $file);
8+
public function setFileInfo(Uses $fqcn, $file);
99
public function getResultNodes();
1010
public function clearResultNodes();
1111
}

0 commit comments

Comments
 (0)