必须启用 editor.codeactionsonsave 并配置为 {"source.fixall.eslint": true},同时确保 eslint.validate 覆盖目标语言、项目存在生效的 eslint 配置文件且插件正确安装重启。

装了插件但保存不自动修?不是插件没装好,而是 editor.codeActionsOnSave 没开、eslint.validate 没覆盖目标语言、或项目里压根没生效的 .eslintrc.* 文件。
必须启用 editor.codeActionsOnSave 才能保存时自动修复
VSCode 1.80+ 已废弃 eslint.autoFixOnSave,现在唯一有效的开关是 editor.codeActionsOnSave。它不是“可选项”,而是触发自动修复的唯一路径。
- 在
settings.json中必须写成:"editor.codeActionsOnSave": { "source.fixAll.eslint": true } - 别写成
"source.fixAll": true——这会拉上 Prettier、TypeScript 等所有格式化器一起上,大概率冲突报错 - 也别写成
"source.fixAll.eslint": "explicit"——这只在手动按 Ctrl+(或 Cmd+)调出快速修复菜单时才生效,不响应保存 - 如果同时用了 Prettier,
editor.formatOnSave必须设为false,否则 ESLint 加完分号,Prettier 立刻删掉
eslint.validate 必须显式声明 vue 和 html 语言
默认只检查 .js 文件。哪怕你写了 <template></template> 或 <div class="foo">,也不会被校验——除非你告诉它这些也归 ESLint 管。
<ul>
<li>正确写法(支持 Vue 单文件组件):<pre class="brush:php;toolbar:false;">"eslint.validate": ["javascript", "typescript", "vue", {"language": "vue", "autoFix": true}]</pre>
</li>
<li>HTML 文件要参与校验,必须加:<code>{"language": "html", "autoFix": true},否则引号风格、空格等不会被修正
"eslint.validate": ["javascript"]——此时 .vue 文件完全不会触发 ESLinteslint.options.extensions 显式加上 ".ts" 和 ".tsx"
项目必须有真正生效的 ESLint 配置文件
插件装完不重启 VSCode,eslint.validate 很可能读不到 .vue 或 .html 文件;状态栏右下角没显示 “ESLint is running”,基本说明配置没加载成功。
- 确认配置文件存在且命名正确:
.eslintrc.js、.eslintrc.cjs、.eslintrc.json或package.json中的eslintConfig字段 - 运行
npx eslint --print-config src/App.js(替换为任意源文件路径),看输出是否含预期规则和fixable值 - 插件名必须是
ESLint(作者:Microsoft),不是eslint(小写)或其它同名插件;装完必须重启 VSCode 才生效 - 若用
eslint.config.js(ESLint v8.52+ 新格式),VSCode 插件需 ≥ v2.4.10 才支持
不是所有规则都支持自动修复,得看文档标不标 ✅ Fixable
eslint --fix 只能修带 fixable: "problem" 或 fixable: "style" 的规则。圈复杂度、依赖数组漏写、no-alert 这类逻辑型问题,ESLint 不会、也不能帮你改代码逻辑。
- 常用可修复规则:
semi、quotes、indent、no-trailing-spaces、no-unused-vars(部分情况) - 不可修复规则:
react-hooks/exhaustive-deps、vue/multi-word-component-names(它只在手动触发快速修复时给建议名,不静默重命名) - 验证某条规则是否当前可修复:在报错行按 Ctrl+.(Windows/Linux)或 Cmd+.(macOS),弹出菜单里出现
Fix 'xxx' problem才算真支持 - 规则配置必须是数组形式,例如
"semi": ["error", "always"];写成"semi": "error"在某些旧版本中会禁用修复能力
最常被忽略的一点:规则可修复 ≠ 项目配置让它可修复。即使文档标了 ✅,如果 parserOptions.parser 没配对(比如 Vue 3 项目没设 @typescript-eslint/parser),或者 eslint-plugin-vue 版本和 Vue 版本不匹配,那些规则根本不会运行,更谈不上修复。











