为 golang repo 运行预提交挂钩时出错 [命名文件必须是 .go 文件:./...]

这是我的.pre-commit-config.yam l 文件的内容,


repos:

- repo: local

  hooks:

    - id: static-checks-pramod

      name: Static Analysis

      description: This hook does static analysis

      entry: staticcheck -tests=false ./...

      language: golang

      types: [text]

在本地为所有本地文件运行挂钩时,我遇到了以下错误,


pramodchoudhari@Pramods-MacBook-Pro-2 my-repo % pre-commit run --all-files

Static Analysis..........................................................Failed

- hook id: static-checks-pramod

- exit code: 1


-: named files must be .go files: ./...

-: named files must be .go files: ./...

-: named files must be .go files: ./...

-: named files must be .go files: ./...

-: named files must be .go files: ./...

-: named files must be .go files: ./...

-: named files must be .go files: ./...

-: named files must be .go files: ./...

但是如果我在本地运行 staticcheck 命令,它工作正常,如下所示,


pramodchoudhari@Pramods-MacBook-Pro-2 my-repo % staticcheck -tests=false ./...         

pramodchoudhari@Pramods-MacBook-Pro-2 my-repo % 

我不确定我在预提交配置中做错了什么。


PS:我正在使用这个linter 对我的 repo 进行静态分析


慕村9548890
浏览 273回答 2
2回答

慕标5832272

在您.pre-commit-config.yaml的types设置中text,它会将所有文本(如文件)传递给staticcheck,但它只期望go-files。你可能想要types: [go]。

慕哥9229398

您的配置很接近,但有一些可以改进的地方。现在你正在安装一个 noopgolang存储库,然后同时运行./...(golang 中的所有内容)和text存储库中的所有文件(可能不是你想要的!)首先让我们解决 noop 存储库——language: golang指示pre-commit它应该如何安装挂钩本身——在这种情况下你没有告诉它安装任何东西(repo: local挂钩通常additional_dependencies用来安装东西)假设您想要预提交来管理安装(毕竟这是预提交要点的一部分——它管理您的安装,所以您不需要指导您的贡献者如何安装所有东西)——对于你会告诉 pre-commit 安装这样的东西:    # ...    language: golang    additional_dependencies: [honnef.co/go/tools/cmd/staticcheck@2022.1.2]    # ...现在让我们来处理正在传递的文件——上面的@jkittner 正中要害,但我会详细说明一下。pre-commit的参数模式:您的挂钩应该期望收到该args值,然后是暂存文件列表。然后从过滤文件类型:text- 文件是否看起来像文本文件将它们放在一起,您当前的配置就像运行一样staticcheck -tests=false ./... $(git ls-files)(假设您只有文本文件,我所知道的过滤掉二进制文件的 shell 方法并不是很好)您可能想过滤掉 go 文件,并且您可能不想对每个文件进行双重检查——试试这个:    # ...    entry: staticcheck -tests=false    types: [go]    # ...或者,如果你总是想运行所有的东西(我不推荐,它会一直变慢!)你可以关闭预提交的文件处理    # ...    entry: staticcheck -tests=false ./...    pass_filenames: false    always_run: true    # ...免责声明:我写了预提交
打开App,查看更多内容
随时随地看视频慕课网APP