I noticed the current config didn't work on the Sublime Text LSP plugin, I've updated it to the latest version of the config for the plugin
3.5 KiB
Using Psalm’s Language Server
Psalm now has built-in Language Server Compatibility support so you can run it in your favourite IDE.
It currently supports diagnostics (i.e. finding errors and warnings), go-to-definition and hover, with limited support for autocompletion (PRs are welcome!).
It works well in a variety of editors (listed alphabetically):
Emacs
I got it working with eglot
This is the config I used:
(when (file-exists-p "vendor/bin/psalm-language-server")
(progn
(require 'php-mode)
(require 'eglot)
(add-to-list 'eglot-server-programs '(php-mode . ("php" "vendor/bin/psalm-language-server")))
(add-hook 'php-mode-hook 'eglot-ensure)
(advice-add 'eglot-eldoc-function :around
(lambda (oldfun)
(let ((help (help-at-pt-kbd-string)))
(if help (message "%s" help) (funcall oldfun)))))
)
)
PhpStorm
I've got it working with gtache/intellij-lsp
plugin (Jetbrains-approved version, latest version).
Setup is done via a GUI.
When you install the plugin, you should see a "Language Server Protocol" section under the "Languages & Frameworks" tab.
In the "Server definitions" tab you should add a definition for Psalm:
- Select
Executable
- Extension:
php
- Path:
<path-to-php-binary>
e.g./usr/local/bin/php
orC:\php\php.exe
- this should be an absolute path, not just
php
- this should be an absolute path, not just
- Args:
vendor/bin/psalm-language-server
(on Windows usevendor/vimeo/psalm/psalm-language-server
, or for a 'global' install '%APPDATA%' +\Composer\vendor\vimeo\psalm\psalm-language-server
, where the '%APPDATA%' environment variable is probably something likeC:\Users\<homedir>\AppData\Roaming\
)
In the "Timeouts" tab you can adjust the initialization timeout. This is important if you have a large project. You should set the "Init" value to the number of milliseconds you allow Psalm to scan your entire project and your project's dependencies. For opening a couple of projects that use large PHP frameworks, on a high end business laptop, try 240000
milliseconds for Init.
Sublime Text
I use the excellent Sublime LSP plugin with the following config:
"psalm":
{
"command": ["php", "vendor/bin/psalm-language-server"],
"selector": "source.php | embedding.php",
"enabled": true
}
Vim & Neovim
ALE
ALE has support for Psalm (since v2.3.0).
let g:ale_linters = { 'php': ['php', 'psalm'] }
vim-lsp
I also got it working with vim-lsp
This is the config I used (for Vim):
au User lsp_setup call lsp#register_server({
\ 'name': 'psalm-language-server',
\ 'cmd': {server_info->[expand('vendor/bin/psalm-language-server')]},
\ 'allowlist': ['php'],
\ })
coc.nvim
It also works with coc.nvim.
Add settings to coc-settings.json
:
"languageserver": {
"psalmls": {
"command": "vendor/bin/psalm-language-server",
"filetypes": ["php"],
"rootPatterns": ["psalm.xml", "psalm.xml.dist"],
"requireRootPattern": true
}
}
VS Code
Get the Psalm plugin here (Requires VS Code 1.26+):