php-lsp-0.1.6 is not a library.
php-lsp
A PHP Language Server Protocol (LSP) implementation written in Rust.
Features
Language intelligence
- Diagnostics — syntax errors reported in real time; semantic warnings for undefined symbols and argument-count mismatches
- Hover — PHP signature for functions, methods, classes, interfaces, and traits; includes
@param/@returndocblock annotations when present - Go-to-definition — jump to where a symbol is declared, including across open files and into Composer vendor packages via PSR-4 autoload maps
- Go-to-implementation — find all classes that implement an interface or extend a class
- Find references — locate every usage of a symbol across the workspace, including
useimport statements - Rename — rename any function, method, or class across all open files, including its
useimport statements
Editing aids
- Completion — keywords, functions, classes, methods, properties, constants;
->completions scoped to the inferred receiver type ($obj = new Foo()→$obj->shows onlyFoo's methods); cross-file symbols from all indexed documents - Signature help — parameter hints while typing a call, including overload narrowing
- Inlay hints — parameter name labels at call sites; return-type labels after assigned function calls
- Code actions — "Add use import" quick-fix for undefined class names
Navigation
- Document symbols — file outline of all functions, classes, methods, properties, and constants
- Workspace symbols — fuzzy-search symbols across the entire project
- Call hierarchy — incoming callers and outgoing callees for any function or method, including cross-file
- Selection range — smart expand/shrink selection (Alt+Shift+→) from expression → statement → function/class → file
- Document highlight — highlights all occurrences of the symbol under the cursor in the current file
- Folding ranges — collapse functions, classes, methods, loops, and control-flow blocks
Syntax
- Semantic tokens — richer syntax highlighting for functions, methods, classes, interfaces, traits, parameters, and properties with
declaration/static/abstract/readonlymodifiers
Workspace
- Workspace indexing — background scan indexes all
*.phpfiles on startup (includingvendor/), with a 50 000-file cap; LRU eviction keeps memory bounded at 10 000 indexed-only files - PSR-4 resolution — reads
composer.jsonandvendor/composer/installed.jsonto resolve fully-qualified class names to files on demand - File watching — index stays up to date when files are created, changed, or deleted on disk
- Async parsing — edits are debounced (100 ms) and parsed off the tokio runtime; stale results from superseded edits are discarded
Installation
Or build from source:
# binary at target/release/php-lsp
Editor Setup
PHPStorm (2023.2+)
- Open Settings → Languages & Frameworks → Language Servers
- Click + and configure:
- Name:
php-lsp - Language:
PHP - Command:
/path/to/php-lsp
- Name:
- Set file pattern to
*.php
Neovim (via nvim-lspconfig)
vim..
VS Code
Use the custom LSP client extension or any extension that supports arbitrary LSP servers. Set the server command to the php-lsp binary.
How It Works
The server communicates over stdin/stdout using the Language Server Protocol. It uses php-parser-rs to parse PHP source into an AST, which is cached per document and reused across all requests.
License
MIT