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'], \ 'suggested_filetypes': ['c', 'cpp'],
\ 'description': 'Fix C/C++ files with clang-format.', \ '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. " 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 while ensuring it doesn't run any linters known to be slow or resource
intensive. 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* gometalinter *ale-go-gometalinter*

View file

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