From 20a01404f346f6c633f15b6c5ca45279259f2c5d Mon Sep 17 00:00:00 2001 From: Jeff Willette Date: Wed, 15 Nov 2017 02:37:22 +0900 Subject: [PATCH] Added support for goimports fixer (#1123) * Added support for goimports fixer * added test and executable check * fixed test assertions to reflect executable check --- README.md | 2 +- autoload/ale/fix/registry.vim | 5 +++++ autoload/ale/fixers/goimports.vim | 22 +++++++++++++++++++ doc/ale.txt | 2 +- .../test_goimports_fixer_callback.vader | 22 +++++++++++++++++++ 5 files changed, 51 insertions(+), 2 deletions(-) create mode 100644 autoload/ale/fixers/goimports.vim create mode 100644 test/fixers/test_goimports_fixer_callback.vader diff --git a/README.md b/README.md index 4f26896..cf812af 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ formatting. | Fortran | [gcc](https://gcc.gnu.org/) | | FusionScript | [fusion-lint](https://github.com/RyanSquared/fusionscript) | | GLSL | [glslang](https://github.com/KhronosGroup/glslang) | -| Go | [gofmt](https://golang.org/cmd/gofmt/), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [gometalinter](https://github.com/alecthomas/gometalinter) !!, [go build](https://golang.org/cmd/go/) !!, [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple) !!, [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) !! | +| Go | [gofmt](https://golang.org/cmd/gofmt/), [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports), [go vet](https://golang.org/cmd/vet/), [golint](https://godoc.org/github.com/golang/lint), [gometalinter](https://github.com/alecthomas/gometalinter) !!, [go build](https://golang.org/cmd/go/) !!, [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple) !!, [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) !! | | GraphQL | [gqlint](https://github.com/happylinks/gqlint) | | Haml | [haml-lint](https://github.com/brigade/haml-lint) | | Handlebars | [ember-template-lint](https://github.com/rwjblue/ember-template-lint) | diff --git a/autoload/ale/fix/registry.vim b/autoload/ale/fix/registry.vim index 24166da..4ecdae9 100644 --- a/autoload/ale/fix/registry.vim +++ b/autoload/ale/fix/registry.vim @@ -107,6 +107,11 @@ let s:default_registry = { \ 'suggested_filetypes': ['go'], \ 'description': 'Fix Go files with go fmt.', \ }, +\ 'goimports': { +\ 'function': 'ale#fixers#goimports#Fix', +\ 'suggested_filetypes': ['go'], +\ 'description': 'Fix Go files imports with go fmt.', +\ }, \ 'tslint': { \ 'function': 'ale#fixers#tslint#Fix', \ 'suggested_filetypes': ['typescript'], diff --git a/autoload/ale/fixers/goimports.vim b/autoload/ale/fixers/goimports.vim new file mode 100644 index 0000000..f569513 --- /dev/null +++ b/autoload/ale/fixers/goimports.vim @@ -0,0 +1,22 @@ +" Author: Jeff Willette +" Description: Integration of goimports with ALE. + +call ale#Set('go_goimports_executable', 'goimports') +call ale#Set('go_goimports_options', '') + +function! ale#fixers#goimports#Fix(buffer) abort + let l:executable = ale#Var(a:buffer, 'go_goimports_executable') + let l:options = ale#Var(a:buffer, 'go_goimports_options') + + if !executable(l:executable) + return 0 + endif + + return { + \ 'command': ale#Escape(l:executable) + \ . ' -l -w' + \ . (empty(l:options) ? '' : ' ' . l:options) + \ . ' %t', + \ 'read_temporary_file': 1, + \} +endfunction diff --git a/doc/ale.txt b/doc/ale.txt index 2126687..b653e5c 100644 --- a/doc/ale.txt +++ b/doc/ale.txt @@ -287,7 +287,7 @@ Notes: * Fortran: `gcc` * FusionScript: `fusion-lint` * GLSL: glslang -* Go: `gofmt`, `go vet`, `golint`, `gometalinter`!!, `go build`!!, `gosimple`!!, `staticcheck`!! +* Go: `gofmt`, `goimports`, `go vet`, `golint`, `gometalinter`!!, `go build`!!, `gosimple`!!, `staticcheck`!! * GraphQL: `gqlint` * Haml: `haml-lint` * Handlebars: `ember-template-lint` diff --git a/test/fixers/test_goimports_fixer_callback.vader b/test/fixers/test_goimports_fixer_callback.vader new file mode 100644 index 0000000..df57114 --- /dev/null +++ b/test/fixers/test_goimports_fixer_callback.vader @@ -0,0 +1,22 @@ +Before: + Save g:ale_go_goimports_executable + Save g:ale_go_goimports_options + + " Use an invalid global executable, so we don't match it. + let g:ale_go_goimports_executable = 'xxxinvalid' + let g:ale_go_goimports_options = '' + + call ale#test#SetDirectory('/testplugin/test/fixers') + +After: + Restore + + call ale#test#RestoreDirectory() + +Execute(The goimports callback should return 0 with bad executable): + call ale#test#SetFilename('../go_files/testfile.go') + + AssertEqual + \ 0, + \ ale#fixers#goimports#Fix(bufnr('')) +