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

时间:2011-12-31 13:07:13

标签: c# visual-studio-2010 add-in vsx

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

如果这可以扩展到用花括号括起来的任何C#块,例如属性,这将是非常好的。

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

您可以使用NRefacotryCSParser执行此操作(我使用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;
        }
    }