当插入符处于虚拟 space 时,为 Visual Studio 中的自定义语言提供智能感知
Provide intellisense for custom language in Visual Studio when caret is in virtual space
我正在为 visual studio 开发一个扩展,为自定义语言提供智能感知。
到目前为止,我是从这个 sample, more specifically this code 开始的。
遗憾的是,这个示例(以及我在 Internet 上看到的所有其他示例)在虚拟 space 方面存在问题。当光标放在这样一个虚拟的space时,用session.GetTriggerPoint(snapshot)
得到的triggerPoint
被设置回光标之前的非虚拟位置(据我所知, SnapshotPoint
只能表示非虚拟位置),这会导致错误定位的智能感知 window:
我该如何解决这个问题?
我试图了解它是如何在 roslyn 扩展中完成的,但是该代码非常复杂(似乎 ~5k LOC 和 ~100 类 只是为了自动完成)。
顺便说一下,我设法在 roslyn 中找到了负责此操作的 code:
if (this.TextView.Caret.Position.VirtualBufferPosition.IsInVirtualSpace)
{
// Convert any virtual whitespace to real whitespace by doing an empty edit at the caret position.
_editorOperationsFactoryService.GetEditorOperations(TextView).InsertText("");
}
我正在为 visual studio 开发一个扩展,为自定义语言提供智能感知。
到目前为止,我是从这个 sample, more specifically this code 开始的。
遗憾的是,这个示例(以及我在 Internet 上看到的所有其他示例)在虚拟 space 方面存在问题。当光标放在这样一个虚拟的space时,用session.GetTriggerPoint(snapshot)
得到的triggerPoint
被设置回光标之前的非虚拟位置(据我所知, SnapshotPoint
只能表示非虚拟位置),这会导致错误定位的智能感知 window:
我该如何解决这个问题? 我试图了解它是如何在 roslyn 扩展中完成的,但是该代码非常复杂(似乎 ~5k LOC 和 ~100 类 只是为了自动完成)。
顺便说一下,我设法在 roslyn 中找到了负责此操作的 code:
if (this.TextView.Caret.Position.VirtualBufferPosition.IsInVirtualSpace)
{
// Convert any virtual whitespace to real whitespace by doing an empty edit at the caret position.
_editorOperationsFactoryService.GetEditorOperations(TextView).InsertText("");
}