【问题标题】:Language Service: Is there a way to force parsing?语言服务:有没有办法强制解析?
【发布时间】:2012-03-17 11:01:54
【问题描述】:

我正在开发语言服务,希望用户键入代码后的解析速度更快。

现在我依赖于 MSDN 上记录的 ParseReason.CheckOnIdle 机制,但它通常在用户输入代码很长时间后才调用。有时将光标移动到另一行以更快地触发它会有所帮助。

我想做的是在检测到用户输入文件后强制解析文件。我能够检测到用户何时键入,但我不知道如何使用ParseRequest 触发解析器。

【问题讨论】:

  • 我刚刚注意到 LanguageService 类有一个 CreateParseRequest 方法。所以我尝试使用 ParseReason.Check 从 OnCaretMoved 调用它,但它并没有调用我的 ParseSource 方法......所以很困惑。

标签: languageservice


【解决方案1】:

您可以尝试在您的Source 实现上调用BeginParse()。这将创建一个带有 Check 解析原因的 ParseRequest。我关闭了语言服务中的 OnIdle 计时器并对其进行了测试,它似乎可以正常工作。

如果您检测用户按键的代码可以访问您的LanguageService 实现实例,那么您可以使用service.GetSource(...).BeginParse()。如果它本身可以访问Source,那就更容易了。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,我想扫描未在 VS 中打开的文件。我能做的最好的事情就是抽象出我的解析功能,这样它就可以被 VS 调用,但也可以在我需要的时候被另一个内部函数调用到我的扩展中,而无需通过 VS,这会将我的解析结果存储到与ParseRequest 上的直接 VS 调用。

    我很想知道你是否找到了更好的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-10
      • 2014-04-17
      • 2015-05-01
      • 1970-01-01
      • 2013-03-24
      • 2012-11-07
      相关资源
      最近更新 更多