我已经为我的工作室的专有脚本语言编写了Visual Studio 2008的基本语言服务扩展。它工作得很好,我已经实现了一个基本的符号表来跟踪脚本定义和调用,允许goto定义功能。
我遇到的问题是我只知道如何解析当前的活动视图,并且我想扫描整个解决方案的内容,以便用户可以转到文件中定义的脚本的定义。还没有打开并解析。我已经想出如何生成解决方案中所有文件的列表,但现在我需要创建一个新的Microsoft.VisualStudio.Package。源,它需要一个Microsoft.VisualStudio.TextManager.Interop。 IVsTextLines ,我不知道如何根据我的文件创建一个新的。
也许我以错误的方式解决问题,有人可以指出我更好的方法来使语言服务解析文件。
此致 科林
答案 0 :(得分:0)
我发现Visual Studio需要一个新Source的原因是它保留了它们的内部列表,它们就像是编辑器保存的文本文件的视图。
我得出的结论是,关闭的文件不需要IVsTextLines或者要输入到源文件的VS内部列表中,因为我没有直接对它们进行任何操作,在这种情况下我所关心的只是构建符号表及其对应的TextSpan。所以我为我的解析器创建了一个新的API,它只接受了一个字符串并构建了我的AST,而不是从ParseRequest获取文本,只担心我需要记录的特定类型的符号。然后我把它推到了BackgroundWorker中。
所以我想我是以错误的方式解决问题。虽然看起来很奇怪但我不能只触发一个文件在Source列表中打开。
有趣的是,我在他们的支持论坛上向微软提出了这个问题,他们建议我必须为他们购买一些服务和支持计划来回答我的问题。