Prevent duplicate function declarations in docblocks

When a method is declared both in the phpdoc and in the class itself,
PhpStorm (2018.3) complains about duplicate function declarations, preventing
correct code hinting.

To solve this, I remove the already declared functions from the generated dockblocks.
This commit is contained in:
Jeppe Knockaert
2018-11-07 20:59:15 +01:00
parent 981ff45b43
commit 2ab961e734
2 changed files with 23 additions and 1 deletions
+1 -1
View File
@@ -14,7 +14,7 @@
"illuminate/support": "^5.5,<5.8",
"illuminate/console": "^5.5,<5.8",
"illuminate/filesystem": "^5.5,<5.8",
"barryvdh/reflection-docblock": "^2.0.4",
"barryvdh/reflection-docblock": "^2.0.5",
"composer/composer": "^1.6"
},
"require-dev": {
+22
View File
@@ -13,6 +13,7 @@ namespace Barryvdh\LaravelIdeHelper;
use Barryvdh\Reflection\DocBlock;
use Barryvdh\Reflection\DocBlock\Context;
use Barryvdh\Reflection\DocBlock\Serializer as DocBlockSerializer;
use Barryvdh\Reflection\DocBlock\Tag\MethodTag;
use ReflectionClass;
class Alias
@@ -395,12 +396,33 @@ class Alias
$serializer = new DocBlockSerializer(1, $prefix);
if ($this->phpdoc) {
$this->removeDuplicateMethodsFromPhpDoc();
return $serializer->getDocComment($this->phpdoc);
}
return '';
}
/**
* Removes method tags from the doc comment that already appear as functions inside the class.
* This prevents duplicate function errors in the IDE.
*
* @return void
*/
protected function removeDuplicateMethodsFromPhpDoc()
{
$methods = count($this->methods) > 0 ? $this->methods : $this->getMethods();
$methodNames = array_map(function (Method $method) {
return $method->getName();
}, $methods);
foreach ($this->phpdoc->getTags() as $tag) {
if ($tag instanceof MethodTag && in_array($tag->getMethodName(), $methodNames)) {
$this->phpdoc->deleteTag($tag);
}
}
}
/**
* Output an error.
*