From 73e8907874549722001e87087a5d12f4e532dc3f Mon Sep 17 00:00:00 2001 From: Stephan Unverwerth Date: Thu, 28 Sep 2017 13:48:59 +0200 Subject: [PATCH] Fix missing diagnostics for nodes --- src/TreeAnalyzer.php | 51 ++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/src/TreeAnalyzer.php b/src/TreeAnalyzer.php index 2e34aa6..c25eb5d 100644 --- a/src/TreeAnalyzer.php +++ b/src/TreeAnalyzer.php @@ -52,8 +52,34 @@ class TreeAnalyzer $this->collectDefinitionsAndReferences($this->sourceFileNode); } + private function collectDiagnostics($node) { + if (($error = PhpParser\DiagnosticsProvider::checkDiagnostics($node)) !== null) { + $range = PhpParser\PositionUtilities::getRangeFromPosition($error->start, $error->length, $this->sourceFileNode->fileContents); + + if ($error->kind == \Microsoft\PhpParser\DiagnosticKind::Error) { + $severity = DiagnosticSeverity::ERROR; + } + else { + $severity = DiagnosticSeverity::WARNING; + } + + $this->diagnostics[] = new Diagnostic( + $error->message, + new Range( + new Position($range->start->line, $range->start->character), + new Position($range->end->line, $range->start->character) + ), + null, + $severity, + 'php' + ); + } + } + private function collectDefinitionsAndReferences(Node $sourceFileNode) { + $this->collectDiagnostics($sourceFileNode); + foreach ($sourceFileNode::CHILD_NAMES as $name) { $node = $sourceFileNode->$name; @@ -63,8 +89,13 @@ class TreeAnalyzer if (\is_array($node)) { foreach ($node as $child) { - if ($child instanceof Node) { - $this->update($child); + if ($child !== null) { + if ($child instanceof Node) { + $this->update($child); + } + else { + $this->collectDiagnostics($child); + } } } continue; @@ -73,20 +104,8 @@ class TreeAnalyzer if ($node instanceof Node) { $this->update($node); } - - if (($error = PhpParser\DiagnosticsProvider::checkDiagnostics($node)) !== null) { - $range = PhpParser\PositionUtilities::getRangeFromPosition($error->start, $error->length, $this->sourceFileNode->fileContents); - - $this->diagnostics[] = new Diagnostic( - $error->message, - new Range( - new Position($range->start->line, $range->start->character), - new Position($range->end->line, $range->start->character) - ), - null, - DiagnosticSeverity::ERROR, - 'php' - ); + else { + $this->collectDiagnostics($node); } } }