chore: Switch from gometalinter to golangci-lint

gometalinter has been deprecated, with golangci-lint as its spiritual
and recommended successor. Here we switch to using it with an equivalent
configuration, albeit with newer versions of some linters.

To maintain compatibility with existing settings, we have a couple of
things disabled here, specifically:

- tests
        We have a lot of unused code in our tests that choke deadcode.
        We should attempt to clean these up soon so that we can lint our
        testcode.
- govet.check-shadowing = false
        This breaks on redefining `err` which we do all over the nomad
        codebase.
This commit is contained in:
Danielle Lancashire 2019-08-16 15:11:31 +02:00 committed by Seth Hoenig
parent 574dac202c
commit 0071a06c8b
2 changed files with 73 additions and 23 deletions

71
.golangci.yml Normal file
View File

@ -0,0 +1,71 @@
run:
# timeout for analysis, e.g. 30s, 5m, default is 1m
deadline: 10m
tests: false
# which dirs to skip: they won't be analyzed;
# can use regexp here: generated.*, regexp is applied on full path;
# default value is empty list, but next dirs are always skipped independently
# from this option's value:
# vendor$, third_party$, testdata$, examples$, Godeps$, builtin$
skip-dirs:
- ui
# which files to skip: they will be analyzed, but issues from them
# won't be reported. Default value is empty list, but there is
# no need to include all autogenerated files, we confidently recognize
# autogenerated files. If it's not please let us know.
skip-files:
- ".*\\.generated\\.go$"
- ".*bindata_assetfs\\.go$"
# output configuration options
output:
# colored-line-number|line-number|json|tab|checkstyle|code-climate, default is "colored-line-number"
format: colored-line-number
# print lines of code with issue, default is true
print-issued-lines: true
# print linter name in the end of issue text, default is true
print-linter-name: true
# all available settings of specific linters
linters-settings:
errcheck:
# report about not checking of errors in type assetions: `a := b.(MyStruct)`;
# default is false: such cases aren't reported by default.
check-type-assertions: false
# [deprecated] comma-separated list of pairs of the form pkg:regex
# the regex is used to ignore names within pkg. (default "fmt:.*").
# see https://github.com/kisielk/errcheck#the-deprecated-method for details
ignore: fmt:.*,io/ioutil:^Read.*
# path to a file containing a list of functions to exclude from checking
# see https://github.com/kisielk/errcheck#excluding-functions for details
# exclude: /path/to/file.txt
govet:
# report about shadowed variables
check-shadowing: false
gofmt:
# simplify code: gofmt with `-s` option, true by default
simplify: true
linters:
disable-all: true
enable:
- goimports
- misspell
- govet
- deadcode
- varcheck
- ineffassign
- structcheck
- unconvert
- gofmt
# Stretch Goal
#- maligned
fast: false

View File

@ -154,8 +154,7 @@ deps: ## Install build and development dependencies
.PHONY: lint-deps
lint-deps: ## Install linter dependencies
@echo "==> Updating linter dependencies..."
go get -u github.com/alecthomas/gometalinter
gometalinter --install
go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
.PHONY: git-hooks
git-dir = $(shell git rev-parse --git-dir)
@ -167,27 +166,7 @@ $(git-dir)/hooks/%: dev/hooks/%
.PHONY: check
check: ## Lint the source code
@echo "==> Linting source code..."
@gometalinter \
--deadline 10m \
--vendor \
--exclude='.*\.generated\.go' \
--exclude='.*\.pb\.go' \
--exclude='.*bindata_assetfs\.go' \
--skip="ui/" \
--sort="path" \
--aggregate \
--enable-gc \
--disable-all \
--enable goimports \
--enable misspell \
--enable vet \
--enable deadcode \
--enable varcheck \
--enable ineffassign \
--enable structcheck \
--enable unconvert \
--enable gofmt \
./...
@golangci-lint run -j 1
@echo "==> Spell checking website..."
@misspell -error -source=text website/source/