VSCode本身不检测逻辑错误,所谓“自动检测”依赖ESLint等插件组合及正确配置:需匹配语言模式、配置项目级规则文件(如.eslintrc.cjs)、启用eslint.enable,且TypeScript项目须开启strict模式才能捕获类型流逻辑问题。

VSCode 本身不检测逻辑错误,所谓“自动检测代码错误”全靠插件组合实现——ESLint 是核心守门员,但必须配对 Prettier、正确语言模式和项目级配置,否则标红不准、修复失效、甚至误报漏报。
ESLint 装了却没标红?先看这三件事
常见错误现象:No ESLint configuration found、修改后无波浪线、保存不自动修复、undefined 变量不报错。
- 确认右下角状态栏显示的是
JavaScript React或TypeScript React,不是纯JavaScript——后者会跳过 JSX/TSX 中的 props 校验和 hook 规则 - 项目根目录必须有配置文件:
.eslintrc.cjs(推荐)或.eslintrc.js;纯.eslintrc(无后缀)会被忽略 - 检查
settings.json是否禁用了关键项:"eslint.enable": true和"eslint.format.enable": false(后者必须关,否则会和 Prettier 冲突)
Prettier 和 ESLint 怎么共存不打架
使用场景:保存时既检查语法又格式化代码,但不希望 Prettier 把 === 改成 ==,也不希望 ESLint 自己去动缩进。
- 在
.prettierrc中定义格式细节:{"tabWidth": 2, "semi": false, "singleQuote": true} - 在
.eslintrc.cjs中显式关闭所有格式类规则:extends: ["eslint:recommended", "prettier"],并安装eslint-config-prettier - 确保
settings.json中只设一个默认 formatter:"editor.defaultFormatter": "esbenp.prettier-vscode",且"editor.formatOnSave"开启
为什么变量名拼写错误不标红
这是设计使然,不是插件失效。Code Spell Checker 默认只检查字符串字面量、注释和 Markdown 文本,不扫描变量名、函数名、属性名。
- 想查
const userNmae = 'test'这类低级拼写错误?得靠 ESLint 的no-undef(未定义变量)和no-unused-vars(未使用变量),不是拼写插件 - 如果注释里写了
// this fucntion does...却没标红,检查cSpell.language是否包含"en",以及cSpell.enabled是否为true - 项目专属词如
zustand、vitepress必须加进.cspell.json的words字段,右键「Add to workspace dictionary」才生效
逻辑错误真没法自动报?那要看你用什么语言
ESLint 对 if (user.role === 'admin') { ... } else { api.deleteUser() } 这种业务逻辑完全沉默——它不知道 role 是否可能为空、deleteUser 是否该在 else 分支执行。
- TypeScript 项目开启
"strict": true后,tsserver才能捕获user?.role解构空值、switch漏分支等类型流逻辑问题 - JavaScript 项目建议补上
eslint-plugin-react-hooks(防 hook 依赖错误)和eslint-plugin-jsx-a11y(防可访问性逻辑缺陷),它们覆盖的是特定上下文中的“逻辑” - 终端报错如
Cannot read property 'map' of undefined,靠的是运行时,不是静态分析;想提前发现,得写单元测试或用ts-jest+ 类型断言
最常被忽略的一点:语言服务器是否真正加载成功。按 Ctrl+Shift+P 运行 Developer: Restart Language Server,比重装插件管用十倍——尤其当你刚切完分支、改完 tsconfig.json 或新增了 jsx 配置时。


















