mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-06 20:54:26 +08:00
Add support for c3-lsp linter (#4836)
* Add support for c3-lsp linter Add support for c3-lang with the c3-lsp language server. Link: http://github.com/pherrymason/c3-lsp Link: http://c3-lang.org * fix linter error * fix: consistent use of the executable name Consistently use the executable name 'c3lsp' instead of the project name 'c3-lsp'. * c3lsp: add command line arguments to executable
This commit is contained in:
22
ale_linters/c3/c3lsp.vim
Normal file
22
ale_linters/c3/c3lsp.vim
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
" Author: Koni Marti <koni.marti@gmail.com>
|
||||||
|
" Description: A Language Server implementation for C3
|
||||||
|
|
||||||
|
call ale#Set('c3_c3lsp_executable', 'c3lsp')
|
||||||
|
call ale#Set('c3_c3lsp_options', '')
|
||||||
|
call ale#Set('c3_c3lsp_init_options', {})
|
||||||
|
|
||||||
|
function! ale_linters#c3#c3lsp#GetCommand(buffer) abort
|
||||||
|
let l:executable = ale#Var(a:buffer, 'c3_c3lsp_executable')
|
||||||
|
|
||||||
|
return ale#Escape(l:executable) . ale#Pad(ale#Var(a:buffer, 'c3_c3lsp_options'))
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
|
call ale#linter#Define('c3', {
|
||||||
|
\ 'name': 'c3lsp',
|
||||||
|
\ 'lsp': 'stdio',
|
||||||
|
\ 'executable': {b -> ale#Var(b, 'c3_c3lsp_executable')},
|
||||||
|
\ 'command': function('ale_linters#c3#c3lsp#GetCommand'),
|
||||||
|
\ 'project_root': function('ale#handlers#c3lsp#GetProjectRoot'),
|
||||||
|
\ 'lsp_config': {b -> ale#handlers#c3lsp#GetInitOpts(b, 'c3_c3lsp_init_options')},
|
||||||
|
\})
|
||||||
19
autoload/ale/handlers/c3lsp.vim
Normal file
19
autoload/ale/handlers/c3lsp.vim
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
scriptencoding utf-8
|
||||||
|
" Author: Koni Marti <koni.marti@gmail.com>
|
||||||
|
" Description: Utilities for c3lsp
|
||||||
|
|
||||||
|
function! ale#handlers#c3lsp#GetProjectRoot(buffer) abort
|
||||||
|
let l:config = ale#path#FindNearestFile(a:buffer, 'project.json')
|
||||||
|
|
||||||
|
if !empty(l:config)
|
||||||
|
return fnamemodify(l:config, ':h')
|
||||||
|
endif
|
||||||
|
|
||||||
|
return expand('#' . a:buffer . ':p:h')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! ale#handlers#c3lsp#GetInitOpts(buffer, init_options_var) abort
|
||||||
|
let l:init_options = {}
|
||||||
|
|
||||||
|
return extend(l:init_options, ale#Var(a:buffer, a:init_options_var))
|
||||||
|
endfunction
|
||||||
35
doc/ale-c3.txt
Normal file
35
doc/ale-c3.txt
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
===============================================================================
|
||||||
|
ALE C3 Integration *ale-c3-options*
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
c3lsp *ale-c3-c3lsp*
|
||||||
|
|
||||||
|
g:ale_c3_c3lsp_executable *g:ale_c3_c3lsp_executable*
|
||||||
|
*b:ale_c3_c3lsp_executable*
|
||||||
|
Type: |String|
|
||||||
|
Default: `c3lsp`
|
||||||
|
|
||||||
|
This variable can be changed to set the path to c3lsp executable.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_c3_c3lsp_options *g:ale_c3_c3lsp_options*
|
||||||
|
*b:ale_c3_c3lsp_options*
|
||||||
|
|
||||||
|
Type: |String|
|
||||||
|
Default: `''`
|
||||||
|
|
||||||
|
Add command line options to the c3lsp executable. This is useful to specify
|
||||||
|
the path to the C3 standard library with '-stdlib-path=<path>'.
|
||||||
|
|
||||||
|
|
||||||
|
g:ale_c3_c3lsp_init_options *g:ale_c3_c3lsp_init_options*
|
||||||
|
*b:ale_c3_c3lsp_init_options*
|
||||||
|
Type: |Dictionary|
|
||||||
|
Default: `{}`
|
||||||
|
|
||||||
|
Dictionary containing configuration settings that will be passed to the
|
||||||
|
language server.
|
||||||
|
|
||||||
|
|
||||||
|
===============================================================================
|
||||||
|
vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl:
|
||||||
@@ -105,6 +105,8 @@ Notes:
|
|||||||
* `flawfinder`
|
* `flawfinder`
|
||||||
* `gcc` (`cc`)
|
* `gcc` (`cc`)
|
||||||
* `uncrustify`
|
* `uncrustify`
|
||||||
|
* C3
|
||||||
|
* `c3lsp`
|
||||||
* Cairo
|
* Cairo
|
||||||
* `scarb`!!
|
* `scarb`!!
|
||||||
* `starknet`
|
* `starknet`
|
||||||
|
|||||||
@@ -2989,6 +2989,8 @@ documented in additional help files.
|
|||||||
clang-format..........................|ale-cuda-clangformat|
|
clang-format..........................|ale-cuda-clangformat|
|
||||||
clangd................................|ale-cuda-clangd|
|
clangd................................|ale-cuda-clangd|
|
||||||
nvcc..................................|ale-cuda-nvcc|
|
nvcc..................................|ale-cuda-nvcc|
|
||||||
|
c3......................................|ale-c3-options|
|
||||||
|
c3lsp.................................|ale-c3-c3lsp|
|
||||||
d.......................................|ale-d-options|
|
d.......................................|ale-d-options|
|
||||||
dfmt..................................|ale-d-dfmt|
|
dfmt..................................|ale-d-dfmt|
|
||||||
dls...................................|ale-d-dls|
|
dls...................................|ale-d-dls|
|
||||||
|
|||||||
@@ -114,6 +114,8 @@ formatting.
|
|||||||
* [flawfinder](https://www.dwheeler.com/flawfinder/)
|
* [flawfinder](https://www.dwheeler.com/flawfinder/)
|
||||||
* [gcc](https://gcc.gnu.org/)
|
* [gcc](https://gcc.gnu.org/)
|
||||||
* [uncrustify](https://github.com/uncrustify/uncrustify)
|
* [uncrustify](https://github.com/uncrustify/uncrustify)
|
||||||
|
* C3
|
||||||
|
* [c3lsp](https://github.com/pherrymason/c3-lsp)
|
||||||
* Cairo
|
* Cairo
|
||||||
* [scarb](https://docs.swmansion.com/scarb/) :floppy_disk:
|
* [scarb](https://docs.swmansion.com/scarb/) :floppy_disk:
|
||||||
* [starknet](https://starknet.io/docs)
|
* [starknet](https://starknet.io/docs)
|
||||||
|
|||||||
16
test/linter/test_c3_c3lsp.vader
Normal file
16
test/linter/test_c3_c3lsp.vader
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
Before:
|
||||||
|
call ale#assert#SetUpLinterTest('c3', 'c3lsp')
|
||||||
|
|
||||||
|
After:
|
||||||
|
call ale#assert#TearDownLinterTest()
|
||||||
|
|
||||||
|
Execute(The default c3lsp settings should be correct):
|
||||||
|
AssertLinter 'c3lsp', ale#Escape('c3lsp')
|
||||||
|
AssertLSPConfig {}
|
||||||
|
|
||||||
|
Execute(c3lsp should be configurable):
|
||||||
|
let b:ale_c3_c3lsp_executable = 'billy'
|
||||||
|
let b:ale_c3_c3lsp_init_options = {'x': 'y'}
|
||||||
|
|
||||||
|
AssertLinter 'billy', ale#Escape('billy')
|
||||||
|
AssertLSPConfig {'x': 'y'}
|
||||||
Reference in New Issue
Block a user