
Ruff 默认会因尾部逗号(magic trailing comma)将函数参数自动换行;通过启用 format.skip-magic-trailing-comma = true 并同步禁用 isort 的 split-on-trailing-comma,即可保留单行函数签名。
ruff 默认会因尾部逗号(magic trailing comma)将函数参数自动换行;通过启用 `format.skip-magic-trailing-comma = true` 并同步禁用 isort 的 `split-on-trailing-comma`,即可保留单行函数签名。
Ruff 的格式化器(ruff format)遵循 PEP 8 风格指南中关于“可读性优先”的原则,当函数签名末尾存在逗号(如 c: int,)时,它会触发“魔法尾部逗号”(magic trailing comma)机制,强制将参数展开为多行结构——这是有意设计的行为,旨在提升长参数列表的可维护性。
但若你偏好紧凑风格(例如团队规范或代码审查要求),可通过配置全局禁用该行为。关键在于两个协同设置:
✅ 第一步:禁用格式化器的魔法尾部逗号逻辑
在 pyproject.toml 中启用 skip-magic-trailing-comma:
[tool.ruff.format] skip-magic-trailing-comma = true
⚠️ 注意:仅设置此项会导致与 isort(Ruff 内置的导入排序模块)冲突,触发如下警告:
warning: The isort option 'isort.split-on-trailing-comma' is incompatible with the formatter 'format.skip-magic-trailing-comma=true'...
这是因为 isort 默认也依赖尾部逗号判断是否拆分导入语句,二者语义冲突。
✅ 第二步:同步关闭 isort 的尾部逗号拆分行为
添加以下配置,确保导入语句也不因尾部逗号被拆分:
[tool.ruff.lint.isort] split-on-trailing-comma = false
完整推荐配置片段如下:
[tool.ruff.format] skip-magic-trailing-comma = true [tool.ruff.lint.isort] split-on-trailing-comma = false
配置生效后,运行 ruff format myfile.py,原函数:
def get_foo(a: object, b: tuple, c: int,) -> dict:
return {"result": a}将保持单行格式(尾部逗号仍被保留,但不再触发换行):
def get_foo(a: object, b: tuple, c: int,) -> dict:
return {"result": a}? 额外提示:
- 此配置不影响其他格式化规则(如缩进、空格、换行等),仅约束“是否因尾部逗号强制换行”;
- 若你使用
.ruff.toml而非pyproject.toml,配置路径完全一致; - 修改配置后建议运行
ruff check --fix+ruff format双重清理,确保 lint 与 format 行为一致。
通过这一组合配置,你既能维持代码简洁性,又能避免工具链内部警告,实现可预测、可控的格式化体验。

















