遍历全局/本地范围内的所有EnvDTE.CodeElement

时间:2014-08-06 20:23:39

标签: c#

是否可以遍历给定源文件中的所有CodeElement对象?

我的真正目标是能够从Visual Studio加载项中找出光标位置中变量的类型。我尝试了以下代码:

// identify where the cursor is
TextSelection selection =
  (TextSelection)_applicationObject.ActiveWindow.Selection;
// get the starting point
EditPoint Start = selection.TopPoint.CreateEditPoint();
// get the element under the cursor
CodeElement element = _applicationObject.ActiveDocument.ProjectItem.
   FileCodeModel.CodeElementFromPoint(Start,
   vsCMElement.vsCMElementVariable);

if (element.Kind == vsCMElement.vsCMElementVariable)
{
    CodeVariable theVar = element as CodeVariable;
    string t = theVar.Type.AsString;
    MessageBox(t);
}

但它有一些问题:

  • 它仅适用于类的范围,不适用于函数范围或全局范围(如果是c ++)

  • 当光标位于声明的位置时它起作用,我希望它在光标处于变量使用位置时起作用。

那么有没有办法在不构建我自己的编译器的情况下获取这些语义信息?

0 个答案:

没有答案