Fix PHP symbol retrieval via Intelephense LSP
* intelephense.py: Add missing client capability declarations for
documentSymbol (with hierarchical support), references, hover, and
workspace symbol. Without these, Intelephense does not advertise
documentSymbolProvider and returns empty results for get_symbols_overview.
Add PHP tests validating hierarchical symbols and LS routing fix
- test_document_symbols_hierarchical_structure: verifies Intelephense
returns DocumentSymbol[] with class/method hierarchy (not flat
SymbolInformation[]) when hierarchicalDocumentSymbolSupport is declared
- test_full_symbol_tree_within_file: verifies request_full_symbol_tree
scoped to sample.php returns Dog/Animal/greet/fetch with Dog containing
greet as a child (not at root level)
- test_find_symbol_within_php_file: verifies find_symbol with a PHP
file path (relative_path=) routes to the PHP language server via
get_language_server() rather than iterating all servers
Peripheral changes:
- symbol.py (LanguageServerSymbolRetriever.find_symbols): When searching
within a specific file, route to the file-type-appropriate language server
via get_language_server() instead of querying all servers. This ensures
PHP files are served by Intelephense and not silently skipped.
- Add check in conftest.py to disable PHP_PHPACTOR tests when php binary
is not found
- Refactor test_php_basic.py to use dynamic PHP server list based on
availability
- Ensure tests for PHP_PHPACTOR are only parametrized if PHP is present
Consolidate TestPhpLanguageServer and TestPhpPhpactorLanguageServer
into a single TestPhpLanguageServers class. Both Language.PHP and
Language.PHP_PHPACTOR are now parametrized together, with conditional
branching where the two language servers differ in behavior.
Addresses review comment on PR #1002.