使用Roslyn获取当前位置的关键字列表

时间:2013-10-22 07:06:41

标签: c# autocomplete intellisense roslyn code-editor

我正在为基于Web的.Net编辑器实现Intellisense,我需要它来显示匹配关键字的列表。例如,在C#风格中,如果用户按下“u”,我需要它显示以“u”开头的本地符号和关键字(例如,“使用”)。

问题:

  1. 是否可以检索语言中存在的所有关键字(包括内置类型名称,如“int”)?
  2. 是否可以仅检索当前上下文中有效的关键字(例如,“使用”在“公共”之后不适合)?
  3. 如果没有,我可以通过Roslyn获取上下文并手动选择拟合关键字吗?

1 个答案:

答案 0 :(得分:0)

想通了。

var memberInfos = typeof (SyntaxKind).GetMembers(BindingFlags.Public | BindingFlags.Static);
var keywords = from memberInfo in memberInfos
               where memberInfo.Name.EndsWith("Keyword") 
               orderby memberInfo.Name
               select memberInfo.Name.CutoffEnd("Keyword").ToLower();

我为编译器指令获得了一些额外的关键字,比如pragma,但这是一个好的开始。