vscode本身不纠错,只展示eslint等校验器结果;减少格式报错需让格式化与校验规则对齐,禁用冗余格式化器,统一由eslint或prettier(配eslint-config-prettier)负责格式化,并确保语言模式正确、各语言使用对应格式化工具。

VSCode 本身不“纠错”,它只执行你配置的格式化器和校验器;报错来自 ESLint、prettier 或语言服务(如 rust-analyzer、intelephense),而 VSCode 只是把它们的结果展示出来。想减少格式报错,关键不是关掉提示,而是让格式化行为和校验规则对齐。
为什么保存后还报双引号/分号/缩进错误?
典型现象:按 Ctrl+S 保存,代码被自动加了分号、引号变双引号,但 ESLint 立刻标红报错 —— 这说明至少两个工具在打架。
-
Vetur默认用自己内置的 JS 格式化器(加双引号+分号),但它不读.eslintrc规则 -
Prettier格式化完,ESLint又按自己的规则检查,发现不一致就报错 -
editor.formatOnSave和editor.codeActionsOnSave同时启用,可能触发两次格式化 - 没关掉 VSCode 自带的
javascript.format.enable,它会在ESLint前插一脚
怎么让格式化和校验不冲突?
核心原则:只留一个“格式化执行者”,让它输出的结果刚好满足校验器的要求。
- 禁用所有冗余格式化器:
"javascript.format.enable": false, "vetur.format.defaultFormatter.js": "none", "vetur.format.defaultFormatter.ts": "none"
- 用
ESLint承担格式化职责:开启editor.codeActionsOnSave中的source.fixAll.eslint,并确保eslint.autoFixOnSave已废弃,改用这个新写法 - 如果要用
Prettier,必须配eslint-config-prettier插件,并在.eslintrc里把它放在 extends 最后一行,否则它的关闭规则不生效 - 对 Vue 文件,
eslint-plugin-vue必须启用,否则<template></template>里的 HTML 部分不会被ESLint检查
不同语言要分开处理,不能一套配置打天下
ESLint 只管 JS/TS/Vue,rustfmt 管 Rust,php-cs-fixer 或 intelephense 管 PHP —— 它们互不识别对方的规则文件。
- Rust 项目必须有
.rustfmt.toml,且 VSCode 设置中指定"[rust]": { "editor.defaultFormatter": "rust-lang.rust" } - PHP 项目若用
intelephense,需确认intelephense.format.enable为true,且没同时启用php-cs-fixer插件 - HTML 文件默认走
vscode-html-language-features,别装prettier或beautify去抢它的活,否则<pre class="brush:php;toolbar:false;"></pre>里内容会被意外换行 - XML 文件必须装
Red Hat XML扩展,并开启xml.format.enabled,否则右键“格式化文档”直接灰掉
最容易被忽略的一点:格式化器是否真的在运行,取决于当前文件的语言模式是否正确。右下角显示的是 Plain Text 还是 JavaScript,差一个字,整个校验链就断了 —— 这比规则写错更难排查。











