找出游标是否在方法,类或命名空间块中

我想创建一个Visual Studio插件,它可以识别插入符当前是否在方法,类或命名空间块中,即如果插入符号移动,插件应该能够记下插入符当前位于其中的状态 – 等元素。

如果这可以扩展到任何包含在花括号中的C#块,例如属性,那将是非常好的。

虽然我已经检查了类似的问题,但如果这是一个重复的问题,请告诉我,以便我可以相应地进行标记。 如果其他VS Addin相关问题在这里显然有用,请告诉我。

基本上,我想知道我们可以使用哪些技术以及如何实现这些技术。

编辑:我想开始的简短答案是:

  • 获取Visual Studio 2010 SDK SP1
  • 可能使用“可扩展性”项目模板“编辑器文本装饰”或其他一些此类模板。

实际上,我认为你需要做的第一件事就是判断你class级中有多少种方法或属性,以及它们的位置。 获得这些信息后。 您需要做的下一步是判断当前光标位置是什么。 然后,您可以与您获得的那些方法信息进行比较。 到目前为止,您可以获得光标所在的方法。这是我找到的球场解决方案。

我们来谈谈一些技术细节:

1.如何获得方法和属性的位置?

您可以使用NRefacotry或CSParser来执行此操作(我使用NRefactory完成我的要求)

2.如何获得光标位置?

在IVsTextView中有一个名为“GetCaretPos”的方法。 您可以通过TextManager获取ActiveTextView。 然后你可以使用“GetCaretPos”方法。 以下是一些代码可能对您有所帮助。

public static IVsTextManager TextManager { get { if (textManager == null) { Object obj = Package.GetGlobalService(typeof(SVsTextManager)); if (obj == null) { throw new ArgumentException("get textmanager failed in VSTextView"); } textManager = obj as IVsTextManager; } return textManager; } } public static IVsTextView ActiveTextView { get { IVsTextView activeView = null; if (TextManager != null) { TextManager.GetActiveView(1, activeTextBuffer, out activeView); } return activeView; } }