gofmt fixer for Go (#970)

Add a gofmt fixer for golang.
This commit is contained in:
aliou 2017-10-03 19:54:35 +02:00 committed by w0rp
parent 3ab414de1a
commit e376f0ae44
6 changed files with 74 additions and 0 deletions

View file

@ -92,6 +92,11 @@ let s:default_registry = {
\ 'suggested_filetypes': ['c', 'cpp'],
\ 'description': 'Fix C/C++ files with clang-format.',
\ },
\ 'gofmt': {
\ 'function': 'ale#fixers#gofmt#Fix',
\ 'suggested_filetypes': ['go'],
\ 'description': 'Fix Go files with go fmt.',
\ },
\}
" Reset the function registry to the default entries.

View file

@ -0,0 +1,18 @@
" Author: aliou <code@aliou.me>
" Description: Integration of gofmt with ALE.
call ale#Set('go_gofmt_executable', 'gofmt')
call ale#Set('go_gofmt_options', '')
function! ale#fixers#gofmt#Fix(buffer) abort
let l:executable = ale#Var(a:buffer, 'go_gofmt_executable')
let l:options = ale#Var(a:buffer, 'go_gofmt_options')
return {
\ 'command': ale#Escape(l:executable)
\ . ' -l -w'
\ . (empty(l:options) ? '' : ' ' . l:options)
\ . ' %t',
\ 'read_temporary_file': 1,
\}
endfunction

View file

@ -20,6 +20,16 @@ the benefit of running a number of linters, more than ALE would by default,
while ensuring it doesn't run any linters known to be slow or resource
intensive.
===============================================================================
gofmt *ale-go-gofmt*
g:ale_go_gofmt_options *g:ale_go_gofmt_options*
*b:ale_go_gofmt_options*
Type: |String|
Default: `''`
This variable can be set to pass additional options to the gofmt fixer.
===============================================================================
gometalinter *ale-go-gometalinter*

View file

@ -62,6 +62,7 @@ CONTENTS *ale-contents*
glsl..................................|ale-glsl-options|
glslang.............................|ale-glsl-glslang|
go....................................|ale-go-options|
gofmt...............................|ale-go-gofmt|
gometalinter........................|ale-go-gometalinter|
graphql...............................|ale-graphql-options|
gqlint..............................|ale-graphql-gqlint|

View file

@ -0,0 +1,40 @@
Before:
Save g:ale_go_gofmt_executable
Save g:ale_go_gofmt_options
" Use an invalid global executable, so we don't match it.
let g:ale_go_gofmt_executable = 'xxxinvalid'
let g:ale_go_gofmt_options = ''
call ale#test#SetDirectory('/testplugin/test/fixers')
After:
Restore
call ale#test#RestoreDirectory()
Execute(The gofmt callback should return the correct default values):
call ale#test#SetFilename('../go_files/testfile.go')
AssertEqual
\ {
\ 'read_temporary_file': 1,
\ 'command': ale#Escape('xxxinvalid')
\ . ' -l -w'
\ . ' %t',
\ },
\ ale#fixers#gofmt#Fix(bufnr(''))
Execute(The gofmt callback should include custom gofmt options):
let g:ale_go_gofmt_options = "-r '(a) -> a'"
call ale#test#SetFilename('../go_files/testfile.go')
AssertEqual
\ {
\ 'read_temporary_file': 1,
\ 'command': ale#Escape('xxxinvalid')
\ . ' -l -w'
\ . ' ' . g:ale_go_gofmt_options
\ . ' %t',
\ },
\ ale#fixers#gofmt#Fix(bufnr(''))

View file