1

我正在寻找在 Visual Studio 中为自定义语言创建代码完成。我已经有了一些更简单的编辑器交互的代码,比如语法高亮和大括号匹配。现在我想转到代码完成。但我遇到了一个小问题——数据源。

就像在 C# 之类的语言中一样,我在多个文件之间隐式共享代码。这意味着,为了编写完整的一个文件,我需要知道其他文件的内容。更具体地说,虽然我可以简单地遍历项目和项目项并破解打开文件,但这是一个次优的解决方案。例如,我无法对用户所做的完整未保存更改进行编码。另一方面,我已经做了很多处理工作来对内容进行词法分析或解析来满足用户对语法突出显示等的请求,我不想重复这项工作。

如何访问项目中其他文件的内容,并获取它们的 ITextBuffers,以便我可以重新使用我已经完成的工作?

4

1 回答 1

2

没有ITextBuffer提供存在于磁盘上但当前未在 Visual Studio 中打开的文件。ITextBuffer可以使用 . 为任意文件创建一个实例ITextDocumentFactoryService::CreateAndLoadDocument。这需要一个字符串,并将返回一个ITextDocument实例,您可以从中访问ITextBuffer.

为了找到ITextBuffer当前打开的现有文件,您可以执行以下操作

  • IVsRunningDocumentTable::FindDocument 这需要一个文件路径并返回一个表示该文件的 cookie,如果它当前是打开的(示例
  • IVsRunningDocumentTable::GetDocumentInfo这需要一个 cookie 并返回一个IVsTextLines实例(示例
  • IVsEditorAdaptersFactoryService::GetDataBuffer接受一个IVsTextLines并返回一个ITextBuffer示例
于 2013-08-26T21:21:35.900 回答