felixfbecker / php-language-server

PHP Implementation of the VS Code Language Server Protocol šŸ†šā†”šŸ–„
ISC License
1.15k stars 185 forks source link

Indexing finished with fatal error #45

Open mniewrzal opened 8 years ago

mniewrzal commented 8 years ago

I was trying to open magento2 in VSCode. After longer time output was filled with fatal error:

PHP Fatal error:  Maximum function nesting level of '256' reached, aborting! in /home/wywrzal/git/vscode-php-intellisense/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php on line 75
PHP Stack trace:
PHP   1. {main}() /home/wywrzal/git/vscode-php-intellisense/vendor/felixfbecker/language-server/bin/php-language-server.php:0
PHP   2. Sabre\Event\Loop\run() /home/wywrzal/git/vscode-php-intellisense/vendor/felixfbecker/language-server/bin/php-language-server.php:33
PHP   3. Sabre\Event\Loop\Loop->run() /home/wywrzal/git/vscode-php-intellisense/vendor/sabre/event/lib/Loop/functions.php:122
PHP   4. Sabre\Event\Loop\Loop->tick($block = *uninitialized*) /home/wywrzal/git/vscode-php-intellisense/vendor/sabre/event/lib/Loop/Loop.php:194
PHP   5. Sabre\Event\Loop\Loop->runTimers() /home/wywrzal/git/vscode-php-intellisense/vendor/sabre/event/lib/Loop/Loop.php:216
PHP   6. LanguageServer\LanguageServer->LanguageServer\{closure}() /home/wywrzal/git/vscode-php-intellisense/vendor/sabre/event/lib/Loop/Loop.php:280
PHP   7. LanguageServer\PhpDocument->updateContent($content = *uninitialized*) /home/wywrzal/git/php-language-server/src/LanguageServer.php:153
PHP   8. LanguageServer\PhpDocument->parse() /home/wywrzal/git/php-language-server/src/PhpDocument.php:61
PHP   9. PhpParser\NodeTraverser->traverse($nodes = *uninitialized*) /home/wywrzal/git/php-language-server/src/PhpDocument.php:106
PHP  10. PhpParser\NodeTraverser->traverseArray($nodes = *uninitialized*) /home/wywrzal/git/vscode-php-intellisense/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:64
PHP  11. PhpParser\NodeTraverser->traverseNode($node = *uninitialized*) /home/wywrzal/git/vscode-php-intellisense/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php:135
...
felixfbecker commented 8 years ago

Apparently PHPParser works recursively and reaches maximum function nesting level. I think this can be set through ini_set or similar at runtime.

Would be nice to have some integration tests parsing popular PHP frameworks

mniewrzal commented 8 years ago

Problem is related to xdebug, without it magento2 indexing works ok. Problem will be solved when removing xdebug from ini file will be ready.

felixfbecker commented 8 years ago

xdebug.max_nesting_level Type: integer, Default value: 256 Controls the protection mechanism for infinite recursion protection. The value of this setting is the maximum level of nested functions that are allowed before the script will be aborted. Before Xdebug 2.3, the default value was 100.

felixfbecker commented 8 years ago

Also mentioned in the PHPParser docs: https://github.com/nikic/PHP-Parser/blob/master/doc/2_Usage_of_basic_components.markdown#bootstrapping