目录
Flake8
Flake8 是一个用于检查 Python 代码风格和质量的工具。
对应.flake8文件
可以检查代码中的语法错误、风格问题和潜在的 bug。
(1)规范代码风格;
(2)排除特定文件和目录,避免检查第三方库、自动生成的代码或其他不需要检查的文件很有用。
(3)选择和忽略错误和警告
(4)甚至还能启用插件
|-------------------|--------------------------------------------------------------------------------------------|
| ignore
| 忽略指定的错误或警告。在这里,C901 表示函数过于复杂,W503 表示二元操作符前有换行符,F405 表示可能未定义变量或从星号导入定义,E203 表示切片冒号前后应该没有空格。 |
| exclude
| 排除指定的文件或目录不进行检查。在这里,配置了一些常见的排除项,如 migrations 目录、.pyc 文件、.git 目录等等。 |
| max-line-length
| 数值,限制每行代码的最大长度的字符数 |
| max-complexity
| 数值,限制函数的最大复杂度为多少。复杂度是通过计算函数中的各种语句、条件和循环来确定的。 |
| format
| 指定输出格式 |
| show_source
| 布尔值,显示错误所在的源代码。 |
| statistics
| 布尔值,显示统计信息,包括代码行数、错误数量等等 |
| count
| 布尔值,只显示错误和警告的数量,而不显示具体的错误信息 |
以下给一个规范实例:
bash
[flake8]
# 设置最大行长度
max-line-length = 120
# 排除特定文件或目录
exclude =
.git,
__pycache__,
migrations,
venv,
*/node_modules/*,
*migrations*,
local_settings.py,
# 选择要启用的错误和警告
select =
E, # 所有错误(E)
W, # 所有警告(W)
F, # pyflakes 检测到的错误(F)
C # McCabe 复杂度警告(C)
# 忽略特定错误和警告
ignore =
W503, # 操作符前换行
E203, # 空格与括号内的冒号
F405 # 表示可能未定义变量或从星号导入定义
# 每行代码的最大长度的字符数
max-line-length = 120
# 限制函数的最大复杂度为多少
max-complexity = 12
# 显示统计信息,包括代码行数、错误数量等等
statistics = True
pyproject
pyproject.toml 是一个 Python 项目配置文件,用于存储项目的构建和依赖管理信息。
会作用在:
(1)代码格式化:通过为 Black 和 iSort 设置特定的配置选项,可确保按照一定编码风格和项目需求对代码进行格式化;
(2)自动化:在持续集成(CI)和持续部署(CD)流程中,自动化代码格式化和检查可以帮助您确保代码库中的代码始终保持一致的风格。
比如以下例子:
- 使用 Poetry 作为依赖管理工具,为项目指定了名称、版本、描述、作者和许可证信息。
- 定义了项目的运行时依赖(如
python
和requests
)及开发时依赖(如pytest
、flake8
、black
和isort
)。 - 指定了构建系统的要求和后端(这里使用了 Poetry)。
- 为 Black 和 iSort 配置了代码格式化规则。
bash
[tool.poetry]
name = "my_project"
version = "0.1.0"
description = "A simple Python project"
authors = ["Your Name <your.email@example.com>"]
license = "MIT"
[tool.poetry.dependencies]
python = "^3.8"
requests = "^2.25.1"
[tool.poetry.dev-dependencies]
pytest = "^6.2.2"
flake8 = "^3.9.0"
black = "^20.8b1"
isort = "^5.7.0"
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
[tool.black]
line-length = 120
[tool.isort]
profile = "black"
multi_line_output = 3
这里可能你会有问题,".flake8中配置了max-line-length = 120,那么pyproject.toml中是否有必要配置[tool.black] line-length = 120"?
有的。确保 Black 和 Flake8 使用相同的最大行长度设置,从而避免在格式化代码和检查代码时产生冲突。前者是代码格式化工具,后者是代码检查工具。
commitlint.config
commitlint.config.js 用于配置 Commitlint 工具,用于检查 Git 提交消息是否遵循特定的约定。
extends
:指定了要继承的配置文件,这里使用了 '@commitlint/config-conventional' 这个包的配置文件作为基础。formatter
:指定了用于格式化输出的包,这里使用了 '@commitlint/format' 这个包。rules
:定义了自定义的规则,其中 'type-enum' 规则指定了允许的提交类型,这里定义了一些常见的类型。ignores
:定义了忽略某些提交消息的规则,如以下示例空消息、包含 'Merge' 或 'merge' 的消息都会被忽略。defaultIgnores
:指定是否使用默认的忽略规则。helpUrl
:指定了在提交消息不符合规范时显示的自定义帮助链接。prompt
:定义了自定义提示配置,可通过设置messages
和questions
来定制交互式提示信息
bash
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'header-max-length': [2, 'always', 72],
'type-enum': [
2,
'always',
['feature', 'bugfix', 'minor', 'style', 'refactor', 'perf', 'test', 'build', 'ci', 'merge'],
],
'scope-empty': [2, 'never'],
'scope-case': [2, 'always', 'lower-case'],
'subject-case': [2, 'never', ['sentence-case', 'start-case', 'pascal-case', 'upper-case']],
'subject-empty': [2, 'never'],
'subject-full-stop': [2, 'never', '.'],
'body-leading-blank': [2, 'always'],
'footer-leading-blank': [1, 'always'],
},
ignores: [
(commit) => commit === '',
(message) => message.includes('Merge'),
(message) => message.includes('merge')
],
};
.pre-commit-config.yaml
.pre-commit-config.yaml
文件用于配置 pre-commit 工具。pre-commit 是一个用于管理 Git 预提交钩子的工具,可以在每次提交代码之前自动执行一系列任务,例如代码格式化、语法检查和测试。这有助于确保代码库中的代码保持一致且高质量
示例文件:
bash
default_stages: [commit]
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.1.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-ast
- id: debug-statements
- repo: https://github.com/ambv/black
rev: 21.12b0
hooks:
- id: black
language_version: python3.8
- repo: https://github.com/pycqa/isort
rev: 5.10.1
hooks:
- id: isort
- repo: https://github.com/pycqa/flake8
rev: 4.0.1
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v0.910
hooks:
- id: mypy
additional_dependencies: [types-requests]
注:
(1)Git 中,钩子(hooks)是在特定事件发生时自动执行的脚本,可用来自动执行一些任务,例如在提交代码之前进行代码格式化、语法检查、测试等。
触发时刻
代码质量和团队协作工具相关联。
-
.flake8
:与 Flake8 工具相关。当在命令行中手动运行flake8
命令或在持续集成(CI)流程中执行 Flake8 时,.flake8
配置文件中的设置将被应用。Flake8 根据这些设置检查代码中的语法错误、风格问题和潜在的 bug。 -
pyproject.toml
:与诸如 Black 和 iSort 等代码格式化工具相关。当在命令行中手动运行这些工具(例如,black .
或isort .
)或在持续集成(CI)流程中执行它们时,pyproject.toml
配置文件中的设置将被应用。这些工具会根据这些设置对代码进行格式化。 -
commitlint.config.js
:与 Commitlint 工具相关。当执行git commit
命令时,如果您已将 Commitlint 配置为 Git 钩子(例如,使用 Husky),commitlint.config.js
配置文件中的设置将被应用。Commitlint 会根据这些设置检查提交消息是否遵循特定的约定。 -
.pre-commit-config.yaml
:与 pre-commit 工具相关。当您执行git commit
命令时,如果您已安装了 pre-commit 钩子(通过运行pre-commit install
),.pre-commit-config.yaml
配置文件中定义的钩子将被触发。这些钩子会在提交代码之前自动执行一系列任务,例如代码格式化、语法检查和测试。
这些配置文件中的设置常在手动运行相关工具、执行 git commit
命令时触发 Git 钩子或在持续集成(CI)流程中执行这些工具时被应用。助于确保代码质量、一致性和可维护性。
意义
在 Python 项目中,.flake8
、pyproject.toml
、commitlint.config.js
和 .pre-commit-config.yaml
文件都是用于配置不同工具的配置文件。这些工具可以帮助您确保代码质量、一致性和团队协作效率。以下是这些文件及其对应工具的简要概述:
-
.flake8
:此文件用于配置 FF 工具,该工具是一个 Python 代码检查工具,用于检查代码中的语法错误、风格问题和潜在的 bug。通过在.flake8
文件中定义规则,您可以定制 Flake8 的行为,使其符合您的项目需求和编码风格。 -
pyproject.toml
:此文件是一个通用的 Python 项目配置文件,用于存储项目的构建和依赖管理信息。此文件还可用于配置诸如 Black 和 iSort 等代码格式化工具。通过在pyproject.toml
文件中定义规则,您可以确保这些工具按照您的编码风格和项目需求对代码进行格式化。 -
commitlint.config.js
:此文件用于配置 Commitlint 工具,该工具用于检查 Git 提交消息是否遵循特定的约定。通过在commitlint.config.js
文件中定义规则,您可以确保提交消息的一致性和可读性,从而提高团队协作效率。 -
.pre-commit-config.yaml
:此文件用于配置 pre-commit 工具,该工具用于管理 Git 预提交钩子。预提交钩子是在执行git commit
命令之前触发的钩子,可以在每次提交代码之前自动执行一系列任务,例如代码格式化、语法检查和测试。通过在.pre-commit-config.yaml
文件中定义钩子,您可以确保在每次提交代码之前都会自动执行这些检查任务。
这些配置文件之间的关系在于它们都是用于配置不同的代码质量和团队协作工具。虽然配置的工具各不相同,但共同目的是确保项目的代码质量、一致性和可维护性。