Skip to content

Commit

Permalink
Add support for c3-lsp linter (#4836)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
konimarti authored Jan 10, 2025
1 parent 0551602 commit 3ca2a9e
Show file tree
Hide file tree
Showing 7 changed files with 98 additions and 0 deletions.
22 changes: 22 additions & 0 deletions ale_linters/c3/c3lsp.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
" Author: Koni Marti <[email protected]>
" 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 changes: 19 additions & 0 deletions autoload/ale/handlers/c3lsp.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
scriptencoding utf-8
" Author: Koni Marti <[email protected]>
" 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 changes: 35 additions & 0 deletions doc/ale-c3.txt
Original file line number Diff line number Diff line change
@@ -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:
2 changes: 2 additions & 0 deletions doc/ale-supported-languages-and-tools.txt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,8 @@ Notes:
* `flawfinder`
* `gcc` (`cc`)
* `uncrustify`
* C3
* `c3lsp`
* Cairo
* `scarb`!!
* `starknet`
Expand Down
2 changes: 2 additions & 0 deletions doc/ale.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2989,6 +2989,8 @@ documented in additional help files.
clang-format..........................|ale-cuda-clangformat|
clangd................................|ale-cuda-clangd|
nvcc..................................|ale-cuda-nvcc|
c3......................................|ale-c3-options|
c3lsp.................................|ale-c3-c3lsp|
d.......................................|ale-d-options|
dfmt..................................|ale-d-dfmt|
dls...................................|ale-d-dls|
Expand Down
2 changes: 2 additions & 0 deletions supported-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,8 @@ formatting.
* [flawfinder](https://www.dwheeler.com/flawfinder/)
* [gcc](https://gcc.gnu.org/)
* [uncrustify](https://github.com/uncrustify/uncrustify)
* C3
* [c3lsp](https://github.com/pherrymason/c3-lsp)
* Cairo
* [scarb](https://docs.swmansion.com/scarb/) :floppy_disk:
* [starknet](https://starknet.io/docs)
Expand Down
16 changes: 16 additions & 0 deletions test/linter/test_c3_c3lsp.vader
Original file line number Diff line number Diff line change
@@ -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'}

0 comments on commit 3ca2a9e

Please sign in to comment.