[环境]: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));
} }
那么,如何使用语言的解析器来获取令牌以填充完成列表?我需要获取默认完成列表然后重新排序。
答案 0 :(得分:1)
我认为该文档试图说他们已经对令牌列表进行了硬编码,以使示例更容易理解,而在现实生活中,您将不得不做更复杂的事情。
您需要做的事情取决于许多事情,包括您尝试处理的语言。例如,如果您尝试为C#或Visual Basic扩展Intellisense,则可以使用Roslyn来解析项目中的源,作为创建可用于构建完成列表的令牌列表的方法。
如果您正在使用其他语言,则必须找到(或创建)可以解析您正在使用的语言的工具。