在 VSCode 中启用 golangci-lint 的详细选项

问题描述

我正在使用 golangci-lint。认情况下,它禁用 golint linter。要将 golint 添加认 linter,该命令需要一个 -E golint 标志:

golangci-lint run -E golint

从运行良好的命令行。
但是现在我通过将此选项添加到设置中来将 golangci-lint 与 VSCode 集成:

"go.lintTool":"golangci-lint",

认的 linters 工作正常,但是当我添加一个标志来启用 golint 时,它会停止 linting 并且根本不返回任何输出。为了传递额外的标志,我跟着 golangci-lint documentation添加go.lintFlags:

"go.lintFlags": [
  "--enable golint"
]

请注意,我不想只运行 golint,而是要启用 golangci-lint 中的所有认 linter,并在此之上使用 golint。

解决方法

我发现提供 golangci-lint 配置更容易。

"go.lintTool": "golangci-lint","go.lintFlags": [
    "-c","~/.dotfiles/.golangci.yml","--issues-exit-code=0"
],

顺便说一句,您不需要启用所有默认的 linter - 它们已经启用(请参阅 reference)。

但是如果你想通过 settings.json 运行它,你可以定义(就像你做 linter 标志一样)。例如下一个配置

"go.lintTool": "golangci-lint","go.lintFlags": [
    "-E","dogsled","-E","gochecknoglobals"
],

适用于

package main

func s(i int) (int,int,int) {
    return -1,-2,-3,-4,-5
}

func fpl() {
}

var i = 0

func main() {
    _,_,_ = s(i)
}

将导致:

...>Finished running tool: /Users/0_o/go/bin/golangci-lint run -E dogsled -E gochecknoglobals --print-issued-lines=false --out-format=colored-line-number --issues-exit-code=0
.../main.go:7:6 `fpl` is unused (deadcode)
.../main.go:13:2 declaration has 5 blank identifiers (dogsled)
.../main.go:10:5 `i` is a global variable (gochecknoglobals)