VS Code代码检查不生效主因是LSP未正确安装或启动、eslint配置缺失、Python路径解析错误及保存修复配置不当;需按语言装官方扩展、重启编辑器、在项目根配.eslintrc.*、明确ruff/pylint源码路径,并配置codeActionsOnSave而非仅formatOnSave。

VS Code 里代码检查不生效?先确认你装的是哪个 LSP
VS Code 本身不自带代码检查,靠的是语言服务器(LSP)——比如 pylsp、eslint、tsserver 或 rust-analyzer。装错或没启动对应服务,Ctrl+Shift+P → Developer: Toggle Developer Tools 里常能看到报错:Cannot find module 'eslint' 或 Language client is not ready yet。
实操建议:
- 打开命令面板(
Ctrl+Shift+P),输入Extensions: Install Extensions,按语言搜官方推荐扩展:Python 用ms-python.python,JS/TS 用dbaeumer.vscode-eslint(需额外装eslint包),Rust 用matklad.rust-analyzer - 扩展安装后,**重启 VS Code** —— 很多 LSP 不会热加载,尤其改了
settings.json后 - 打开一个真实文件(如
index.js),别在未保存的 Untitled-1 里测试,LSP 常因无文件路径拒绝启动
eslint 配置没反应?检查工作区根目录有没有 .eslintrc.* 文件
eslint 默认只在项目根目录下找配置文件,找不到就静默降级为无规则检查。你改了 settings.json 里的 eslint.enable 或 eslint.packageManager,但没配规则文件,编辑器照样不标红。
实操建议:
- 在项目根目录运行
npx eslint --init生成.eslintrc.cjs(推荐,兼容性好),别手动建空文件 - 确保
eslint是本地安装:npm install eslint --save-dev;全局安装(npm install -g eslint)在多项目时易冲突,VS Code 默认优先找本地 - 如果用了
pnpm或yarn pnp,在settings.json加上:"eslint.packageManager": "pnpm",否则找不到依赖
Python 代码检查总报错 import 不存在?pylint 和 ruff 的路径逻辑不一样
pylint 默认把当前打开文件所在目录当 sys.path 起点,而 ruff(通过 ms-python.python 集成)依赖 pyproject.toml 里的 [tool.ruff] src 设置。同一项目,一个提示 import-error,另一个完全不报,大概率是路径解析不一致。
实操建议:
- 用
ruff:在pyproject.toml里明确写src = ["src", "."],让其扫描源码根目录 - 用
pylint:在项目根加.pylintrc,设置init-hook='import sys; sys.path.append("./src")'(替换./src为你实际源码路径) - VS Code 的 Python 扩展默认启用
pylsp,它会读pyproject.toml或setup.py推断源码位置——如果没这些文件,手动在settings.json加:"python.defaultInterpreterPath": "./venv/bin/python"并确保虚拟环境已激活且含所需包
保存时自动修复失败?别只开 formatOnSave
"editor.formatOnSave": true 只调用格式化器(如 prettier),不是代码检查器。想保存时自动修 eslint 报的 semi、quotes 类问题,得单独配 eslint.codeActionOnSave。
实操建议:
- 在工作区
.vscode/settings.json中加:
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": ["javascript", "typescript", "vue"]
}
- 注意:
source.fixAll.eslint仅修eslint标记为 “fixable” 的规则(查规则文档看是否带 ✅);像no-console这类语义错误不会自动删console.log - 如果用了 Prettier + ESLint 组合,确保装了
eslint-config-prettier并禁用冲突规则,否则fixAll可能反复修改又报错
路径、LSP 状态、配置作用域(用户/工作区/文件夹)这三处出问题的概率加起来占八成。别急着调 settings.json 里的各种 flag,先打开命令面板运行 ESLint: Show Output Channel 或 Python: Show Language Server Output,日志里那几行红色文字,通常就是卡点。










