如何让VS Code保存文件时真正执行Ruff格式化文档功能?
解决VS Code保存时Ruff格式化与手动操作不一致的问题
问题原因
保存文件时,你的配置除了触发Ruff的格式化操作,还额外执行了代码修复动作:source.fixAll和source.organizeImports。其中Ruff的F401规则(检测未使用导入)会自动移除未被引用的import os和import abc;而手动执行「Ruff: Format document」仅执行纯格式化逻辑(如调整引号、添加空行),不会触发lint修复操作,这就是两者结果差异的核心原因。
解决方案
方案1:移除保存时的额外代码修复动作
修改settings.json中的editor.codeActionsOnSave配置,注释或删除source.fixAll和source.organizeImports,让保存时仅执行Ruff格式化:
"[python]": { "editor.formatOnSave": true, "editor.formatOnSaveMode": "file", "editor.defaultFormatter": "charliermarsh.ruff", "editor.tabSize": 4, "editor.insertSpaces": true, "editor.codeActionsOnSave": { // 移除以下两行,避免保存时执行lint修复 // "source.fixAll": "explicit", // "source.organizeImports": "explicit" } },
方案2:保留代码修复但禁用未使用导入移除规则
如果你需要保留source.fixAll或source.organizeImports的其他功能,可通过Ruff配置禁用F401规则:
方法A:项目级配置(推荐)
在项目根目录创建ruff.toml文件,添加以下内容:
[lint] ignore = ["F401"]
方法B:VS Code全局配置
在settings.json中添加Ruff lint参数:
"ruff.lint.args": ["--ignore=F401"]
完成上述配置后,保存文件时的格式化结果会和手动执行「Ruff: Format document」完全一致,既保留引号替换、空行调整的格式化效果,也不会移除未使用的导入语句。
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

