在运行 pre-commit 时排除某些文件

51

我想在 pre-commit 中配置黑色,并将 pre-commit 排除在检查任何迁移文件夹之外。

我的 pyproject.toml 文件如下:

[tool.black]
line-length = 79
target-version = ['py37']
include = '\.pyi?$'
exclude = '''

(
  /(
      \.eggs
    | \.git
    | \.hg
    | \.mypy_cache
    | \.tox
    | \.venv
    | _build
    | buck-out
    | build
    | dist
  )/
  | ^migrations/
'''

我也配置了 precommit。 但运行 pre-commit run --all-files 后, Black 也会格式化迁移文件夹。 如何配置 Black?

2个回答

110

这个问题black问题跟踪器上阐述了你的特定问题

pre-commit会找到所有的Python文件,然后应用pre-commit的排除规则,接着将文件列表传递给底层工具(在这种情况下是black

目前black(撰写时)将格式化命令行中列出的所有文件--与blackexclude模式无关

建议使用pre-commit的排除规则(通过.pre-commit-config.yaml),以便这些文件根本不被传递给black

-   id: black
    exclude: ^migrations/

注意:与black不同,pre-commit只会检查提交到Git仓库中的文件,因此这里不需要排除列表(.git/.mypy_cache等)。


免责声明:我是pre-commit的作者。


9
怎样排除多个目录? - Jam M. Hernandez Quiceno
39
@JamM.HernandezQuiceno exclude 是一个正则表达式,所以你需要使用 | -- 例如:exclude: ^(migrations/|other/folder/) -- 更多信息请参考文档 - anthony sottile
谢谢!这对于 pydocstyle 也同样有效。 - felice
1
@AnthonySottile,请您将此示例添加到文档中。我尝试使用正则表达式 (?x)^(...) 来匹配文件和文件夹,但无法使其工作。我在这里找到了您的答案,它非常有效。 - Brent
2
它在文档中:https://pre-commit.com/#regular-expressions - anthony sottile
显示剩余8条评论

11

目前,您可以使用 --force-exclude 选项的 black 命令。如文档中所示 (documentation):

--force-exclude TEXT 与 --exclude 类似,但匹配此正则表达式的文件和目录将即使明确作为参数传递也被排除在外。

因此,在您的 pyproject.toml 文件中,将 exclude 修改为 force-exclude


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接