Visual Studio扩展代码完成 - 多个文件数据

时间:2013-08-26 21:09:10

标签: visual-studio-2012

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

与C#等语言一样,我隐式地在多个文件之间共享代码。这意味着,为了编写完整的一个文件,我需要知道其他文件的内容。更具体地说,虽然我可以简单地遍历项目和项目项目并破解文件,但这是一个次优的解决方案。例如,我无法编写用户所做的完整未保存更改。另一方面,我已经做了很多处理工作,或者解析内容以填充用户的语法高亮请求等等,我不想复制那些工作。

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

1 个答案:

答案 0 :(得分:2)

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

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

  • IVsRunningDocumentTable::FindDocument这会获取一个文件路径并返回一个代表该文件的cookie(如果它当前处于打开状态(Example
  • IVsRunningDocumentTable::GetDocumentInfo这会获取Cookie并返回IVsTextLines个实例(Example
  • IVsEditorAdaptersFactoryService::GetDataBuffer获取IVsTextLines并返回ITextBufferExample