大纲视图节点悬停内容由语言服务器控制,无法通过settings.json配置;需满足语言模式正确、语言服务器已安装运行、代码含规范JSDoc或docstring三条件,缺一不可。

大纲视图的悬停信息由语言服务器控制,不能直接配置
VSCode 的大纲(Outline)视图中每个节点(如函数、类、变量)的悬停提示(Hover)内容,不是靠用户设置项或 settings.json 控制的,而是由当前文件对应的语言服务器(Language Server)在响应 textDocument/hover 请求时返回的。你看到的“function add(a: number, b: number): number”或 JSDoc 描述,都是服务器解析源码后主动提供的。
让悬停显示 JSDoc / docstring 的前提条件
要让大纲节点悬停时展示有意义的文档内容,得满足三个基础条件:
- 当前文件的语言模式正确(右下角显示
JavaScript、TypeScript、Python等,而非Plain Text) - 对应语言服务器已安装并运行(例如:TypeScript 用内置 TS Server;Python 必须装
Pylance或Python扩展) - 代码中实际写了符合规范的注释:
- JS/TS:用
/** ... */包裹的 JSDoc,且紧贴声明上方 - Python:用三引号
"""..."""写的 docstring,且位于函数/类定义正下方
- JS/TS:用
漏掉任意一条,悬停就只剩类型签名或空内容——这不是 VSCode 设置问题,是语言服务没拿到可渲染的信息。
为什么改了 JSDoc 悬停却不更新?
常见卡点有这几个:
-
jsconfig.json或tsconfig.json中禁用了"checkJs": true或"allowJs": true,导致 JS 文件不被 TS Server 全面解析 - Python 文件未启用 Pylance(而用了旧版
Python扩展),Pylance 才完整支持 Google/NumPy 风格 docstring 解析 - 注释写在了错误位置,比如 JSDoc 和函数声明之间夹了空行或其它语句,TS Server 就认为它不属于该函数
- 文件编码不是 UTF-8,特殊字符(如中文、emoji)导致解析中断,hover 返回空
自定义 hover 内容的唯一可行路径
如果你需要为私有语法、配置文件或内部 DSL 显示特定悬停文本,必须走扩展开发路线:
- 用
vscode-languageclient启动一个外部语言服务器 - 在服务器中监听
textDocument/hover请求 - 根据
position查到符号后,手动构造 Markdown 格式的响应体,例如:{"contents":{"kind":"markdown","value":"**自定义说明**\n- 来源:内部规范 v2.1\n- 推荐替代:`@new_api`"}}
普通用户改不了这个流程——VSCode 不提供“给大纲节点打补丁式 hover”的 API,所有渲染都经过 LSP 协议,绕不开语言服务器这一环。











