簡體   English   中英

運行 golang repo 的預提交掛鈎時出錯 [命名文件必須是 .go 文件:./...]

[英]getting error when running pre-commit hook for golang repo [named files must be .go files: ./...]

這是我的.pre-commit-config.yaml文件的內容,

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 進行靜態分析

在您的.pre-commit-config.yaml ,您的types設置為text ,這會將所有類似文件的文本傳遞給staticcheck ,但它只需要go-files

您可能需要types: [go]代替。

您的配置很接近,但有一些可以改進的地方。 現在您正在安裝 noop golang存儲庫,然后針對./... (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]
    # ...

或者,如果你總是想運行所有東西(我不建議這樣做,它會一直讓它變慢!)你可以改為關閉 pre-commit 對文件的處理

    # ...
    entry: staticcheck -tests=false ./...
    pass_filenames: false
    always_run: true
    # ...

免責聲明:我寫了預提交

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM