VS Code 随附了一个名为 typescript-basics
的扩展,其中包含了诸如控制流构造和基本声明等静态代码片段定义。当 TS Server 为完成请求提供服务时,它包括一个布尔开关,用于控制这些代码片段是否添加到其响应中的完成项中,但它无法确定哪些片段与请求的位置相关——要么全部包含,要么一个都不包含。这导致了相当糟糕的用户体验,例如在类的主体中提供 for-loop:
但是,如果不禁用有用的方法声明代码片段,我们也无法禁用它:
同样令人尴尬的是,方法声明代码片段也会在类之外提供:
现在,由于 TS Server 具有生成代码片段的原生支持,我们可以轻松做得更好。最简单的更改是将这些代码片段从 typescript-basics
复制到 TS Server,并让 TS Server 在给定的响应中仅包含相关的代码片段。(我说“复制”而不是“移动”,以免改变完全禁用了 TS Server 的 JS/TS 用户的行为的用户的行为,或者在 TS Server 不可用的时候。)另一种方法可能是让 TS Server 的完成响应包含某种过滤信息,而不是一个全有或全无的开关来混合来自 typescript-basics 源的代码片段,但这对我来说听起来更复杂、更容易出错,并且向后兼容性较差——但总的来说,我愿意接受其他解决相同问题的方法。
4条答案
按热度按时间5gfr0r5j1#
协议当前是否有方法可以表达“此完成项目是一个片段”,以便更改图标?也许它是由光标标记的存在所暗示的?
ztmd8pv52#
是的:
TypeScript/src/server/protocol.ts
第2273行 in 449aaa1
| | isSnippet?: true; |
bbuxkriu3#
这听起来对我来说是正确的方法。
wribegjk4#
编辑器会议笔记:
CompletionEntry
。