vscode代码检查不生效主因是lsp未运行、配置文件未放项目根目录或工具未装入项目;需确认lsp启动状态、使用真实文件测试、严格按规范命名配置文件(如.eslintrc.cjs、pyproject.toml中[tool.ruff]),并配置codeactionsonsave而非formatonsave。

VSCode 里代码检查不生效,90% 是因为 LSP(语言服务器)没跑起来、配置文件放错位置,或者工具根本没装进项目里。不是插件没点启用,而是底层链路断了。
为什么保存后没报错?检查 LSP 是否真在运行
VSCode 自身不检查代码,全靠外部语言服务器(比如 pylsp、eslint、ruff)提供诊断能力。装了插件≠LSP 就启动了。
- 打开命令面板(
Ctrl+Shift+P),输入Developer: Toggle Developer Tools,看 Console 有没有Language client is not ready或Cannot find module类报错 - 确保你打开的是一个真实文件(比如
main.py),不是Untitled-1—— 多数 LSP 拒绝在无路径的临时文件里工作 - Python 项目必须有
pyproject.toml或setup.py,否则ms-python.python扩展可能连源码根都推不出来,import错误就标不出
配置文件必须放在项目根目录,且命名严格匹配
ESLint、Ruff、Pylint 都只认项目根下的配置文件,不会往上或往下跨目录找。名字错一个字母,就等于没配。
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
-
ESLint:只识别.eslintrc.js、.eslintrc.cjs、eslint.config.js(v8.50+),不认.eslintrc.json(旧版兼容但不推荐) -
Ruff:只读pyproject.toml里的[tool.ruff]段,不认ruff.toml(已废弃) -
Pylint:默认找.pylintrc或pyproject.toml中的[tool.pylint],但后者支持有限,建议用前者 - 执行
npx eslint --init或ruff check --init生成配置,比手写更可靠
Python 的 ruff 和 pylint 路径逻辑完全不同
同一段 from utils import helper,ruff 不报错、pylint 报 import-error,大概率是两者对源码根的理解不一致。
-
ruff默认只扫描当前文件所在目录,想让它识别src/utils/,必须在pyproject.toml里写:[tool.ruff]<br>src = ["src", "."]
-
pylint默认把打开文件的父目录当sys.path[0],要加src,得在.pylintrc里配:[MESSAGES CONTROL]<br>init-hook='import sys; sys.path.append("./src")' - 别混用:
ms-python.python扩展默认走pylsp,它优先读pyproject.toml;而独立装的ruff插件走自己的通道,规则互不影响
codeActionsOnSave 不等于 formatOnSave
很多人开了 editor.formatOnSave 就以为 lint 也自动修了,其实它只调格式化器(如 black),不触发 linter 的 auto-fix。
- 要保存时自动修复 lint 问题,必须配:
"editor.codeActionsOnSave": {<br> "source.fixAll": true<br>} - 但注意:
source.fixAll是泛指令,不同语言服务器支持程度不同。Ruff 支持,Pylint 基本不支持 auto-fix,ESLint 看规则是否标记为fixable - 更稳妥的做法是单独开:
"editor.codeActionsOnSave": {<br> "source.fixAll.ruff": true<br>}(前提是装了ruff-vscode插件)
最常被忽略的点:所有配置都依赖「项目根目录」这个概念。VSCode 工作区必须打开整个项目文件夹,不能只打开单个文件或子目录——否则 .eslintrc.cjs 和 pyproject.toml 全部失效。










