为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕村9548890 2022-12-19 21:18:38
这是我的.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-filesStatic 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 进行静态分析
查看完整描述

2 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

在您.pre-commit-config.yamltypes设置中text,它会将所有文本(如文件)传递给staticcheck,但它只期望go-files

你可能想要types: [go]


查看完整回答
反对 回复 2022-12-19
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

您的配置很接近,但有一些可以改进的地方。现在你正在安装一个 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

    # ...

免责声明:我写了预提交


查看完整回答
反对 回复 2022-12-19
  • 2 回答
  • 0 关注
  • 272 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信