使用pre-commit,我试图调用PSScriptAnalyzer
工具作为PowerShell脚本的静态检查器。由于PowerShell没有pre-commit language,而且我不想为这个简单的任务向存储库添加额外的脚本,所以我必须求助于system
,并将pwsh
作为预安装的系统命令调用。
我也不想以PSScriptAnalyzer -Recurse -Path .
的身份运行检查器,因为我不想检查git忽略的文件或未修改的文件,也不想检查变更的一部分。
因此,我在.pre-commit-config.yaml
文件中提出了以下片段:
- repo: local
hooks:
- id: PSScriptAnalyzer
name: Check Powershell scripts with PSScriptAnalyzer
language: system
entry: pwsh -NoProfile -NonInteractive -Command Invoke-ScriptAnalyzer -EnableExit -Path
files: ^.*\.ps1$
pass_filenames: true
问题是这个命令只能处理传递给它的一个参数,但是pre-commit在命令的末尾传递任何匹配的文件作为参数,导致错误。
pre-commit似乎没有一个选项来改变这种行为,并单独传递文件。主机是Linux,内部安装了最新版本的pre-commit和mysql。
我如何才能做到这一点?
1条答案
按热度按时间u1ehiz5o1#
pre-commit故意不支持一次一个文件,因为它非常低效(每个文件启动和停止一个进程(或多个进程)非常慢)。
理想情况下,另一个工具(PSScriptAnalyzer)将被调整为支持传递多个参数(因为这将具有预提交之外的好处,例如与
xargs
一起使用)也就是说,您可以通过一点
xargs
--将参数序列转换为单独的调用--在您尝试使用的任何工具中解决这个缺陷下面是问题跟踪器中最旧的副本,并概述了解决方案(您可能可以将
bash
解决方案调整为powershell
,或者如果您不关心空间,则使用xargs -n1
):免责声明:我写了pre-commit