如何使用语言的解析器来获取令牌以填充VS SDK中的完成列表?

时间:2017-04-07 04:04:33

标签: c# visual-studio visual-studio-extensions vsix visual-studio-sdk

[环境]:VS2017 + C#

我想扩展Intellisense,只需重新排序完成列表。 我读了这篇文档:Walkthrough: Displaying Statement Completion

医生说:

  

当用户键入完成触发器(例如标识符的首字母)时,完成源负责收集标识符集并将内容添加到完成窗口。在此示例中,AugmentCompletionSession方法中的标识符及其描述为硬编码。在大多数实际应用中,您可以使用语言的解析器来获取令牌以填充完成列表

 void ICompletionSource.AugmentCompletionSession(ICompletionSession session, IList<CompletionSet> completionSets)
{
    List<string> strList = new List<string>();
    strList.Add("addition");    // ☹HARD CODED !!!
    strList.Add("adaptation");
    strList.Add("subtraction");
    strList.Add("summation");
    m_compList = new List<Completion>();
    foreach (string str in strList)
        m_compList.Add(new Completion(str, str, str, null, null));

    completionSets.Add(new CompletionSet(
        "Tokens",    //the non-localized title of the tab
        "Tokens",    //the display title of the tab
        FindTokenSpanAtPosition(session.GetTriggerPoint(m_textBuffer),
            session),
        m_compList,
        null));
}   }

那么,如何使用语言的解析器来获取令牌以填充完成列表?我需要获取默认完成列表然后重新排序。

1 个答案:

答案 0 :(得分:1)

我认为该文档试图说他们已经对令牌列表进行了硬编码,以使示例更容易理解,而在现实生活中,您将不得不做更复杂的事情。

您需要做的事情取决于许多事情,包括您尝试处理的语言。例如,如果您尝试为C#或Visual Basic扩展Intellisense,则可以使用Roslyn来解析项目中的源,作为创建可用于构建完成列表的令牌列表的方法。

如果您正在使用其他语言,则必须找到(或创建)可以解析您正在使用的语言的工具。