felixfbecker / php-language-server

PHP Implementation of the VS Code Language Server Protocol 🆚↔🖥
ISC License
1.15k stars 185 forks source link

RuntimeException: Unexpected collection operator "<", class name is missing #771

Open andyparkerson opened 4 years ago

andyparkerson commented 4 years ago
[Error - 2:36:57 PM] Request textDocument/documentSymbol failed.
  Message: RuntimeException: Unexpected collection operator "<", class name is missing in C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\type-resolver\src\TypeResolver.php:217
Stack trace:
#0 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\type-resolver\src\TypeResolver.php(146): phpDocumentor\Reflection\TypeResolver->parseTypes(Object(ArrayIterator), Object(phpDocumentor\Reflection\Types\Context), 0)
#1 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlock\Tags\Return_.php(52): phpDocumentor\Reflection\TypeResolver->resolve('<type>', Object(phpDocumentor\Reflection\Types\Context))
#2 [internal function]: phpDocumentor\Reflection\DocBlock\Tags\Return_::create('<type>  The ord...', Object(phpDocumentor\Reflection\TypeResolver), Object(phpDocumentor\Reflection\DocBlock\DescriptionFactory), Object(phpDocumentor\Reflection\Types\Context))
#3 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlock\StandardTagFactory.php(201): call_user_func_array(Array, Array)
#4 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlock\StandardTagFactory.php(122): phpDocumentor\Reflection\DocBlock\StandardTagFactory->createTag('<type>  The ord...', 'return', Object(phpDocumentor\Reflection\Types\Context))
#5 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlockFactory.php(231): phpDocumentor\Reflection\DocBlock\StandardTagFactory->create('@return     <ty...', Object(phpDocumentor\Reflection\Types\Context))
#6 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlockFactory.php(96): phpDocumentor\Reflection\DocBlockFactory->parseTagBlock('@return     <ty...', Object(phpDocumentor\Reflection\Types\Context))
#7 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\DefinitionResolver.php(166): phpDocumentor\Reflection\DocBlockFactory->create('/**\r\n\t * Gets a...', Object(phpDocumentor\Reflection\Types\Context))
#8 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\DefinitionResolver.php(1127): LanguageServer\DefinitionResolver->getDocBlock(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#9 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\DefinitionResolver.php(240): LanguageServer\DefinitionResolver->getTypeFromNode(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#10 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(157): LanguageServer\DefinitionResolver->createDefinitionFromNode(Object(Microsoft\PhpParser\Node\MethodDeclaration), 'Order::getOrder...')
#11 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(124): LanguageServer\TreeAnalyzer->collectDefinitionsAndReferences(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#12 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(136): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#13 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(140): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\ClassMembersNode))
#14 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(136): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\Statement\ClassDeclaration))
#15 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(58): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\SourceFileNode))
#16 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocument.php(147): LanguageServer\TreeAnalyzer->__construct(Object(Microsoft\PhpParser\Parser), '<?php\r\n\r\n/**\r\n ...', Object(phpDocumentor\Reflection\DocBlockFactory), Object(LanguageServer\DefinitionResolver), 'file:///c:/vagr...')
#17 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocument.php(105): LanguageServer\PhpDocument->updateContent('<?php\r\n\r\n/**\r\n ...')
#18 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocumentLoader.php(141): LanguageServer\PhpDocument->__construct('file:///c:/vagr...', '<?php\r\n\r\n/**\r\n ...', Object(LanguageServer\Index\Index), Object(Microsoft\PhpParser\Parser), Object(phpDocumentor\Reflection\DocBlockFactory), Object(LanguageServer\DefinitionResolver))
#19 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocumentLoader.php(120): LanguageServer\PhpDocumentLoader->create('file:///c:/vagr...', '<?php\r\n\r\n/**\r\n ...')
#20 [internal function]: LanguageServer\PhpDocumentLoader->LanguageServer\{closure}()
#21 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\coroutine.php(70): Generator->send('<?php\r\n\r\n/**\r\n ...')
#22 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Promise.php(242): Sabre\Event\{closure}('<?php\r\n\r\n/**\r\n ...')
#23 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\Loop.php(261): Sabre\Event\Promise->Sabre\Event\{closure}()
#24 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\Loop.php(215): Sabre\Event\Loop\Loop->runNextTicks()
#25 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\Loop.php(194): Sabre\Event\Loop\Loop->tick(true)
#26 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\functions.php(122): Sabre\Event\Loop\Loop->run()
#27 C:\Users\Andy\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\bin\php-language-server.php(55): Sabre\Event\Loop\run()
#28 {main}
  Code: -32603 
Darkenend commented 4 years ago

I'm having a similar issue, but it throws a different runtime exception, with the Stack Trace having the same code:


  Message: RuntimeException: A type is missing in an array expression in C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\type-resolver\src\TypeResolver.php:257
Stack trace:
#0 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\type-resolver\src\TypeResolver.php(195): phpDocumentor\Reflection\TypeResolver->parseTypes(Object(ArrayIterator), Object(phpDocumentor\Reflection\Types\Context), 2)
#1 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\type-resolver\src\TypeResolver.php(146): phpDocumentor\Reflection\TypeResolver->parseTypes(Object(ArrayIterator), Object(phpDocumentor\Reflection\Types\Context), 0)
#2 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlock\Tags\Return_.php(52): phpDocumentor\Reflection\TypeResolver->resolve('array()', Object(phpDocumentor\Reflection\Types\Context))
#3 [internal function]: phpDocumentor\Reflection\DocBlock\Tags\Return_::create('array() matriz', Object(phpDocumentor\Reflection\TypeResolver), Object(phpDocumentor\Reflection\DocBlock\DescriptionFactory), Object(phpDocumentor\Reflection\Types\Context))
#4 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlock\StandardTagFactory.php(201): call_user_func_array(Array, Array)
#5 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlock\StandardTagFactory.php(122): phpDocumentor\Reflection\DocBlock\StandardTagFactory->createTag('array() matriz', 'return', Object(phpDocumentor\Reflection\Types\Context))
#6 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlockFactory.php(231): phpDocumentor\Reflection\DocBlock\StandardTagFactory->create('@return array()...', Object(phpDocumentor\Reflection\Types\Context))
#7 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\phpdocumentor\reflection-docblock\src\DocBlockFactory.php(96): phpDocumentor\Reflection\DocBlockFactory->parseTagBlock('@param string $...', Object(phpDocumentor\Reflection\Types\Context))
#8 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\DefinitionResolver.php(166): phpDocumentor\Reflection\DocBlockFactory->create('/**\n     * Reto...', Object(phpDocumentor\Reflection\Types\Context))
#9 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\DefinitionResolver.php(1127): LanguageServer\DefinitionResolver->getDocBlock(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#10 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\DefinitionResolver.php(240): LanguageServer\DefinitionResolver->getTypeFromNode(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#11 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(157): LanguageServer\DefinitionResolver->createDefinitionFromNode(Object(Microsoft\PhpParser\Node\MethodDeclaration), 'Jazzyweb\\Agenda...')
#12 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(124): LanguageServer\TreeAnalyzer->collectDefinitionsAndReferences(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#13 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(136): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\MethodDeclaration))
#14 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(140): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\ClassMembersNode))
#15 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(136): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\Statement\ClassDeclaration))
#16 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\TreeAnalyzer.php(58): LanguageServer\TreeAnalyzer->traverse(Object(Microsoft\PhpParser\Node\SourceFileNode))
#17 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocument.php(147): LanguageServer\TreeAnalyzer->__construct(Object(Microsoft\PhpParser\Parser), '<?php\n\nnamespac...', Object(phpDocumentor\Reflection\DocBlockFactory), Object(LanguageServer\DefinitionResolver), 'file:///d:/Deve...')
#18 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocument.php(105): LanguageServer\PhpDocument->updateContent('<?php\n\nnamespac...')
#19 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocumentLoader.php(141): LanguageServer\PhpDocument->__construct('file:///d:/Deve...', '<?php\n\nnamespac...', Object(LanguageServer\Index\Index), Object(Microsoft\PhpParser\Parser), Object(phpDocumentor\Reflection\DocBlockFactory), Object(LanguageServer\DefinitionResolver))
#20 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\src\PhpDocumentLoader.php(120): LanguageServer\PhpDocumentLoader->create('file:///d:/Deve...', '<?php\n\nnamespac...')
#21 [internal function]: LanguageServer\PhpDocumentLoader->LanguageServer\{closure}()
#22 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\coroutine.php(70): Generator->send('<?php\n\nnamespac...')
#23 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Promise.php(242): Sabre\Event\{closure}('<?php\n\nnamespac...')
#24 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\Loop.php(261): Sabre\Event\Promise->Sabre\Event\{closure}()
#25 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\Loop.php(215): Sabre\Event\Loop\Loop->runNextTicks()
#26 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\Loop.php(194): Sabre\Event\Loop\Loop->tick(true)
#27 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\sabre\event\lib\Loop\functions.php(122): Sabre\Event\Loop\Loop->run()
#28 C:\Users\alvar\.vscode\extensions\felixfbecker.php-intellisense-2.3.13\vendor\felixfbecker\language-server\bin\php-language-server.php(55): Sabre\Event\Loop\run()
#29 {main}
  Code: -32603
zeyadmbk commented 4 years ago

@andyparkerson I'm having the same issue. Any luck with the solution?

TiBeN commented 3 years ago

I had the same issue. It seems the Exception is triggered by phpdocumentor while scanning comments blocs. As a workaround "<" chars from comments in your code have to be removed. Typically in my code i had comments like this:

/**
* [..] 
* @param <type> myVar
*/

<type> is what makes throwing this exception. But this is just a workaround and this is not really satisfying from a user perspective as code support tools like php language server have to handle theses cases like displaying a warning, not break.