更改日志

24.8.0

稳定风格

  • 修复当 # fmt: off 用于结束括号或方括号之前时的崩溃问题。 (#4363)

打包

  • 更新打包元数据:明确链接文档,现在还链接了问题跟踪器。这改善了 Black 在 PyPI 上的列表。 (#4345)

解析器

  • 修复 Black 无法解析包含另一个多行字符串的多行 f-string 的回归问题 (#4339)

  • 修复 Black 无法解析 f-string 中的转义单引号的回归问题 (#4401)

  • 修复 Black 错误解析带有反斜杠的空行的错误 (#4343)

  • 修复 Black 的词法分析器无法很好地处理 f-string 中的 \{ 的错误 (#4422)

  • 修复词法分析器在 f-string 中某些标记的错误行号 (#4423)

性能

  • 改进在 .gitignore 中列出大型目录时的性能 (#4415)

Blackd

  • 修复 docker 容器的 blackd(以及所有 extras 安装) (#4357)

24.4.2

这是一个错误修复版本,用于修复 24.4.1 中引入的新 f-string 解析器中的两个回归问题。

解析器

  • 修复某些复杂 f-string 无法解析的回归问题 (#4332)

性能

  • 修复某些复杂字符串文字的性能低下问题 (#4331)

24.4.1

亮点

  • 添加对 PEP 701 引入的 Python 3.12 新 f-string 语法的支持 (#3822)

稳定风格

  • 修复包含换行符的缩进虚拟函数导致的崩溃问题 (#4318)

解析器

  • 添加对类型参数默认值的支持,这是一个由 PEP 696 添加到 Python 3.13 的新语法特性 (#4327)

集成

  • 即使跳过 git archive,Github Action 仍然可以工作 (#4313)

24.4.0

稳定风格

  • 修复由 AST 等效性检查引起的意外崩溃问题 (#4290)

预览风格

  • if 保护在 case 块中的时候,当行太长时现在会被包裹在括号中。 (#4269)

  • 除非在括号内,否则停止将多行字符串移动到新行 (#4289)

集成

  • 在 GitHub Action psf/black 中添加一个新选项 use_pyproject。这将从 pyproject.toml 读取 Black 版本。 (#4294)

24.3.0

亮点

此版本是一个里程碑:它修复了 Black 的第一个 CVE 安全漏洞。如果您在不受信任的输入上运行 Black,或者您习惯在文档字符串中放置数千个前导制表符,那么强烈建议您立即升级以修复 CVE-2024-21503

此版本还修复了 Black 的 AST 安全检查中的一个错误,该错误允许 Black 对 Python 3.12 及更高版本中有效的某些 f-string 进行不正确的更改。

稳定风格

  • 不要将注释与分隔符一起移动,这可能会导致崩溃 (#4248)

  • 加强 AST 安全检查以捕获更多对字符串的不安全更改。以前的 Black 版本会错误地格式化某些不寻常的 f-string 的内容,这些 f-string 包含嵌套的字符串,这些字符串具有相同的引号类型。现在,Black 会在这些字符串上崩溃,直到支持新 f-string 语法实现为止。 (#4270)

  • 修复超出最后代码行的行范围无法按预期工作的问题 (#4273)

性能

  • 修复在包含大量前导制表符的文档字符串上的灾难性性能问题。这修复了 CVE-2024-21503。 (#4278)

文档

  • 说明将 --check--quiet 一起使用时会发生什么 (#4236)

24.2.0

稳定风格

  • 修复注释与冗余括号一起被错误删除的错误 (#4218)

预览风格

  • hug_parens_with_braces_and_square_brackets 特性移到不稳定风格,因为存在未解决的崩溃问题和提议的格式调整 (#4198)

  • 修复基表达式导致三元表达式中 ** 格式不一致的问题 (#4154)

  • 在将换行符添加到几乎达到行限制的文档字符串之前检查换行符 (#4185)

  • 删除 case 语句 if 保护中的冗余括号 (#4214).

配置

  • 修复 Black 在存在符号链接的情况下会忽略输入文件的问题 (#4222)

  • Black 现在在发现项目根目录和配置时会忽略缺少 tool.black 部分的 pyproject.toml。由于 Black 继续使用版本控制作为项目根目录的指示器,因此这预计主要会改变单仓库设置中的行为(理想情况)。如果您希望保留以前的行为,只需将一个空的 [tool.black] 添加到以前发现的 pyproject.toml (#4204)

输出

  • Black 在执行等效性检查时会吞并 ast 模块产生的任何 SyntaxWarningDeprecationWarning (#4189)

集成

  • 添加 JSONSchema 并提供 validate-pyproject 入口点 (#4181)

24.1.1

错误修复版本,用于修复一个错误,该错误导致 Black 在某些路径长度限制严格的文件系统上不可用。

预览风格

  • 一致地在类型化参数上添加尾随逗号 (#4164)

配置

  • 缩短缓存文件名的长度以修复在不支持长路径的文件系统上的崩溃问题 (#4176)

24.1.0

亮点

此版本引入了新的 2024 稳定风格 (#4106),稳定了以下更改

  • if-else 表达式周围添加括号 (#2278)

  • 仅包含 ... 的虚拟类和函数实现被格式化为更紧凑 (#3796)

  • 如果赋值语句太长,我们现在更喜欢在右侧进行拆分 (#3368)

  • Unicode 转义序列中的十六进制代码现在被标准化为小写 (#2916)

  • 允许大多数块开头有空的第一行 (#3967, #4061)

  • 在长类型注释周围添加括号 (#3899)

  • 在模块文档字符串后强制换行 (#3932, #4028)

  • 修复返回类型中不正确的魔术尾随逗号处理 (#3916)

  • 删除类docstring之前的空行 (#3692)

  • 如果在单个 with 语句中组合,则将多个上下文管理器包装在括号中 (#3489)

  • 修复幂运算行长计算中的错误 (#3942)

  • 即使在最后一个条目之后有注释,也要将尾随逗号添加到集合字面量 (#3393)

  • 使用 --skip-magic-trailing-comma-C 时,将从具有多个元素的子表达式中删除尾随逗号 (#3209)

  • 在某些情况下,在存根中添加额外的空行 (#3564, #3862)

  • 接受原始字符串作为docstring (#3947)

  • 在case块中分割长行 (#4024)

  • 停止从子表达式中的walrus运算符中删除空格 (#3823)

  • 修复某些异步语句的格式错误 (#3609)

  • 允许将 # fmt: skip 与其他注释组合 (#3959)

--preview 风格中已经有一些改进,这些改进将在2025年稳定风格中发布。请尝试一下并 分享你的反馈。在过去,预览风格包含了一些我们无法稳定的功能。今年,我们添加了单独的 --unstable 风格用于具有已知问题的功能。现在, --preview 风格只包含我们真正希望在下一年的稳定风格中使用的功能。

稳定风格

在此版本中,对已移至稳定风格的功能进行了多项错误修复

  • 修复在对条件表达式进行括号处理时处理注释的错误 (#4134)

  • 修复一个错误,即与其他二元运算符不同,在子表达式中对括号中的walrus周围没有添加空格 (#4109)

  • 删除异步函数中docstring之前的空行 (#4132)

  • 解决允许在所有块的开头使用空行(除了docstring之前的空行)的更改中缺少的情况 (#4130)

  • 对于存根,修复逻辑以在具有主体嵌套类之后强制执行空行 (#4141)

预览风格

  • 添加 --unstable 风格,涵盖具有已知问题(会阻止它们进入稳定风格)的预览功能。还添加了 --enable-unstable-feature 标志;例如,使用 --enable-unstable-feature hug_parens_with_braces_and_square_brackets 在整个 2024 年应用此预览功能,即使以后的 Black 版本将该功能降级为不稳定 (#4096)

  • 以与类和函数docstring相同的方式格式化模块docstring (#4095)

  • 修复在字典中使用walrus时发生的崩溃 (#4155)

  • 修复包装长字典时不必要的括号 (#4135)

  • 停止在 # fmt: skip 注释之前规范化空格 (#4146)

配置

  • pyproject.toml 中的配置包含无效键时,打印警告 (#4165)

  • 修复符号链接处理,正确忽略指向根目录之外的符号链接 (#4161)

  • 修复导致出现假阳性缓存命中的缓存修改时间逻辑 (#4128)

  • 删除长期弃用的 --experimental-string-processing 标志。目前可以使用 --preview --enable-unstable-feature string_processing 启用此功能。 (#4096)

集成

  • 恢复仅在特定 git 钩子上运行 Black 的预提交集成的更改 (#3940),以更好地与旧版本的 pre-commit 兼容 (#4137)

23.12.1

打包

  • 修复了一个默认情况下包含来自 d 额外的依赖项的错误 (#4108)

23.12.0

亮点

马上就要到 2024 年了,这意味着是时候发布新版本的 Black 稳定风格了!与本版本一起,我们将发布一个 alpha 版本 24.1a1,展示 2024 年稳定风格的草案,我们将在 1 月份的版本中最终确定。请尝试一下并 分享你的反馈

此版本 (23.12.0) 仍然会生成 2023 年风格。 --preview 模式下的大多数(但不是全部)更改都将出现在 2024 年稳定风格中。

稳定风格

  • 修复一个错误,即 # fmt: off 在使用 --line-ranges 选项时会自动缩进,即使它不在指定的行范围内。 (#4084)

  • 修复括号中的上下文管理器的功能检测 (#4104)

预览风格

  • 在拆分链式赋值时,更喜欢在换行符之前使用更多等号 (#4010)

  • 模块级别上的独立换页符不再被删除 (#4021)

  • 现在,直接嵌套的元组、列表和字典的更多情况缩进更少 (#4012)

  • 允许在所有块的开头使用空行,除了docstring之前的空行 (#4060)

  • 修复在预览模式下使用短 --line-length 时发生的崩溃 (#4086)

  • 如果它们不是函数或类定义,则将仅包含省略号的套件保留在它们自己的行上 (#4066) (#4103)

配置

  • --line-ranges 现在在 --safe 模式下跳过 Black 的内部稳定性检查。这避免了在罕见的输入上发生崩溃,这些输入具有许多未格式化的相同内容行。 (#4034)

打包

  • 升级到 mypy 1.7.1 (#4049) (#4069)

  • 现在,CPython 3.12 提供了更快的编译轮子 (#4070)

集成

  • 启用 3.12 CI (#4035)

  • 并行构建 Docker 镜像 (#4054)

  • 使用 3.12 构建 Docker 镜像 (#4055)

23.11.0

亮点

  • 使用新的 --line-ranges 命令行选项支持格式化行范围 (#4020)

稳定风格

  • 修复对看起来像docstring的字节字符串进行格式化时的崩溃 (#4003)

  • 修复在docstring中,换行符之前的反斜杠后面是空格时发生的崩溃 (#4008)

  • 修复复杂块内的独立注释导致 Black 崩溃 (#4016)

  • 修复对类似于 await (a ** b) 的代码进行格式化时的崩溃 (#3994)

  • 不再将前导 f-string 视为 docstring。这与 Python 的行为相匹配,并修复了一个崩溃 (#4019)

预览风格

  • 作为函数的唯一参数的多行字典和列表现在缩进更少 (#3964)

  • 作为函数的唯一参数的多行解包字典和列表现在也缩进更少 (#3992)

  • 在 f-string 调试表达式中,现在保留在最终字符串中可见的引号类型 (#4005)

  • 修复一个错误,即长 case 块没有拆分成多行。还对 case 块启用通用尾随逗号规则 (#4024)

  • 继续要求模块级docstring和第一个函数或类定义之间有两个空行 (#4028)

  • 添加对同一行上其他注释的单行格式跳过的支持 (#3959)

配置

  • 在解析符号链接之前,始终应用强制排除逻辑 (#4015)

  • 修复了 --include 中绝对路径名称匹配的错误 (#3976)

性能

  • 修复了 macOS 上 arm64 架构上 mypyc 构建的错误 (#4017)

集成

  • Black 的 pre-commit 集成现在只会在适合代码格式化的 Git hook 上运行 (#3940)

23.10.1

亮点

  • 维护版本,修复 GitHub Action 边界情况 (#3957)

预览样式

  • 修复了合并包含内联注释的隐式多行字符串的错误 (#3956)

  • 允许在块打开后,在注释或复合语句之前使用空的第一行 (#3967)

打包

  • 将 Dockerfile 更改为使用 hatch + 编译 black (#3965)

集成

  • GitHub 工作流的摘要输出现在可以使用 summary 参数进行抑制。 (#3958)

  • 修复了 Black 检查未通过时,操作失败的问题 (#3957)

文档

  • 已知 Windows 文档 CI 出现问题 https://github.com/psf/black/issues/3968

23.10.0

稳定样式

  • 修复了从括号内字符串中删除注释的错误 (#3909)

预览样式

  • 修复了使用幂运算符的长行在行长之前拆分的问题 (#3942)

  • 现在将跨多行拆分的长类型提示括在括号中,并正确缩进 (#3899)

  • 现在在返回值类型中尊重魔法尾随逗号。 (#3916)

  • 模块级文档字符串后需要一个空行。 (#3932)

  • 将原始三重引号字符串视为文档字符串 (#3947)

配置

  • 修复了设置 BLACK_CACHE_DIR 时,缓存版本控制逻辑的问题 (#3937)

解析器

  • 修复了在 match 语句中,名为 type 的属性不被接受的错误 (#3950)

  • 添加了对包含 lambda 表达式和其他不寻常表达式的 PEP 695 类型别名的支持 (#3949)

输出

  • Black 不再尝试为尝试格式化 Python 2 代码提供特殊的错误 (#3933)

  • Black 在详细模式下将更一致地打印内部错误的堆栈跟踪 (#3938)

集成

  • 现在,作业摘要中显示的操作输出将用 Markdown 样式包装 (#3914)

23.9.1

由于各种问题,上一个版本 (23.9.0) 没有包含编译的 mypyc 轮子,这些轮子使 Black 的速度显著提升。这些问题现在已经修复,本版本应该再次包含编译的轮子。

由于 mypyc 中的错误,将不会提供 Python 3.12 的轮子。一旦 mypyc 错误修复,我们将在未来的版本中提供 3.12 的轮子。

打包

  • 将 mypy 升级到 1.5.1 (#3864)

性能

  • 在 Black 的缓存中存储原始元组而不是命名元组,从而提高性能并减小缓存大小 (#3877)

23.9.0

预览样式

  • 对虚拟实现使用更简洁的格式 (#3796)

  • 在存根文件中,在具有主体 (例如 if sys.version_info > (3, x):) 的语句和同一级别的函数定义之间添加一个空行 (#3862)

  • 修复了从下标中的 walrus 运算符中删除空格的错误 (#3823)

配置

  • Black 现在在解析符号链接之前应用排除和忽略逻辑 (#3846)

性能

  • 如果笔记本单元格不包含魔法命令,则避免导入 IPython (#3782)

  • 通过将文件哈希作为 mtime 和大小的回退进行比较来改进缓存 (#3821)

Blackd

  • 修复了 blackd 中使用单字符输入的问题 (#3558)

集成

  • Black 现在有一个 官方的 pre-commit 镜像。在您的 .pre-commit-config.yaml 中将 https://github.com/psf/black 替换为 https://github.com/psf/black-pre-commit-mirror 将使 Black 的速度提升约 2 倍 (#3828)

  • 现在,GitHub Action 完成后,将删除 ENV_PATH 指定的 .black.env 文件夹 (#3759)

23.7.0

亮点

  • 已删除对 Python 3.7 的运行时支持。格式化 3.7 代码将继续受到支持,直到另行通知为止 (#3765)

稳定样式

  • 修复了使用 PEP 604 联合类型注释时,在返回值类型注释中添加了非法的尾随逗号的错误 (#3735)

  • 修复了在某些情况下,存根文件中注释被删除或处理不当的多个错误和崩溃问题 (#3745)

  • 修复了括号内出现 type: ignore 之类的多行魔法注释时的崩溃问题 (#3740)

  • 修复了在 *Black* 删除类型注释中的尾随空格时,AST 验证中的错误 (#3773)

预览样式

  • 用作函数参数的隐式连接字符串不再被括在括号中 (#3640)

  • 删除类定义与其文档字符串之间的空行 (#3692)

配置

  • *Black* 的 --workers 参数现在可以通过 BLACK_NUM_WORKERS 环境变量指定 (#3743)

  • 现在默认情况下排除 .pytest_cache.ruff_cache.vscode (#3691)

  • 修复了在运行 --stdin-filename 时,*Black* 未遵守 pyproject.toml 设置的问题,前提是找到的 pyproject.toml 不在当前工作目录中 (#3719)

  • 如果 excludeextend-excludepyproject.toml 中具有无效数据类型,*Black* 现在会报错,而不是静默地执行错误的操作 (#3764)

打包

  • 将 mypyc 从 0.991 升级到 1.3 (#3697)

  • 删除了 Click 的补丁,该补丁在 Python 3.6 和 LANG=C 下缓解了错误 (#3768)

解析器

  • 添加了对 Python 3.12 中新的 PEP 695 语法的支持 (#3703)

性能

  • 当缓存已满时,显著提高 *Black* 的速度 (#3751)

  • 在不需要的情况下,避免导入 IPython (#3748)

输出

  • 在内部使用感知 UTC 日期时间,避免 Python 3.12 中的弃用警告 (#3728)

  • 更改详细日志记录,使其与 *Black* 的源代码发现逻辑完全一致 (#3749)

Blackd

  • 现在,blackd 参数解析器会在其帮助文本中显示选项的默认值 (#3712)

集成

文档

  • 在存储库的根目录中添加 CITATION.cff 文件,其中包含有关如何引用此软件的元数据 (#3723)

  • 更新开发者参考中的 *类* 和 *异常* 文档,使其与最新的代码库匹配 (#3755)

23.3.0

亮点

此版本修复了 Black 的 GitHub action 中一个长期存在的令人困惑的行为,即 action 的版本并不决定运行的 Black 版本 (问题 #3382)。此外,还修复了关于导入的一个小错误,并对预览样式进行了多项改进。

请尝试使用 black --preview 来试用 预览样式,并告诉我们您的反馈。预览样式中的所有更改预计将在 2024 年 1 月成为 Black 稳定样式的一部分。

稳定样式

  • 包含 # fmt: skip# fmt: off 的导入行不再在紧随其后的另一个导入行之后添加额外的空行 (#3610)

预览样式

  • 即使在最后一个条目之后有注释,也要将尾随逗号添加到集合字面量 (#3393)

  • async defasync forasync with 语句现在与它们的非异步版本相比,格式一致。(#3609)

  • 包含两个上下文管理器的 with 语句将始终用括号括起来 (#3589)

  • 让字符串分割器尊重 东亚宽度 (#3445)

  • 现在,长字符串字面量可以在东亚逗号和句点 ( U+3001 IDEOGRAPHIC COMMA、 U+3002 IDEOGRAPHIC FULL STOP 和 U+FF0C FULLWIDTH COMMA) 之后分割,除了在空格之前分割 (#3445)

  • 对于存根,强制在具有除 ... 以外的正文的嵌套类之后使用一个空行 (#3564)

  • 通过更改行分割行为来改进对多行字符串的处理 (#1879)

解析器

  • 添加了对格式化具有无效类型注释的文件的支持 (#3594)

集成

  • 更新 GitHub Action 以使用与 action 版本等效的 Black 版本,前提是未指定版本输入 (#3543)

  • 修复了 vim 的自动加载脚本中缺少的 Python 二进制路径 (#3508)

文档

  • 文档说明仅支持最新版本以解决安全问题;漏洞应通过 Tidelift 报告 (#3612)

23.1.0

亮点

这是 2023 年的第一个版本,遵循我们的 稳定性策略,它对我们的稳定样式进行了一些改进,包括对空行处理的改进,在多个上下文中删除冗余括号,以及更好地突出显示隐式连接字符串的输出。

预览样式也进行了许多更改;试用 black --preview 并给我们反馈,帮助我们为明年设定稳定样式。

除了样式更改之外,Black 现在还自动从您的 pyproject.toml 文件推断支持的 Python 版本,从而无需单独设置 Black 的目标版本。

稳定样式

  • 介绍 2023 年稳定样式,该样式包含了去年预览样式的大部分内容 (#3418)。具体更改

    • 在具有粘性前导注释的类和函数之前强制使用空行 (#3302) (22.12.0)

    • 将空文件和仅包含空格的文件重新格式化为空文件 (如果不存在换行符) 或单个换行符 (如果存在换行符) (#3348) (22.12.0)

    • 用作函数参数的隐式连接字符串现在用括号括起来 (#3307) (22.12.0)

    • 正确处理位于行首非嵌套括号内的尾随逗号 (#3370) (22.12.0)

    • --skip-string-normalization / -S 现在阻止 docstring 前缀按预期进行规范化 (#3168) (自 22.8.0 以来)

    • 使用 --skip-magic-trailing-comma-C 时,将从具有多个元素的下标表达式中删除尾随逗号 (#3209) (22.8.0)

    • 现在,列表、集合或元组中的隐式连接字符串用括号括起来 (#3162) (22.8.0)

    • 修复了当注释出现在其自身行上的隐式连接字符串中间时发生的字符串合并/分割问题 (#3227) (22.8.0)

    • 如果会导致违反行长度限制,docstring 引号将不再移动 (#3044#3430) (22.6.0)

    • 现在,返回值注释周围的括号得到管理 (#2990) (22.6.0)

    • 删除等待对象周围的冗余括号 (#2991) (22.6.0)

    • 删除 with 语句中冗余的括号 (#2926) (22.6.0)

    • 删除代码块打开后尾随的换行符 (#3035) (22.6.0)

    • 代码单元分隔符 #%% 现在已标准化为 # %% (#2919) (22.3.0)

    • 删除 except 语句中冗余的括号 (#2939) (22.3.0)

    • 删除 for 循环中元组解包的冗余括号 (#2945) (22.3.0)

    • 避免在单元素下标中使用魔术尾随逗号 (#2942) (22.3.0)

  • 修复了当冒号行标记在 # fmt: off# fmt: on 之间时发生的崩溃 (#3439)

预览样式

  • 格式化字符串字面量中 unicode 转义序列中的十六进制代码 (#2916)

  • if-else 表达式周围添加括号 (#2278)

  • 提高包含许多字符串的大型表达式的性能 (#3467)

  • 修复了在使用 assert + 带括号的字符串的预览样式中发生的崩溃 (#3415)

  • 修复了在使用 walrus 运算符在函数返回值注释和 except 子句中使用的预览样式中发生的崩溃 (#3423)

  • 修复了在预览高级字符串处理中发生的崩溃,其中混合的隐式连接的常规字符串和 f 字符串以空跨度开头 (#3463)

  • 修复了在预览高级字符串处理中发生的崩溃,其中在字典的值之前放置了独立的注释 (#3469)

  • 修复了一个问题,即当装饰器应用了 # fmt: skip 或装饰器之间存在独立注释时,会添加额外的空行 (#3470)

  • 不要将 docstring 中的结束引号放在单独的行上,即使该行太长 (#3430)

  • 字典字面量中的长值现在用括号括起来;相应地,现在删除了字典字面量中短值周围的冗余括号;现在,长字符串 lambda 值用括号括起来 (#3440)

  • 修复了在涉及 docstring 的边缘情况下发生的两个预览样式崩溃 (#3451)

  • 将字符串类型注释排除在改进的字符串处理之外;修复了在返回值注释被字符串化并跨多行扩展时发生的崩溃 (#3462)

  • 在针对 Python 3.9+ 时,将多个上下文管理器用括号括起来 (#3489)

  • 修复了在使用 walrus 运算符在 with 语句或元组中使用的预览样式中发生的多个崩溃 (#3473)

  • 修复了在 f 字符串表达式中发生的无效引号转义错误,该错误生成了无效代码。现在,通过更改表达式中使用的引号,可以将具有不同引号的隐式连接的 f 字符串合并或引号规范化。(#3509)

  • 修复了在使用 mypyc 编译 Black 时发生的 await (yield) 崩溃 (#3533)

配置

  • Black 现在尝试从 pyproject.toml (#3219) 中指定的项目元数据中推断其 --target-version

打包

  • 将 mypyc 从 0.971 升级到 0.991,以便 mypycified 的 Black 可以构建在 armv7 上 (#3380)

    • 这也修复了在使用编译后的 Black 与 CPython 的调试版本时的一些崩溃问题。

  • 在 3.11 alpha 版本中删除对 tomli 要求的特定支持,绕过一个会导致该要求无法在任何非最终版本的 Python 版本上安装的错误 (#3448)

  • Black 现在依赖于 packaging 版本 22.0 或更高版本。这是新功能所需,该功能需要解析项目元数据的某些部分 (#3219)

输出

  • 多次调用 black --help 将每次返回相同的内容 (#3516)

  • 详细日志现在显示了 pyproject.toml 配置变量的值 (#3392)

  • 修复了由于使用不正确的项目根目录相对路径而导致的详细输出中的错误符号链接检测消息 (#3385)

集成

  • 将 3.11 CI 移动到正常流程,因为现在所有依赖项都支持 3.11 (#3446)

  • Docker: 添加新的 latest_prerelease 标签自动化,以在 docker 映像中跟踪最新的 black alpha 版本 (#3465)

文档

  • 扩展 vim-plug 安装说明以提供更明确的选项 (#3468)

22.12.0

预览样式

  • 在具有粘性前导注释的类和函数之前强制执行空行 (#3302)

  • 将空文件和仅包含空格的文件重新格式化为要么为空文件(如果不存在换行符),要么为单个换行符(如果存在换行符) (#3348)

  • 用作函数参数的隐式连接字符串现在被包装在括号内 (#3307)

  • 对于赋值语句,如果左侧适合单行,则优先分割右侧 (#3368)

  • 正确处理位于行首非嵌套括号内的尾部逗号 (#3370)

配置

  • 通过考虑 .gitignore 的位置和目标文件的相对路径,修复错误应用的 .gitignore 规则 (#3338)

  • 修复了在指定多个源目录时错误地忽略 .gitignore 存在的问题 (#3336)

解析器

  • 解析器添加了对传递给函数参数的生成器表达式中的 walrus 的支持(例如,any(match := my_re.match(text) for text in texts)) (#3327).

集成

  • Vim 插件:可以通过 let g:black_use_virtualenv = 0 (#3309) 选项使用 Black 的系统安装。

22.10.0

亮点

  • 已删除对 Python 3.6 的运行时支持。将继续支持格式化 3.6 代码,直到另行通知。

稳定样式

  • 修复了在 # fmt: on 的块级与 # fmt: off 的块级不同时发生的崩溃 (#3281)

预览样式

  • 修复了格式化一些具有括号括起来的较长字符串键的字典时发生的崩溃 (#3262)

配置

  • .ipynb_checkpoints 目录现在默认被排除在外 (#3293)

  • 添加了 --skip-source-first-line / -x 选项,以在格式化时忽略源代码的第一行 (#3299)

打包

  • 使用 PyInstaller 制作的可执行文件在 macOS 上同时格式化多个文件时将不再崩溃。macOS 的原生 x86-64 可执行文件再次可用。(#3275)

  • Hatchling 现在用作构建后端。对于使用 PyPI 上的轮子安装 Black 的用户,这不会有任何影响。(#3233)

  • 现在为 CPython 3.11 提供了更快的编译轮子 (#3276)

Blackd

  • 将保留 Windows 样式 (CRLF) 换行符 (#3257).

集成

  • Vim 插件:添加标志 (g:black_preview) 以启用/禁用预览样式 (#3246)

  • 更新 GitHub Action 以支持通过 jupyter 选项格式化 Jupyter Notebook 文件 (#3282)

  • 更新 GitHub Action 以支持使用版本说明符(例如 <23)作为 Black 版本 (#3265)

22.8.0

亮点

  • 现在支持 Python 3.11,但 blackd 除外,因为 aiohttp 在发布时不支持 3.11 (#3234)

  • 这是最后一个支持在 Python 3.6 上运行 Black 的版本(格式化 3.6 代码将继续支持,直到另行通知)。

  • 重新表述稳定性策略,表明我们可能会在极少数情况下进行更改,这些更改会影响以前未由 Black 格式化的代码 (#3155)

稳定样式

  • 修复了在表达式或代码块中间使用 # fmt: on/off 时发生的无限循环 (#3158)

  • 修复了在冒号 (:) 行上错误处理 # fmt: skip 的问题 (#3148)

  • 当一行中围绕幂运算符的空格被删除时,注释不再被删除 (#2874)

预览样式

  • 单字符闭合文档字符串引号不再被移动到它们自己的行,因为这是无效的。这是一个在版本 22.6.0 中引入的错误。(#3166)

  • --skip-string-normalization / -S 现在阻止文档字符串前缀按预期被规范化 (#3168)

  • 使用 --skip-magic-trailing-comma-C 时,将从具有多个元素的子表达式中删除尾随逗号 (#3209)

  • 在列表、集合或元组中的隐式连接字符串现在被包装在括号内 (#3162)

  • 修复了当注释位于隐式连接字符串的自身行中的中间时发生的字符串合并/拆分问题 (#3227)

Blackd

  • blackd 现在支持通过 X-Preview 标头启用预览样式 (#3217)

配置

  • Black 现在使用调试 f-字符串的存在来检测目标版本 (#3215)

  • 修复了在涉及 --stdin-filename 的情况下错误检测项目根目录和详细记录源的问题 (#3216)

  • 现在也尊重命令行上给出的源目录中的直接 .gitignore 文件,以前只尊重项目根目录和自动发现目录中的 .gitignore 文件 (#3237)

文档

  • 建议在 IntelliJ IDE 中使用 BlackConnect (#3150)

集成

  • Vim 插件:用 Black: 作为消息前缀,以便清楚地表明它们来自 Black (#3194)

  • Docker: 更改为 /opt/venv 安装,并添加到 PATH 中,以便非 root 用户可以使用 (#3202)

输出

  • 从已弃用的 asyncio.get_event_loop() 更改为创建我们的事件循环,这消除了 DeprecationWarning (#3164)

  • 从内部 blib2to3 库中删除日志记录,因为它经常发出有关缓存失败的错误日志,这些日志可以而且应该被忽略 (#3193)

解析器

  • 类型注释现在一致地包含在 AST 等效性检查中,因此意外删除会引发错误。 尽管由于标准库的限制,在 PyPy 3.7 上运行时无法跟踪类型注释。 (#2874)

性能

  • 在格式化单个文件时,将 Black 的启动时间减少 15-30% (#3211)

22.6.0

样式

  • 修复涉及 #fmt: skip# fmt:skip 注释的不稳定格式(注意空格的缺失)(#2970)

预览样式

  • 如果违反行长限制,文档字符串引号将不再移动 (#3044)

  • 现在管理返回值注释周围的括号 (#2990)

  • 删除等待对象周围不必要的括号 (#2991)

  • 删除 with 语句中不必要的括号 (#2926)

  • 删除代码块打开后的尾随换行符 (#3035)

集成

  • 添加 scripts/migrate-black.py 脚本,以方便将 Black 引入 Git 项目 (#3038)

输出

  • 将 Python 版本和实现作为 --version 标志的一部分输出 (#2997)

打包

  • 在 Python 3.11 构建中使用 tomli 而不是 tomllib,其中 tomllib 不可用 (#2987)

解析器

  • PEP 654 语法(例如,except *ExceptionGroup:)现在受支持 (#3016)

  • PEP 646 语法(例如,Array[Batch, *Shape]def fn(*args: *T) -> None)现在受支持 (#3071)

Vim 插件

  • 修复 strtobool 函数。 它没有解析 true/on/false/off。 (#3025)

22.3.0

预览样式

  • 代码单元分隔符 #%% 现在已标准化为 # %% (#2919)

  • except 语句中删除不必要的括号 (#2939)

  • for 循环中的元组解包中删除不必要的括号 (#2945)

  • 避免单元素下标中的 magic-trailing-comma (#2942)

配置

  • 默认情况下不要格式化 __pypackages__ 目录 (#2836)

  • 添加支持使用 --required-version 指定稳定版本 (#2832)。

  • 避免用户没有 homedir 时崩溃 (#2814)

  • 避免 md5 不可用时崩溃 (#2905)

  • 修复在 Windows 上处理目录连接 (#2904)

文档

  • 更新 pylint 配置文档 (#2931)

集成

  • 将测试移至在 Vim/Neovim 中禁用插件,这可以加快加载速度 (#2896)

输出

  • 在详细模式下,记录何时 *Black* 使用用户级配置 (#2861)

打包

  • 修复 Black 以与 Click 8.1.0 配合使用 (#2966)

  • 在 Python 3.11 及更高版本上,使用标准库的 tomllib 而不是 tomli (#2903)

  • black-primer,已弃用的内部开发工具,已被删除并复制到 单独的存储库 (#2924)

解析器

  • Black 现在可以解析 forasync for 语句目标中的星号表达式,例如 for item in *items_1, *items_2: pass (#2879)。

22.1.0

最后,*Black* 不再是 beta 产品! 这是第一个非 beta 版本,也是第一个受我们新的 稳定性策略 涵盖的版本。

重点

  • 删除 Python 2 支持 (#2740)

  • 介绍 --preview 标志 (#2752)

样式

  • 弃用 --experimental-string-processing 并将功能移至 --preview 下 (#2789)

  • 对于存根,如果存在至少一个预先存在的空行,则现在保留类属性和方法之间的一个空行 (#2736)

  • Black 现在规范化字符串前缀顺序 (#2297)

  • 如果两个操作数都是简单的,则删除幂运算符周围的空格 (#2726)

  • 解决在存在 magic trailing comma 的情况下导致某些情况下格式不稳定的错误 (#2807)

  • 对十进制浮点数和整数字面量使用括号进行属性访问 (#2799)

  • 不要对十六进制、二进制、八进制和复数字面量添加属性访问的空格 (#2799)

  • 在顶层 if 语句中以相同方式对待存根中的空行 (#2820)

  • 修复使用分号和算术表达式的格式不稳定 (#2817)

  • 修复围绕 magic trailing comma 的格式不稳定 (#2572)

解析器

  • 修复包含 as-表达式(例如 case {"key": 1 | 2 as password})的映射情况 (#2686)

  • 修复包含多个顶层 as-表达式(例如 case 1 as a, 2 as b)的情况 (#2716)

  • 修复包含带有关键字参数的 as-表达式的调用模式,例如 case Foo(bar=baz as quux) (#2749)

  • returnyield 结构上的元组解包现在表示 3.8+ (#2700)

  • 带注释的赋值上的无括号元组(例如 values: Tuple[int, ...] = 1, 2, 3)现在表示 3.8+ (#2708)

  • 修复在括号内存在尾随换行符或注释时,处理独立 match()case() (#2760)

  • from __future__ import annotations 语句现在表示 Python 3.7+ (#2690)

性能

  • 通常情况下,新回溯解析器的速度提高了约 4 倍(在 --target-version 设置为 3.10 及更高版本时启用)。 (#2728)

  • *Black* 现在使用 mypyc 编译,总体速度提高了 2 倍。 支持 64 位 Windows、MacOS 和 Linux(不包括 musl)。 (#1009, #2431)

配置

  • 在 pyproject.toml 中不接受裸回车换行符 (#2408)

  • 添加配置选项 (python-cell-magics) 以格式化 Jupyter Notebook 中使用自定义魔术的单元格 (#2744)

  • 允许在所有平台上使用环境变量 BLACK_CACHE_DIR 设置自定义缓存目录 (#2739).

  • 默认情况下启用 Python 3.10+,无需额外指定 --target-version=py310。 (#2758)

  • 使传递 SRC--code 成为必需且互斥的 (#2804)

输出

  • 改进对无效正则表达式的错误消息 (#2678)

  • 在 AST 安全检查期间解析失败时,通过嵌入底层 SyntaxError 来改进错误消息 (#2693)

  • 不再将差异标题颜色设置为白色,因为它在浅色主题的终端中不可读 (#2691)

  • 在最终统计信息中添加了文本颜色 (#2712)

  • 详细模式现在还描述了如何发现项目根目录以及将格式化的路径。 (#2526)

打包

  • 已删除对依赖项的所有上限版本 (#2718)

  • typing-extensions 在 Python 3.10+ 中不再是必需的依赖项 (#2772)

  • click 下限设置为 8.0.0 (#2791)

集成

  • 更新 GitHub 操作以支持容器化运行 (#2748)

文档

  • 将 pip 安装说明中的协议更改为 https:// (#2761)

  • 将 HTML 主题更改为 Furo,主要是为了其响应式设计和移动设备支持 (#2793)

  • 弃用 black-primer 工具 (#2809)

  • 记录 Python 支持策略 (#2819)

21.12b0

Black

  • 修复 f-string 表达式跨度的确定 (#2654)

  • 修复关于多行语句中 EOF 的错误消息的错误格式 (#2343)

  • 块中的函数和类现在具有更一致的周围间距 (#2472)

Jupyter Notebook 支持

  • 现在只有在已知 Python 单元格魔法的情况下才会处理单元格魔法。之前,所有单元格魔法都会被标记化,这会导致可能的缩进错误,例如使用 %%writefile。 (#2630)

  • 修复 Jupyter Notebook 中对环境变量的赋值 (#2642)

Python 3.10 支持

  • 如果检测到 3.10 仅语法,则提示用户使用 --target-version py310 (#2668)

  • 修复 match 语句,其中包含开放序列主题,如 match a, b:match a, *b: (#2639) (#2659)

  • 修复包含 match/case 软关键字多次的 match/case 语句,如 match re.match() (#2661)

  • 修复具有内联主体的 case 语句 (#2665)

  • 修复 match 主题中星号表达式的样式 (#2667)

  • 修复 match 语句中无效语法上的解析器错误位置 (#2649)

  • 修复在没有 ProcessPoolExecutor 的平台上的 Python 3.10 支持 (#2631)

  • 在使用 match 的代码上,在 --target-version py310 下的解析性能提高了约 50% (#2670)

打包

21.11b1

Black

  • 将 regex 版本最低限度提升到 2021.4.4 以修复 Pattern 类的用法 (#2621)

21.11b0

Black

  • 通过改进 Python 2 仅语法检测,在更多情况下发出有关 Python 2 弃用的警告 (#2592)

  • 添加实验性 PyPy 支持 (#2559)

  • 添加对 match 语句的部分支持。由于它是实验性的,因此只有在明确指定 --target-version py310 时才会启用它 (#2586)

  • 添加对带括号的 with 的支持 (#2586)

  • 声明对 Python 3.10 的支持以运行 Black (#2562)

集成

  • 通过删除已弃用的 distutils 导入,修复了 Python 3.10 中的 vim 插件 (#2610)

  • vim 插件现在从 pyproject.toml 中解析 skip_magic_trailing_comma (#2613)

21.10b0

Black

  • 记录稳定性策略,该策略将适用于非 beta 版本 (#2529)

  • 添加新的 --workers 参数 (#2514)

  • 修复了对 lambda 中仅位置参数的特征检测 (#2532)

  • 将 typed-ast 版本最低限度提升到 1.4.3 以实现 3.10 兼容性 (#2519)

  • 修复了 Python 3.10 兼容性问题,其中循环参数仍在传递,即使它已被删除 (#2580)

  • 弃用 Python 2 格式化支持 (#2523)

Blackd

  • 删除对 aiohttp-cors 的依赖 (#2500)

  • 将所需的 aiohttp 版本提升到 3.7.4 (#2509)

Black-Primer

  • 添加对 –projects 的 primer 支持 (#2555)

  • 在单个失败后打印 primer 摘要 (#2570)

集成

  • 允许在 vim 插件中传递 target_version (#1319)

  • 在 docker 文件中安装构建工具,并使用多阶段构建来减小镜像大小 (#2582)

21.9b0

打包

  • 修复自包含二进制文件中缺少的模块 (#2466)

  • 修复安装期间缺少的 toml extra (#2475)

21.8b0

Black

  • 添加对格式化 Jupyter Notebook 文件的支持 (#2357)

  • appdirs 依赖项迁移到 platformdirs (#2375)

  • 如果 .gitignore 无效,则显示更友好的错误 (#2414)

  • 在 f-string 表达式中意外添加的反斜杠的故障保护机制已得到加强,以便在引号规范化期间处理更多边缘情况 (#2437)

  • 通过添加尾随逗号,避免将函数返回类型注释的类型更改为元组 (#2384)

  • 已添加对集合文字、集合推导和索引中未带括号的 walrus 的解析支持 (#2447).

  • 固定 setuptools-scm 构建时依赖项版本 (#2457)

  • 排除 typing-extensions 版本 3.10.0.1,因为它在 Python 3.10 上已损坏 (#2460)

Blackd

  • 将 sys.exit(-1) 替换为 raise ImportError,因为它与扫描已安装软件包的工具的配合更加良好 (#2440)

集成

  • 提供的 pre-commit 钩子不再指定 language_version,以避免覆盖 default_language_version (#2430)

21.7b0

Black

  • 现在支持使用高于规范 v0.5.0 的 TOML 功能的配置文件 (#2301)

  • 添加对通过 STDIN 传入 black 的代码的 primer 支持和测试 (#2315)

  • 当启用 FORCE_OPTIONAL_PARENTHESES 功能时修复内部错误 (#2332)

  • 接受空 stdin (#2346)

  • 在 AST 安全检查期间解析失败时提供更实用的错误 (#2304)

Docker

  • 添加新的 latest_release 标签自动化,以跟踪 docker 镜像上的最新 black 版本 (#2374)

集成

  • vim 插件现在从包含当前缓冲区的目录向上搜索 pyproject.toml,而不是当前工作目录。 (#1871)

  • vim 插件现在从 pyproject.toml 中读取正确的字符串规范化选项 (#1869)

  • vim 插件不再在 pyproject.toml 中存在布尔值时导致 Black 崩溃 (#1869)

21.6b0

Black

  • 修复由 fmt: skip 和缩进引起的失败 (#2281)

  • 在决定是否拆分字符串时考虑 += 赋值 (#2312)

  • 当存在字符串运算符时更正最大字符串长度计算 (#2292)

  • 修复使用 --code 标志时的选项用法 (#2259)

  • Black 用作库时,不要调用 uvloop.install() (#2303)

  • 添加 --required-version 选项,以要求运行特定版本 (#2300)

  • 修复字符串组包含伪造的 f-string 时不正确的自定义断点索引 (#2311)

  • 修复 R 前缀将被 docstring 转换为小写字符的回归 (#2285)

  • 修复使用 --experimental-string-processing 时处理命名转义 (\N{...}) 的问题 (#2319)

集成

  • 官方 Black 操作现在支持选择要使用的版本,并支持三大操作系统。 (#1940)

21.5b2

Black

  • 不再在空 docstring 中插入空格 (#2249)

  • 修复在 Windows 上处理包含非 ASCII 字符的 .gitignore 文件的问题 (#2229)

  • 尊重所有级别的 .gitignore 文件,而不仅仅是 root/.gitignore 文件(像 git 一样应用 .gitignore 规则)(#2225)

  • 在使用 LANG=C 时恢复与 Python 3.6 上 Click 8.0 的兼容性 (#2227)

  • 如果在 python 环境中,添加额外的 uvloop 安装 + 导入支持 (#2258)

  • 修复当匹配的括号未找到时 --experimental-string-processing 崩溃 (#2283)

  • 确保拆分以字符串运算符开头的行 (#2286)

  • 修复 black 用于识别 f-表达式 的正则表达式 (#2287)

Blackd

  • aiohttp-cors 依赖项添加下限。仅支持 0.4.0 或更高版本。 (#2231)

打包

  • 作为 GitHub 发布管道的组成部分,发布自包含的 x86_64 MacOS 二进制文件 (#2198)

  • 始终使用最新的可用 Python 构建二进制文件 (#2260)

文档

  • 在常见问题页面中添加关于魔术注释的讨论 (#2272)

  • --experimental-string-processing 将在将来默认启用 (#2273)

  • 修复由 codespell 发现的拼写错误 (#2228)

  • 修复 Vim 插件安装说明。 (#2235)

  • 添加新的常见问题解答页面 (#2247)

  • 修复编码 + 符号链接问题,这些问题会阻止在 Windows 上正确构建 (#2262)

21.5b1

Black

  • src/black/__init__.py 重构为多个文件 (#2206)

文档

  • main 分支替换了所有剩余的 master 分支引用。源代码中也进行了一些额外的更改。 (#2210)

  • 对文档进行了大幅重组,使其更有意义。前往 RTD 上的稳定文档 查看它们。 (#2174)

21.5b0

Black

  • 如果 --stdin-filename.pyi 结尾,则设置 --pyi 模式 (#2169)

  • 停止将使用但没有参数的 PEP-614 之前修饰符检测为 Python 3.9+ (#2182)

Black-Primer

  • --no-diff 添加到 black-primer 以抑制格式更改 (#2187)

21.4b2

Black

  • 如果用户配置目录不可访问,则修复崩溃。 (#2158)

  • 澄清 Black 可能更改 AST 的 情况 (#2159)

  • 允许通过在 pyproject.toml 中或命令行上指定 exclude 来覆盖 .gitignore 规则。 (#2170)

打包

  • 使用 black 安装 primer.json(默认情况下由 black-primer 使用)。 (#2154)

21.4b1

Black

  • 修复以 “\ ” 结尾的 docstring 崩溃。 (#2142)

  • 修复从 dostring 中清理非典型空格时崩溃 (#2120)

  • 反映缓存文件名称中的 --skip-magic-trailing-comma--experimental-string-processing 标志。如果没有此修复,这些标志的更改将不会在缓存已填充的情况下生效。 (#2131)

  • 不要从包含 assert / return 语句的赋值表达式中删除必要的括号。 (#2143)

打包

  • 将 pathspec 提升到 >= 0.8.1 以解决无效的 .gitignore 排除处理

21.4b0

Black

  • 修复了由 Black 插入的可选尾部逗号和查看预先存在的“魔术”尾部逗号的可选括号的组合而导致的罕见但令人讨厌的格式不稳定。这修复了问题 #1629 及其许多许多副本。 (#2126)

  • Black 现在通过剥离前导和尾随空格来处理单行 docstring,并在需要时添加填充空格以拆分 “”””。 (#1740)

  • Black 现在清理注释中的前导非换行空格 (#2092)

  • Black 现在在规范化多行 docstring 引号时尊重 --skip-string-normalization (#1637)

  • Black 不再在格式化类型存根时删除非函数代码和修饰符之间的所有空行。现在 Black 强制使用一个空行。 (#1646)

  • Black 不再在 if/while 语句中添加括号化赋值表达式后的不正确空格 (#1655)

  • 添加 --skip-magic-trailing-comma / -C 以避免使用尾部逗号作为拆分行的理由 (#1824)

  • 修复了在 POSIX 上 PWD=/ 时崩溃 (#1631)

  • 修复了使用 –diff 时出现的“在关闭的文件上进行 I/O 操作” (#1664)

  • 防止彩色 diff 输出与多个文件交织在一起 (#1673)

  • 添加了对 python 3.9 上的 PEP 614 放宽的修饰符语法的支持 (#1711)

  • 添加了对带注释的赋值中无括号元组和 yield 表达式的解析支持 (#1835)

  • 添加了 --extend-exclude 参数(PR #2005

  • 通过避免使用 pathlib 来加速缓存 (#1950)

  • --diff 正确地指示了当文件没有以换行符结尾时的情况 (#1662)

  • 添加了 --stdin-filename 参数,以允许 stdin 尊重 --force-exclude 规则 (#1780)

  • fmt: skip 结尾的行将不再被格式化 (#1800)

  • PR #2053: Black 现在不再依赖于 Python 3.8 及更高版本的 typed-ast

  • PR #2053: Python 2 支持现在是可选的,使用 python3 -m pip install black[python2] 安装以保持支持。

  • 默认情况下排除 venv 目录 (#1683)

  • 修复了在格式化 Python 2 文档字符串时出现“Black 生成的代码与源代码不一致”的问题 (#2037)

打包

  • 现在通过 GitHub Releases 为发行版提供自包含的本地 Black 二进制文件 (#1743)

20.8b1

打包

  • 明确依赖于 Click 7.1.2 或更高版本,因为 Black 不再支持低于 7.0 的版本

20.8b0

Black

  • 重新实现了对显式尾部逗号的支持:现在它在任何括号对中都能一致地工作,包括嵌套结构 (#1288 和重复项)

  • Black 现在在重新缩进周围代码时重新缩进文档字符串 (#1053)

  • Black 现在显示彩色差异 (#1266)

  • Black 现在使用“py3”标记的轮子进行打包 (#1388)

  • Black 现在支持 Python 3.8 代码,例如 return 语句中的星号表达式 (#1121)

  • Black 不再规范化大写 R 字符串前缀,因为它们具有社区认可的含义 (#1244)

  • Black 现在在指定的配置文件不存在时使用退出代码 2 (#1361)

  • Black 现在可以在 AWS Lambda 上运行 (#1141)

  • 添加了 --force-exclude 参数 (#1032)

  • 删除了已弃用的 --py36 选项 (#1236)

  • 修复了 --diff 输出在遇到 EOF 时的问题 (#526)

  • 修复了 # fmt: off 处理在装饰器周围的问题 (#560)

  • 修复了某些 # type: ignore 注释导致的格式不稳定问题 (#1113)

  • 修复了在组织括号后跟索引时的无效删除问题 (#1575)

  • 引入了 black-primer,一个 CI 工具,允许我们针对 Black 的现有开源用户运行回归测试 (#1402)

  • 基于 Hypothesis 和 Hypothersmith 在我们的测试套件中引入了基于属性的模糊测试 (#1566)

  • 实现了实验性的并且默认情况下禁用的长字符串重新包装 (#1132),隐藏在 --experimental-string-processing 标志下,因为它正在开发中;这是一个未记录且不受支持的功能,如果你依赖它,你会失去互联网积分 (#1609)

Vim 插件

  • 优先使用 virtualenv 包而不是全局包 (#1383)

19.10b0

  • 添加了对 PEP 572 赋值表达式的支持 (#711)

  • 添加了对 PEP 570 位置参数的支持 (#943)

  • 添加了对异步生成器的支持 (#593)

  • 添加了对通过在内部放置显式尾部逗号来预分割集合的支持 (#826)

  • 添加了 black -c 作为一种从命令行格式化代码的方式 (#761)

  • –safe 现在可以使用 Python 2 代码 (#840)

  • 修复了针对 Python 2 特定代码的语法选择 (#765)

  • 修复了函数定义和调用站点中尾部逗号的功能检测 (#763)

  • # fmt: off/# fmt: on 注释对在同一个代码块中多次放置时现在能够正确地工作 (#1005)

  • Black 不再在具有超过 61 个内核的 Windows 机器上崩溃 (#838)

  • Black 不再在以反斜杠开头的独立注释上崩溃 (#767)

  • Black 不再在具有注释的 fromimport 块上崩溃 (#829)

  • Black 不再在某些平台配置上的 Python 3.7 上崩溃 (#494)

  • Black 不再在 from-imports 中的注释上失败 (#671)

  • Black 不再在文件以反斜杠开头时失败 (#922)

  • Black 不再将普通注释与类型注释合并 (#1027)

  • Black 不再分割包含类型注释的长行 (#997)

  • 删除了围绕 yield 表达式的多余括号 (#834)

  • 在解包赋值中添加了围绕长元组的括号 (#832)

  • 在单目运算符前缀时,在复杂幂周围添加了括号 (#646)

  • 修复了导致 Black 使用 1 的行长度目标格式化某些代码的错误 (#762)

  • Black 不再在字符串边界上在 f 字符串子表达式中引入引号 (#863)

  • 如果 Black 在单个表达式周围放置括号,它会将注释移动到包装的表达式,而不是括号之后 (#872)

  • blackd 现在在响应头中返回 Black 的版本 (#1013)

  • blackd 现在可以在提供 X-Diff 头部时输出源代码格式的差异 (#969)

19.3b0

  • 新选项 --target-version 用于控制 Black 格式化的代码应针对的 Python 版本 (#618)

  • 已弃用 --py36(请使用 --target-version=py36 代替)(#724)

  • Black 不再规范化数字文字以包含 _ 分隔符 (#696)

  • del 语句现在被拆分成多行 (#698)

  • 类型注释在函数签名中不再被修改

  • 改进了格式化深度嵌套的数据结构的性能 (#509)

  • Black 现在能够在 Windows 上正确地并行格式化多个文件 (#632)

  • Black 现在以原子方式创建缓存文件,这使得它可以用于并行管道(如 xargs -P8)(#673)

  • Black 现在能够正确地缩进以前使用制表符格式化的文件的注释 (#262)

  • blackd 现在支持 CORS (#622)

18.9b0

  • 数字文字现在由 Black 格式化 (#452, #461, #464, #469)

    • 数字文字被规范化为在 Python 3.6+ 代码中包含 _ 分隔符

    • 添加了 --skip-numeric-underscore-normalization 来禁用上述行为,并将数字下划线保留为输入时的样子

    • 带有数字字面量中 _ 的代码将被识别为 Python 3.6+

    • 数字字面量中的大多数字母都将转换为小写(例如,在 1e10 中,0x01

    • 十六进制数字始终为大写(例如 0xBADC0DE

  • 添加了 blackd,有关更多信息,请参见 其文档 (#349)

  • 相邻的字符串字面量现在可以正确地拆分为多行 (#463)

  • 现在将尾随逗号添加到不适合一行导入的单个导入 (#250)

  • --check 对文件成功时,现在会填充缓存,这将加快对格式正确且未修改文件的连续检查 (#448)

  • 现在将删除文件开头的空白 (#399)

  • 修复了对 pweaveSpyder IDE 特殊注释的混淆 (#532)

  • 修复了在解包大型元组时格式不稳定的问题 (#267)

  • 修复了对带有重命名的 __future__ 导入的解析 (#389)

  • 修复了 # fmt: off 的作用域,该作用域直接位于 yield 和其他节点之前 (#385)

  • 修复了带有默认参数的 lambda 表达式的格式 (#468)

  • 修复了 async for 语句:Black 现在不再将它们拆分为单独的行 (#372)

  • 注意:Vim 插件不再将 ,= 注册为默认和弦,因为它被证明是一个糟糕的想法 (#415)

18.6b4

  • 热修复:当多个注释直接位于 # fmt: off 之前时,不要冻结 (#371)

18.6b3

  • 类型存根文件 (.pyi) 现在在常量之后添加了空行 (#340)

  • # fmt: off# fmt: on 现在更加可靠

    • 它们现在也适用于括号对 (#329)

    • 它们现在可以跨函数/类边界正确地工作 (#335)

    • 当缩进块以空行或未对齐的注释开头时,它们现在可以正常工作 (#334)

  • 使 Click 在无效的环境中不失败;请注意,Click 是正确的,但当处理 Python 源代码时,我们可能需要访问非 ASCII 文件路径的可能性很低 (#277)

  • 修复了对包含引号的插值表达式的 f 字符串格式不当的问题 (#322)

  • 修复了在文件中找到长列表字面量时不必要的减速

  • 修复了具有许多同级元素的 AST 节点上的不必要的减速

  • 修复了在字符串规范化过程中吞噬反斜杠

  • 修复了由于指向项目目录外部的符号链接导致的崩溃 (#338)

18.6b2

  • 添加了 --config (#65)

  • 添加了 -h,相当于 --help (#316)

  • 修复了在使用 -S 时格式不当的未修改文件缓存

  • 修复了字符串解包中的额外空格 (#305)

  • 修复了空三引号字符串的格式 (#313)

  • 修复了在没有注释的行上,注释放置计算中的不必要的减速

18.6b1

  • 热修复:不要在 stdout 上输出面向人类的信息 (#299)

  • 热修复:不要在非零返回值代码上输出蛋糕表情 (#300)

18.6b0

  • 添加了 --include--exclude (#270)

  • 添加了 --skip-string-normalization (#118)

  • 添加了 --verbose (#283)

  • 现在,--diff 中的标头输出实际上符合统一 diff 规范

  • 修复了将长的琐碎赋值包装在不必要的括号中的问题 (#273)

  • 修复了当一行包含多行字符串时不必要的括号 (#232)

  • 修复了如果使用旧版本的 Click,stdin 处理无法正常工作的问题 (#276)

  • Black 现在在原地格式化文件时保留行尾 (#258)

18.5b1

  • 添加了 --pyi (#249)

  • 添加了 --py36 (#249)

  • Python 语法 pickle 缓存与格式缓存一起存储,使 Black 可以在 site-packages 不可写入的环境中工作 (#192)

  • Black 现在在类级文档字符串(和/或字段)和第一个方法之后强制执行 PEP 257 空行

  • 修复了在从大型表达式中的行拆分中省略的尾随项中存在独立注释时产生的无效代码 (#237)

  • 修复了在 # fmt: off 部分中删除可选括号的问题 (#224)

  • 修复了在非常长的导入中,星号被错误地包装在可选括号中时产生的无效代码 (#234)

  • 修复了在从大型表达式中的行拆分中省略的尾随项中移动内联注释时,格式不稳定的问题 (#238)

  • 修复了如果不存在类文档字符串或字段,则在类声明和第一个方法之间存在额外的空行 (#219)

  • 修复了在函数签名和内部函数或内部类之间存在额外的空行 (#196)

18.5b0

  • 调用链现在根据 流畅接口 样式进行格式化 (#67)

  • 数据结构字面量(元组、列表、字典和集合)现在也始终像导入一样在不适合单行时爆炸 (#152)

  • 切片现在根据 PEP 8 进行格式化 (#178)

  • 现在,在赋值和返回值语句的右侧也会自动管理括号 (#140)

  • 数学运算符现在使用它们各自的优先级来分隔多行表达式 (#148)

  • 现在,在以括号开头或结尾且仅包含单个运算符的表达式上省略了可选括号 (#177)

  • 现在删除了类定义中的空括号 (#145, #180)

  • 字符串前缀现在已标准化为小写,并且 u 仅在 Python 3.6+ 代码和带有 unicode_literals 未来导入的 Python 2.7+ 代码中删除 (#188, #198, #199)

  • 类型存根文件 (.pyi) 现在以与 PEP 484 一致的样式进行格式化 (#207, #210)

  • 现在将增量报告对许多文件的重新格式化进度

  • 修复了尾随项(带括号的内容)在缩进减少的结束括号之后被不必要地爆炸成它们自己的行的问题 (#119)

  • 修复了有时在导入中留下的无效尾随逗号 (#185)

  • 修复了在使用多对可删除括号时,格式不确定的问题 (#183)

  • 修复了在长赋值中,多行字符串被不必要地包装在可选括号中的问题 (#215)

  • 修复了未拆分仅包含单个名称的长 from-导入

  • 修复了 Python 3.6+ 文件发现,方法是还查看带有解包的函数调用。这修复了如果在带有星号的函数签名和带有星号的函数调用中都使用尾随逗号,则格式不确定的问题,但前者将重新格式化为单行。

  • 修复了处理可选括号时发生的崩溃 (#193)

  • 修复了“is”、“is not”、“in”和“not in”未被视为拆分目的的操作符的问题

  • 修复了遇到失效的符号链接时发生的崩溃

18.4a4

  • --check时不再填充缓存 (#175)

18.4a3

  • 添加了“缓存”功能;已经重新格式化且磁盘上没有更改的文件将不再重新格式化 (#109)

  • --check--diff不再互斥 (#149)

  • 泛化了星号表达式处理,包括双星号;这修复了乘法导致表达式对尾随逗号“不安全”的问题 (#132)

  • Black不再强制在控制流语句后面添加空行 (#90)

  • Black现在像isort的“模式3+尾随逗号”一样拆分导入 (#127)

  • 修复了独立注释关闭代码块时的注释缩进问题 (#16, #32)

  • 修复了独立注释在紧接类、def或装饰器之前时会收到额外空行的问题 (#56, #154)

  • 修复了--diff没有显示完整路径的问题 (#130)

  • 修复了在函数调用中解析星号和双星号之后的复杂表达式的错误 (#2)

  • 修复了在lambda参数中逗号处无效拆分的问题 (#133)

  • 修复了缺少三元表达式拆分的问题 (#141)

18.4a2

  • 修复了解析未对齐的独立注释的问题 (#99, #112)

  • 修复了字典解包在字典字面量中的位置问题 (#111)

  • Vim插件现在也适用于Windows

  • 修复了在字符串中遇到不必要的转义引号时格式化不稳定的问题 (#120)

18.4a1

  • 添加了--quiet (#78)

  • 添加了自动括号管理 (#4)

  • 添加了pre-commit集成 (#103, #104)

  • 修复了在--check中使用多个文件时报告的问题 (#101, #102)

  • 修复了从原始字符串中删除反斜杠转义的问题 (#100, #105)

18.4a0

  • 添加了--diff (#87)

  • 在所有分隔符之前添加换行符,除了逗号之类的特殊情况,以更好地符合PEP 8 (#73)

  • 将字符串字面量标准化为几乎在所有地方使用双引号 (#75)

  • 修复了嵌套括号表达式中独立注释的处理;Black不再会生成超长的行或将所有独立注释放在表达式的末尾 (#22)

  • 修复了18.3a4的回归问题:不在具有尾随空格的空行上崩溃 (#80)

  • 修复了18.3a4的回归问题:# yapf: disable用作尾随注释会导致Black不输出文件剩余部分 (#95)

  • 当在格式化多个文件时按下CTRL+C,Black不再会因为大量与asyncio相关的异常而崩溃

  • 在模块级别只允许最多两个空行,在函数内只允许单个空行 (#74)

18.3a4

  • # fmt: off# fmt: on已实现 (#5)

  • 自动检测格式化文件中已弃用的Python 2形式的print语句和exec语句 (#49)

  • 在类型化函数参数的默认值中使用正确的空格以表示复杂表达式 (#60)

  • 仅在使用–check时返回退出代码1 (#50)

  • 不要从方括号索引中删除单个尾随逗号 (#59)

  • 如果前一个因子叶节点不是数学运算符,则不要省略空格 (#55)

  • 如果它是第一个参数,则在关键字参数解包中省略多余的空格 (#46)

  • Sphinx自动属性注释中省略多余的空格 (#68)

18.3a3

  • 不要删除括号表达式之外的单个空行 (#19)

  • 添加了将格式化从stdin管道到stdin的功能 (#25)

  • 恢复了使用旧版async作为名称的格式化代码功能 (#20, #42)

  • 对numpy风格数组索引的处理更完善 (#33, 再次)

18.3a2

  • 更改了二元运算符的位置,使其出现在行的开头而不是结尾,遵循PEP 8的最新更改 (#21)

  • 在拆分时忽略空的括号对。这避免了非常奇怪的格式 (#34, #35)

  • 如果函数调用只有一个参数,则删除尾随逗号

  • 如果顶层函数由注释隔开,则不要在上层函数之后添加四个空行

  • 修复了导入时换行符格式化不稳定的问题

  • 修复了如果最后一个语句是简单语句,则会将后记独立注释意外折叠到最后一个语句中的问题 (#18, #28)

  • 修复了numpy风格数组索引中缺少空格的问题 (#33)

  • 修复了基于星号的一元表达式之后出现多余空格的问题 (#31)

18.3a1

  • 添加了--check

  • 仅在函数签名和调用中添加尾随逗号,前提是这样做是安全的。如果文件是Python 3.6+,则始终安全,否则仅在签名或调用中没有使用*args**kwargs时安全。 (#8)

  • 修复了相对导入中点号的无效间距问题 (#6, #13)

  • 修复了在for循环中解包的变量中逗号之后的无效拆分问题 (#23)

  • 修复了带括号的集合表达式中的多余空格问题 (#7)

  • 修复了开括号之后和默认参数中的多余空格问题 (#14, #17)

  • 修复了当操作数为复杂表达式时,一元运算符之后的出现多余空格的问题 (#15)

18.3a0

  • 第一个发布版本,祝您2018年蛋糕日快乐!

  • alpha质量

  • 日期版本 (参见: https://calver.org/)