Skip to content

Commit 65b49c1

Browse files
authored
Add golangci-lint fixer (#4853)
Closes #4616
1 parent 0ef2c45 commit 65b49c1

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

autoload/ale/fix/registry.vim

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,11 @@ let s:default_registry = {
327327
\ 'suggested_filetypes': ['go'],
328328
\ 'description': 'Fix Go files imports with goimports.',
329329
\ },
330+
\ 'golangci_lint': {
331+
\ 'function': 'ale#fixers#golangci_lint#Fix',
332+
\ 'suggested_filetypes': ['go'],
333+
\ 'description': 'Fix Go files with golangci-lint.',
334+
\ },
330335
\ 'golines': {
331336
\ 'function': 'ale#fixers#golines#Fix',
332337
\ 'suggested_filetypes': ['go'],

autoload/ale/fixers/golangci_lint.vim

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
" Author: Ian Stapleton Cordasco <[email protected]>
2+
" Description: Run golangci-lint with the --fix flag to autofix some issues
3+
4+
call ale#Set('go_golangci_lint_options', '')
5+
call ale#Set('go_golangci_lint_executable', 'golangci-lint')
6+
call ale#Set('go_golangci_lint_package', 1)
7+
8+
function! ale#fixers#golangci_lint#GetCommand(buffer) abort
9+
let l:filename = expand('#' . a:buffer . ':t')
10+
let l:executable = ale#Var(a:buffer, 'go_golangci_lint_executable')
11+
let l:options = ale#Var(a:buffer, 'go_golangci_lint_options') . ' --fix'
12+
let l:package_mode = ale#Var(a:buffer, 'go_golangci_lint_package')
13+
let l:env = ale#go#EnvString(a:buffer)
14+
15+
16+
if l:package_mode
17+
return l:env . ale#Escape(l:executable)
18+
\ . ' run '
19+
\ . l:options
20+
endif
21+
22+
return l:env . ale#Escape(l:executable)
23+
\ . ' run '
24+
\ . l:options
25+
\ . ' ' . ale#Escape(l:filename)
26+
endfunction
27+
28+
function! ale#fixers#golangci_lint#Fix(buffer) abort
29+
return {
30+
\ 'command': ale#fixers#golangci_lint#GetCommand(a:buffer),
31+
\}
32+
endfunction
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
Before:
2+
Save g:ale_go_go111module
3+
Save g:ale_go_golangci_lint_executable
4+
Save g:ale_go_golangci_lint_options
5+
Save g:ale_go_golangci_lint_package
6+
7+
" Use an invalid global executable, so we don't match it.
8+
let g:ale_go_golangci_lint_executable = 'xxxinvalid'
9+
let g:ale_go_golangci_lint_options = ''
10+
11+
call ale#test#SetDirectory('/testplugin/test/fixers')
12+
call ale#test#SetFilename('../test-files/go/testfile.go')
13+
After:
14+
Restore
15+
16+
unlet! b:ale_go_go111module
17+
18+
call ale#test#RestoreDirectory()
19+
20+
Execute(The golangci-lint callback should return the correct default values):
21+
22+
AssertEqual
23+
\ {
24+
\ 'command': ale#Escape('xxxinvalid') . ' run --fix',
25+
\ },
26+
\ ale#fixers#golangci_lint#Fix(bufnr(''))
27+
28+
Execute(The golangci-lint callback should include custom golangci-lint options):
29+
let g:ale_go_golangci_lint_options = "--new --config /dev/null"
30+
31+
AssertEqual
32+
\ {
33+
\ 'command': ale#Escape('xxxinvalid')
34+
\ . ' run ' . g:ale_go_golangci_lint_options . ' --fix',
35+
\ },
36+
\ ale#fixers#golangci_lint#Fix(bufnr(''))
37+
38+
Execute(The golangci-lint callback should support per-file mode):
39+
let g:ale_go_golangci_lint_package = 0
40+
41+
AssertEqual
42+
\ {
43+
\ 'command': ale#Escape('xxxinvalid')
44+
\ . ' run '
45+
\ . g:ale_go_golangci_lint_options
46+
\ . ' --fix ' . ale#Escape('testfile.go'),
47+
\ },
48+
\ ale#fixers#golangci_lint#Fix(bufnr(''))

0 commit comments

Comments
 (0)