Skip to content

Commit 683f617

Browse files
committed
Vim: add LSP client (disabled by default)
Allow Vim+ALE users to opt into using quick-lint-js' LSP server instead of the inefficient CLI solution. The LSP server is more buggy, so it's disabled by default.
1 parent c9f1f60 commit 683f617

File tree

2 files changed

+36
-9
lines changed

2 files changed

+36
-9
lines changed

plugin/vim/quick-lint-js.vim/ale_linters/javascript/quick_lint_js.vim

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,45 @@
77
call ale#Set('javascript_quick_lint_js_executable', 'quick-lint-js')
88
call ale#Set('javascript_quick_lint_js_use_global', get(g:, 'ale_use_global_executables', 0))
99

10+
" TODO(strager): Make quick-lint-js-lsp the default when the bugs have been
11+
" ironed out:
12+
" https://github.com/quick-lint/quick-lint-js/issues/111
13+
" https://github.com/quick-lint/quick-lint-js/issues/171
14+
let s:enable_lsp_linter = v:false
15+
1016
if ale#Has('ale-2.4.0')
1117
let s:linter_command_callback_key = 'command'
1218
let s:linter_executable_callback_key = 'executable'
19+
let s:linter_project_root_callback_key = 'project_root'
1320
else
1421
" The _callback variants are not supported since ALE v3.0.0. For details, see
1522
" "Implement a uniform API for asynchronous processing for most ALE features":
1623
" https://github.com/dense-analysis/ale/issues/2132
1724
let s:linter_command_callback_key = 'command_callback'
1825
let s:linter_executable_callback_key = 'executable_callback'
26+
let s:linter_project_root_callback_key = 'project_root_callback'
1927
endif
2028

21-
call ale#linter#Define('javascript', {
22-
\ 'aliases': ['quick_lint_js', 'quicklintjs'],
23-
\ 'callback': function('quick_lint_js_ale#parse_command_output'),
24-
\ 'name': 'quick-lint-js',
25-
\ 'output_stream': 'stdout',
26-
\ 'read_buffer': 0,
27-
\ s:linter_command_callback_key: function('quick_lint_js_ale#get_command'),
28-
\ s:linter_executable_callback_key: function('quick_lint_js_ale#get_executable'),
29-
\ })
29+
if s:enable_lsp_linter
30+
call ale#linter#Define('javascript', {
31+
\ 'aliases': ['quick-lint-js-lsp', 'quick_lint_js', 'quicklintjs'],
32+
\ 'lsp': 'stdio',
33+
\ 'name': 'quick-lint-js',
34+
\ s:linter_command_callback_key: function('quick_lint_js_ale#get_lsp_command'),
35+
\ s:linter_executable_callback_key: function('quick_lint_js_ale#get_executable'),
36+
\ s:linter_project_root_callback_key: function('quick_lint_js_ale#get_lsp_project_root'),
37+
\ })
38+
else
39+
call ale#linter#Define('javascript', {
40+
\ 'aliases': ['quick-lint-js-cli', 'quick_lint_js', 'quicklintjs'],
41+
\ 'callback': function('quick_lint_js_ale#parse_command_output'),
42+
\ 'name': 'quick-lint-js',
43+
\ 'output_stream': 'stdout',
44+
\ 'read_buffer': 0,
45+
\ s:linter_command_callback_key: function('quick_lint_js_ale#get_command'),
46+
\ s:linter_executable_callback_key: function('quick_lint_js_ale#get_executable'),
47+
\ })
48+
endif
3049

3150
" quick-lint-js finds bugs in JavaScript programs.
3251
" Copyright (C) 2020 Matthew Glazar

plugin/vim/quick-lint-js.vim/autoload/quick_lint_js_ale.vim

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,14 @@ function! quick_lint_js_ale#parse_command_output(buffer, lines) abort
2828
return l:data.qflist
2929
endfunction
3030

31+
function! quick_lint_js_ale#get_lsp_command(_buffer_number) abort
32+
return '%e --lsp-server'
33+
endfunction
34+
35+
function! quick_lint_js_ale#get_lsp_project_root(_buffer_number) abort
36+
return '/'
37+
endfunction
38+
3139
" quick-lint-js finds bugs in JavaScript programs.
3240
" Copyright (C) 2020 Matthew Glazar
3341
"

0 commit comments

Comments
 (0)