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:
konimarti
2025-01-10 05:34:29 +01:00
committed by GitHub
parent 0551602b19
commit 3ca2a9ea3c
7 changed files with 98 additions and 0 deletions

22
ale_linters/c3/c3lsp.vim Normal file
View 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')},
\})

View 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
View 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:

View File

@@ -105,6 +105,8 @@ Notes:
* `flawfinder` * `flawfinder`
* `gcc` (`cc`) * `gcc` (`cc`)
* `uncrustify` * `uncrustify`
* C3
* `c3lsp`
* Cairo * Cairo
* `scarb`!! * `scarb`!!
* `starknet` * `starknet`

View File

@@ -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|

View File

@@ -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)

View 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'}