Visual studio 2012 Visual Studio扩展代码完成-多文件数据
我希望在VisualStudio中为自定义语言创建代码完成。我已经有了一些简单编辑器交互的代码,比如语法高亮显示和大括号匹配。现在我想转到代码完成。但我遇到了一个小问题——数据源 就像在C#这样的语言中一样,我在多个文件之间隐式共享代码。这意味着,为了完成一个文件的编码,我需要知道其他文件的内容。更具体地说,虽然我可以简单地遍历项目和项目项并打开文件,但这是一个次优的解决方案。例如,我无法编写用户所做的未保存的完整更改代码。另一方面,我已经做了大量的处理工作,对内容进行词法分析或解析,以满足用户对语法突出显示等的要求,我不想重复这项工作Visual studio 2012 Visual Studio扩展代码完成-多文件数据,visual-studio-2012,Visual Studio 2012,我希望在VisualStudio中为自定义语言创建代码完成。我已经有了一些简单编辑器交互的代码,比如语法高亮显示和大括号匹配。现在我想转到代码完成。但我遇到了一个小问题——数据源 就像在C#这样的语言中一样,我在多个文件之间隐式共享代码。这意味着,为了完成一个文件的编码,我需要知道其他文件的内容。更具体地说,虽然我可以简单地遍历项目和项目项并打开文件,但这是一个次优的解决方案。例如,我无法编写用户所做的未保存的完整更改代码。另一方面,我已经做了大量的处理工作,对内容进行词法分析或解析,以满足用户
如何访问项目中其他文件的内容,并获取它们的ITextBuffers,以便重新使用我已经完成的工作?没有为磁盘上存在但当前未在Visual Studio中打开的文件提供
ITextBuffer
。使用ITextDocumentFactoryService::CreateAndLoadDocument
可以为任意文件创建ITextBuffer
的实例。这将获取一个字符串并返回一个ITextDocument
实例,您可以从该实例访问ITextBuffer
要查找当前打开的文件的现有ITextBuffer
,可以执行以下操作
这将获取一个文件路径,并返回表示当前打开的文件的cookie()IVsRunningDocumentTable::FindDocument
这将获取一个cookie并返回一个IVsRunningDocumentTable::GetDocumentInfo
实例()IVsTextLines
获取一个IVSEditorAdapterFactoryService::GetDataBuffer
并返回一个IVsTextLines
()ITextBuffer
GetDocumentInfo
获取IVsTextLine
实例。我正在快速打字,但忘了它是作为对象
存储在该结构上的,而不是IVsTextLines
,需要一些施法魔法。@DeadMG第一个问题没有。如果您调用CreateAndLoadDocument
VS将不会连接现有的ITextBuffer
,如果它将来打开该文件。您将不得不放下它,然后简单地重新加载它。是的,这样做一点也不好玩(啊,事实上,问题的很大一部分似乎是你的意思,而不是。