Error Lens 行尾无提示?先别怪插件,查查诊断数据的“上游”

安装完 Error Lens 插件,满心期待代码行尾能直接显示报错,结果却一片空白?先别急着怀疑插件,问题很可能不在它身上。记住一个核心原则:Error Lens 本身并不检查代码。它的角色更像一个“信息展示牌”,只负责把 TypeScript Server、ESLint、Pylance 这些底层工具上报的诊断信息,“贴”到你正在编辑的代码行旁边。如果行尾空空如也,那首先意味着——它没拿到可以展示的数据。
诊断数据源:语言服务器跑起来了吗?
一个典型的场景是:代码编辑器里明明有红色的波浪线,Problems 面板也列出了错误,但行尾就是没有任何提示。这几乎可以断定,是语言服务没有正常启动或工作。
该怎么排查?可以顺着下面这个思路走:
- 看状态栏:首先留意 VSCode 右下角的状态栏。这里应该显示当前文件的编程语言模式,比如
TypeScript、Python (Pylance)或Ja vaScript (Volar)。如果显示的是Plain Text,那就需要手动点击它,切换到正确的语言模式。 - 查开发者工具:按下
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(Mac),运行命令Developer: Toggle Developer Tools,打开开发者工具。在 Console(控制台)标签页里,搜索language server或failed to start等关键词,看看有没有语言服务器启动失败的日志。 - 确认扩展:确保对应的语言扩展已经安装并启用。例如,Python 项目通常需要安装 Microsoft 官方的
Python扩展或Pylance;对于 TypeScript/Ja vaScript 项目,则依赖于 VSCode 内置的TypeScript and Ja vaScript Language Features功能,检查一下它是否被意外禁用。另外,对于 TypeScript 项目,可以检查设置中的typescript.preferences.includePackageJsonAutoImports选项,将其设为auto有时有助于语言服务更好地工作。
只显示错误,警告和信息去哪了?调整严重度设置
如果行尾只出现了红色的错误(Error)提示,但黄色的警告(Warning)和蓝色的信息(Info)却不见了,这通常不是故障,而是插件的默认设计——为了避免信息过载,初始设置只渲染最高级别的错误。
想让所有级别的诊断信息都显示出来,需要手动修改配置:
- 打开 VSCode 的
settings.json文件。 - 添加或修改这一行配置:
"errorLens.severity": ["error", "warning", "info"]。 - 这里有个关键细节:值必须是一个字符串数组,像
"error,warning"这样用逗号分隔的字符串是无效的。 - 修改完成后通常无需重启编辑器,但对于已经打开的文件,可能需要触发一次诊断刷新才能生效,比如保存一下文件、切换标签页、或者运行
Developer: Restart Language Server命令。
提示文字错位或太长?检查编辑器渲染设置
有时提示文字会跑到下一行,或者把代码遮得严严实实,这多半是编辑器视图渲染的问题,尤其是软换行(Word Wrap)和缩进格式在作祟。
可以尝试以下调整:
- 关闭软换行:在设置中将
"editor.wordWrap"设为"off"(可以在用户设置或工作区设置中修改)。 - 统一缩进:确保
"editor.detectIndentation"设置为true,然后对当前文件执行Editor: Reindent Lines命令(快捷键通常是Shift+Alt+F)来重新规范化缩进。 - 限制提示长度:如果提示信息本身太长,可以在设置中配置
"errorLens.maxMessageLength": 60来截断过长的信息(数字 60 可以根据需要调整,但注意别设得太小,以免丢失关键内容)。 - 排除插件冲突:如果问题依旧,可以尝试临时禁用其他可能影响代码装饰显示的插件,例如
Bracket Pair Colorizer、Highlight Matching Tag等,以排除插件叠加带来的干扰。
错误代码已删,提示为何还在?理解 LSP 的诊断缓存
已经删除了报错的代码行,但行尾的错误提示却像“幽灵”一样悬停不散?这通常不是 Error Lens 卡住了,而是底层的语言服务器(如 TypeScript、Pylance)存在诊断缓存或更新延迟。
可以尝试手动触发诊断更新:
- 保存当前文件。
- 将光标移出当前行再移回。
- 运行
Developer: Restart Language Server命令来重启语言服务器。 - 对于 TypeScript 项目,在极少数情况下,关闭
typescript.preferences.useSemanticColoring设置可能有助于缓解诊断延迟。
需要理解的是,诊断信息何时更新、何时清除,其节奏主要由语言服务器协议(LSP)和具体的语言服务决定。Error Lens 只是忠实地反映它接收到的数据,因此不能指望错误提示会“立刻消失”。
说到底,Error Lens 只是一个“搬运工”。你在行尾看到的每一个提示,其背后都依赖一个正在正常运行的语言服务器或 Linter。如果这些“上游”工具没有正确配置或启动,那么 Error Lens 安装得再顺利,也只是一个没有内容的空壳。因此,排查行尾无提示的问题,第一步永远是:确认你的语言环境是否已经准备就绪。
