Skip to content

Commit ab48eb3

Browse files
feat(slang_server): add slang_server support
1 parent 478f207 commit ab48eb3

7 files changed

Lines changed: 104 additions & 1 deletion

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
" Author: Nicolas Derumigny <https://github.com/nicolasderumigny>
2+
" Description: Slang-server LSP for verilog
3+
4+
call ale#Set('verilog_slang_server_options', '')
5+
call ale#Set('verilog_slang_server_executable', 'slang-server')
6+
call ale#Set('verilog_slang_server_config', {})
7+
8+
function! ale_linters#verilog#slang_server#GetProjectRoot(buffer) abort
9+
let l:project_file = ale#path#FindNearestFile(a:buffer, 'filelist.f')
10+
11+
if !empty(l:project_file)
12+
return fnamemodify(l:project_file, ':p:h')
13+
else
14+
return fnamemodify('', ':h')
15+
endif
16+
endfunction
17+
18+
function! ale_linters#verilog#slang_server#GetCommand(buffer) abort
19+
let l:command = ale#Escape(ale#Var(a:buffer, 'verilog_slang_server_executable'))
20+
let l:options = ale#Var(a:buffer, 'verilog_slang_server_options')
21+
22+
if l:options isnot# ''
23+
let l:command .= ' ' . l:options
24+
endif
25+
26+
return l:command
27+
endfunction
28+
29+
30+
call ale#linter#Define('verilog', {
31+
\ 'name': 'slang_server',
32+
\ 'lsp': 'stdio',
33+
\ 'lsp_config': {b -> ale#Var(b, 'verilog_slang_server_config')},
34+
\ 'executable': {b -> ale#Var(b, 'verilog_slang_server_executable')},
35+
\ 'command': function('ale_linters#verilog#slang_server#GetCommand') ,
36+
\ 'project_root': function('ale_linters#verilog#slang_server#GetProjectRoot'),
37+
\})

doc/ale-verilog.txt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ ALE can use eight different linters for Verilog HDL:
1414
slang:
1515
Using `slang -Weverything`
1616

17+
slang_server:
18+
Using `slang-server`
19+
1720
verible_ls
1821
Using `verible-verilog-ls`
1922

@@ -89,6 +92,39 @@ g:ale_verilog_slang_options
8992

9093
This variable can be changed to modify 'slang' command arguments.
9194

95+
===============================================================================
96+
slang_server *ale-verilog-slang-server*
97+
98+
*ale-config.verilog_slang_server_executable*
99+
*g:ale_verilog_slang_server_executable*
100+
*b:ale_verilog_slang_server_executable*
101+
verilog_slang_server_executable
102+
g:ale_verilog_slang_server_executable
103+
Type: |String|
104+
Default: `'slang-server'`
105+
106+
This variable can be modifies to change the executable path for `slang_server`
107+
108+
*ale-config.verilog_slang_server_config*
109+
*g:ale_verilog_slang_server_config*
110+
*b:ale_verilog_slang_server_config*
111+
verilog_slang_server_config
112+
g:ale_verilog_slang_server_config
113+
Type: |Dictionary|
114+
Default: `{}`
115+
116+
Dictionary with configuration settings for `slang_server`
117+
118+
*ale-config.verilog_slang_server_options*
119+
*g:ale_verilog_slang_server_options*
120+
*b:ale_verilog_slang_server_options*
121+
verilog_slang_server_options
122+
g:ale_verilog_slang_server_options
123+
Type: |String|
124+
Default: `''`
125+
126+
Additional flags for `slang_server`
127+
92128
===============================================================================
93129
verible_ls *ale-verilog-verible-ls*
94130

doc/ale.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4046,6 +4046,7 @@ documented in additional help files.
40464046
hdl-checker...........................|ale-verilog-hdl-checker|
40474047
iverilog..............................|ale-verilog-iverilog|
40484048
slang.................................|ale-verilog-slang|
4049+
slang_server..........................|ale-verilog-slang-server|
40494050
verible_ls............................|ale-verilog-verible-ls|
40504051
verible_format........................|ale-verilog-verible-format|
40514052
verilator.............................|ale-verilog-verilator|
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
Before:
2+
call ale#assert#SetUpLinterTest('verilog', 'slang_server')
3+
4+
After:
5+
call ale#assert#TearDownLinterTest()
6+
7+
Execute(The default executable path and arguments should be correct):
8+
AssertLinter 'slang-server', ale#Escape('slang-server')
9+
10+
Execute(The project root should be detected correctly in empty directory):
11+
AssertLSPProject '.'
12+
13+
Execute(The project root should be detected correctly with filelist.f):
14+
call ale#test#SetFilename('../test-files/verilog/slang_server/module.sv')
15+
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/verilog/slang_server')
16+
17+
Execute(The LSP values should be set correctly):
18+
call ale#test#SetFilename('../test-files/verilog/slang_server/module.sv')
19+
20+
AssertLSPLanguage 'verilog'
21+
AssertLSPOptions {}
22+
AssertLSPConfig {}
23+
AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/verilog/slang_server')
24+
25+
26+
Execute(The verible LSP callback should allow custom options):
27+
let g:ale_verilog_slang_server_options = '--foo --bar'
28+
AssertLinter 'slang-server', ale#Escape('slang-server') . ' --foo --bar'
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
./module.sv

test/test-files/verilog/slang_server/module.sv

Whitespace-only changes.

test/test_filetype_linter_defaults.vader

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ Execute(The defaults for the zsh filetype should be correct):
119119
Execute(The defaults for the verilog filetype should be correct):
120120
" This filetype isn't configured with default, so we can test loading all
121121
" available linters with this.
122-
AssertEqual ['hdl_checker', 'iverilog', 'slang', 'verible_ls', 'verilator', 'vlog', 'xvlog', 'yosys'], GetLinterNames('verilog')
122+
AssertEqual ['hdl_checker', 'iverilog', 'slang', 'slang_server', 'verible_ls', 'verilator', 'vlog', 'xvlog', 'yosys'], GetLinterNames('verilog')
123123

124124
let g:ale_linters_explicit = 1
125125

0 commit comments

Comments
 (0)