VSCode 如何找到这个 Go linting 问题,我该如何忽略它?

How is VSCode finding this Go linting Problem and how do I ignore it?

我正在我的 Go 项目中使用 golangci-lint 设置 linting。我有一个由 go-bindata 生成的文件,VSCode 在“问题”选项卡下列出了以下内容:

assets/assets.go: redundant type from array, slice, or map composite literal (simplifycompositelit)

我似乎无法摆脱它。这不是编译器错误,我会不时重新运行宁go-bindata,所以我不想养成修改生成代码的习惯。

现在,使用下面的配置,我无法让 VSCode 停止报告此错误。如果我 运行 golangci-lint run ./... 在工作区的根目录中,我不会得到任何输出。如果需要,我可以提供我的 linting 配置,但 VSCode 似乎是 运行ning 其他东西。我如何找出报告此错误的原因以及如何让它停止报告此工作区中文件 assets/assets.go 的任何内容?

这是与 Go 相关的 vscode 设置:

{
  "go.formatTool": "gofmt",
  "go.lintTool": "golangci-lint",
  "go.liveErrors": {
    "enabled": true,
    "delay": 500
  },
  "go.lintOnSave": "workspace",
  "editor.codeActionsOnSave": {
    "source.organizeImports": true
  },
  "go.useLanguageServer": true,
  "go.languageServerExperimentalFeatures": {
    "diagnostics": true,
    "documentLink": true
  },
}

这是有问题的行,即使有 nolint 注释也表明它没有按预期运行。如果是 golangci-lint 输出这个,nolint 会阻止显示警告。我重新加载了 window 和 closed/reopened vscode 以确保注意到更改。

在本地复制后,此消息似乎来自 gopls,因为禁用 gopls 会使消息静音。 Go 问题跟踪器上有几个相关的 complaints/issues:

两者均未提供实际解决方案。

但是,vscode-go 存储库中的 this issue 提供了一种解决方法。在您的 VSCode 配置中,添加 gopls.analyses.simplifycompositelit 键,值为 false:

    "gopls": {
        "analyses": {
            "simplifycompositelit": false
        },
    }

当然,这会为所有项目禁用它,不仅仅是生成的文件,但如果您还使用 golangci-lint,它可以配置为捕获相同类型的错误,并且可以配置为更精细的基础,这样您就不会错过非生成代码中相同的 class 错误。