VSCode悬浮提示无法直接过滤_开头私有属性,需依赖语言服务器配置:TypeScript需用/* @private /注释+保存刷新;Python需用Sphinx元标记或调整Pylance设置。

VSCode 悬浮提示里怎么过滤掉以 _ 开头的私有属性
VSCode 原生不提供“隐藏私有属性”的开关,editor.hover.enabled 控制的是整个悬停是否显示,不是内容筛选。真正影响私有属性是否出现在 hover 中的,是语言服务器(如 TypeScript Server、Pylance)的语义解析逻辑和注释规则——它们默认把 _ 开头的字段/方法当作私有成员,但**是否隐藏、是否展示、是否加灰显式标注,取决于具体语言服务的实现和配置**。
常见场景下,你看到私有属性仍被列出,往往是因为:
- TS/JS 项目没启用严格私有检查(
noImplicitAny或stripInternal不起作用) - Python 的
_private_attr被 Pylance 当作常规变量处理(它不强制隐藏,只靠 docstring 或类型注解暗示) - JSDoc 缺少
@private标记,或用了//单行注释而非块注释
TypeScript 中让 hover 隐藏 _ 开头成员的关键配置
TypeScript Server 本身不会主动“隐藏”私有字段,但它支持通过 JSDoc + 编译器选项控制文档生成行为;VSCode 悬浮提示会继承这些语义标记。要让 hover 中不出现 _internal 这类字段,得组合两步:
- 在字段或方法上方添加
/** @private */注释(必须是紧贴的块注释,不能隔空行) - 确保
jsconfig.json或tsconfig.json中启用了"stripInternal": true(仅影响生成的 d.ts,对 hover 无直接作用),而真正起效的是 VSCode 内置的 JSDoc 解析逻辑:只要带@private,hover 就会跳过该条目 - 别用
private _x: number类语法——TypeScript 的private修饰符只限制访问,不参与 hover 过滤;只有 JSDoc 的@private才被 VSCode hover 渲染器识别
Python 中如何让 Pylance 不在 hover 里显示 _ 开头变量
Pylance 默认把 _name 视为“约定私有”,但不会自动从 hover 中剔除;它更依赖 docstring 的结构化描述。想让它不显示,目前最可靠的方式是:
- 不写
Args:或Attributes:字段中以_开头的项(比如不要写_cache (dict): internal cache) - 改用
"""... :meta private:"""这种 Sphinx 风格的元标记(Pylance 支持部分 Sphinx directive),但注意:它只在保存后刷新 hover,且需配合"python.analysis.extraPaths"等路径设置才能稳定生效 - 禁用 Pylance 的 auto-import 提示干扰:设
"python.analysis.autoSearchPaths": false,避免因路径扫描带出未声明的私有符号
为什么改了 JSDoc / docstring 悬浮提示还不更新
VSCode 的 hover 内容不会实时监听注释变更——它依赖语言服务器的缓存重建。你改完 /** @private */ 后,必须执行以下任一操作,hover 才会刷新:
- 保存文件(
Ctrl+S) - 手动触发一次 hover(
Ctrl+K Ctrl+I)并等待 LSP 响应完成 - 如果刚打开大项目,等右下角语言服务器图标停止旋转再试
最容易被忽略的是:某些 AI 插件(如 Copilot、Sesame AI)会劫持 hover 渲染通道,即使你写了正确的 @private,它们也可能绕过原生逻辑强行展示所有字段。临时禁用这类插件是快速验证是否被覆盖的最有效手段。











