From 3ca2a9ea3c6cf01aaf4e6413cf4335fd8fe03778 Mon Sep 17 00:00:00 2001 From: konimarti <30975830+konimarti@users.noreply.github.com> Date: Fri, 10 Jan 2025 05:34:29 +0100 Subject: [PATCH] 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 --- ale_linters/c3/c3lsp.vim | 22 ++++++++++++++ autoload/ale/handlers/c3lsp.vim | 19 ++++++++++++ doc/ale-c3.txt | 35 +++++++++++++++++++++++ doc/ale-supported-languages-and-tools.txt | 2 ++ doc/ale.txt | 2 ++ supported-tools.md | 2 ++ test/linter/test_c3_c3lsp.vader | 16 +++++++++++ 7 files changed, 98 insertions(+) create mode 100644 ale_linters/c3/c3lsp.vim create mode 100644 autoload/ale/handlers/c3lsp.vim create mode 100644 doc/ale-c3.txt create mode 100644 test/linter/test_c3_c3lsp.vader diff --git a/ale_linters/c3/c3lsp.vim b/ale_linters/c3/c3lsp.vim new file mode 100644 index 0000000000..43cd89d816 --- /dev/null +++ b/ale_linters/c3/c3lsp.vim @@ -0,0 +1,22 @@ +" Author: Koni Marti +" 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')}, +\}) diff --git a/autoload/ale/handlers/c3lsp.vim b/autoload/ale/handlers/c3lsp.vim new file mode 100644 index 0000000000..2763f3db82 --- /dev/null +++ b/autoload/ale/handlers/c3lsp.vim @@ -0,0 +1,19 @@ +scriptencoding utf-8 +" Author: Koni Marti +" 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 diff --git a/doc/ale-c3.txt b/doc/ale-c3.txt new file mode 100644 index 0000000000..acc7e013c6 --- /dev/null +++ b/doc/ale-c3.txt @@ -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='. + + +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: diff --git a/doc/ale-supported-languages-and-tools.txt b/doc/ale-supported-languages-and-tools.txt index 2cd6260ed0..147551ba1f 100644 --- a/doc/ale-supported-languages-and-tools.txt +++ b/doc/ale-supported-languages-and-tools.txt @@ -105,6 +105,8 @@ Notes: * `flawfinder` * `gcc` (`cc`) * `uncrustify` +* C3 + * `c3lsp` * Cairo * `scarb`!! * `starknet` diff --git a/doc/ale.txt b/doc/ale.txt index 67e89a2414..af02d5beee 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -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| diff --git a/supported-tools.md b/supported-tools.md index 4bf6c72138..7bcbab8870 100644 --- a/supported-tools.md +++ b/supported-tools.md @@ -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) diff --git a/test/linter/test_c3_c3lsp.vader b/test/linter/test_c3_c3lsp.vader new file mode 100644 index 0000000000..d942b1232b --- /dev/null +++ b/test/linter/test_c3_c3lsp.vader @@ -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'}