summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <w0rp@users.noreply.github.com>2018-10-25 15:22:34 +0100
committerGitHub <noreply@github.com>2018-10-25 15:22:34 +0100
commit9bdd5771ef85ca24aeadab80bb1d0976920e9305 (patch)
tree7780e78a361b0ae2d88ee2a7573317484137208e
parentb3829d043dec7c35870197eec4b50ab7a14ea1bf (diff)
parent7fa0d3dcc47a03c54c4450377ef8053b32e0139a (diff)
downloadale-9bdd5771ef85ca24aeadab80bb1d0976920e9305.zip
Merge pull request #2018 from muglug/patch-1
Update Psalm to use LSP
-rw-r--r--ale_linters/php/psalm.vim31
-rwxr-xr-xtest/command_callback/psalm-project/vendor/bin/psalm-language-server0
-rw-r--r--test/command_callback/test_psalm_command_callbacks.vader25
-rw-r--r--test/handler/test_php_psalm_handler.vader24
4 files changed, 33 insertions, 47 deletions
diff --git a/ale_linters/php/psalm.vim b/ale_linters/php/psalm.vim
index cd20ab81..dce59178 100644
--- a/ale_linters/php/psalm.vim
+++ b/ale_linters/php/psalm.vim
@@ -1,28 +1,21 @@
-" Author: richard marmorstein <https://github.com/twitchard>
+" Author: Matt Brown <https://github.com/muglug>
" Description: plugin for Psalm, static analyzer for PHP
-call ale#Set('php_psalm_executable', 'psalm')
+call ale#Set('psalm_langserver_executable', 'psalm-language-server')
+call ale#Set('psalm_langserver_use_global', get(g:, 'ale_use_global_executables', 0))
-function! ale_linters#php#psalm#Handle(buffer, lines) abort
- " Matches patterns like the following:
- let l:pattern = '^.*:\(\d\+\):\(\d\+\):\(\w\+\) - \(.*\)$'
- let l:output = []
+function! ale_linters#php#psalm#GetProjectRoot(buffer) abort
+ let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git')
- for l:match in ale#util#GetMatches(a:lines, l:pattern)
- call add(l:output, {
- \ 'lnum': l:match[1] + 0,
- \ 'text': l:match[4],
- \ 'type': l:match[3][:0] is# 'e' ? 'E' : 'W',
- \})
- endfor
-
- return l:output
+ return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : ''
endfunction
call ale#linter#Define('php', {
\ 'name': 'psalm',
-\ 'command': '%e --diff --output-format=emacs %s',
-\ 'executable_callback': ale#VarFunc('php_psalm_executable'),
-\ 'callback': 'ale_linters#php#psalm#Handle',
-\ 'lint_file': 1,
+\ 'lsp': 'stdio',
+\ 'executable_callback': ale#node#FindExecutableFunc('psalm_langserver', [
+\ 'vendor/bin/psalm-language-server',
+\ ]),
+\ 'command': '%e',
+\ 'project_root_callback': 'ale_linters#php#psalm#GetProjectRoot',
\})
diff --git a/test/command_callback/psalm-project/vendor/bin/psalm-language-server b/test/command_callback/psalm-project/vendor/bin/psalm-language-server
new file mode 100755
index 00000000..e69de29b
--- /dev/null
+++ b/test/command_callback/psalm-project/vendor/bin/psalm-language-server
diff --git a/test/command_callback/test_psalm_command_callbacks.vader b/test/command_callback/test_psalm_command_callbacks.vader
index 4c31b7b4..d731054f 100644
--- a/test/command_callback/test_psalm_command_callbacks.vader
+++ b/test/command_callback/test_psalm_command_callbacks.vader
@@ -2,11 +2,28 @@ Before:
call ale#assert#SetUpLinterTest('php', 'psalm')
After:
+ if isdirectory(g:dir . '/.git')
+ call delete(g:dir . '/.git', 'd')
+ endif
+
call ale#assert#TearDownLinterTest()
-Execute(Custom executables should be used for the executable and command):
- let g:ale_php_psalm_executable = 'psalm_test'
+Execute(The default executable path should be correct):
+ AssertLinter 'psalm-language-server',
+ \ ale#Escape('psalm-language-server')
+
+Execute(Vendor executables should be detected):
+ call ale#test#SetFilename('psalm-project/test.php')
+
+ AssertLinter
+ \ ale#path#Simplify(g:dir . '/psalm-project/vendor/bin/psalm-language-server'),
+ \ ale#Escape(ale#path#Simplify(
+ \ g:dir
+ \ . '/psalm-project/vendor/bin/psalm-language-server'
+ \ ))
- AssertLinter 'psalm_test',
- \ ale#Escape('psalm_test') . ' --diff --output-format=emacs %s'
+Execute(The project path should be correct for .git directories):
+ call ale#test#SetFilename('psalm-project/test.php')
+ call mkdir(g:dir . '/.git')
+ AssertLSPProject g:dir \ No newline at end of file
diff --git a/test/handler/test_php_psalm_handler.vader b/test/handler/test_php_psalm_handler.vader
deleted file mode 100644
index fd62a467..00000000
--- a/test/handler/test_php_psalm_handler.vader
+++ /dev/null
@@ -1,24 +0,0 @@
-Before:
- runtime ale_linters/php/psalm.vim
-
-After:
- call ale#linter#Reset()
-
-Execute(The php static analyzer handler should parse errors from psalm):
- AssertEqual
- \ [
- \ {
- \ 'lnum': 1,
- \ 'type': 'W',
- \ 'text': 'somewarning',
- \ },
- \ {
- \ 'lnum': 11,
- \ 'type': 'E',
- \ 'text': 'someerror',
- \ },
- \ ],
- \ ale_linters#php#psalm#Handle(347, [
- \ "/file:1:3:warning - somewarning",
- \ "/file:11:33:error - someerror",
- \ ])