使用Roslyn的参数信息工具提示

时间:2014-08-15 01:10:21

标签: c# visual-studio visual-studio-2013 roslyn

我想开发自己的参数信息工具提示(一旦你开始在函数调用中输入参数就会弹出)。

enter image description here

我想用Roslyn实现它,但我不知道从哪里开始。任何人都可以给我一个小例子让我开始吗?

1 个答案:

答案 0 :(得分:3)

我应该通过指出扩展Visual Studio并不是一件特别容易,有趣或直接的努力。

我相信MSDN文章Walkthrough: Displaying Signature Help应该让您有一个良好的开端。

  

签名帮助源基于实施ISignature的签名,每个签名都包含实现IParameter的参数。

首先,我们必须创建一个继承自IParameter

的参数

接下来,我们必须创建一个继承自ISignature的签名。这里的关键是实现一个CurrentParameterChanged事件,当用户键入逗号时会触发该事件,应该显示随参数的定义而改变。

这是通过创建事件并按如下方式触发它来完成的:

public event EventHandler<CurrentParameterChangedEventArgs> CurrentParameterChanged;

public IParameter CurrentParameter
{
    get { return m_currentParameter; }
    internal set
    {
        if (m_currentParameter != value)
        {
            IParameter prevCurrentParameter = m_currentParameter;
            m_currentParameter = value;
            this.RaiseCurrentParameterChanged(prevCurrentParameter, m_currentParameter);
        }
    }
}

private void RaiseCurrentParameterChanged(IParameter prevCurrentParameter, IParameter newCurrentParameter)
{
    EventHandler<CurrentParameterChangedEventArgs> tempHandler = this.CurrentParameterChanged;
    if (tempHandler != null)
    {
        tempHandler(this, new CurrentParameterChangedEventArgs(prevCurrentParameter, newCurrentParameter));
    }
}

他们根据字符串中的逗号数计算当前参数。但是,ComputeCurrentParameter()方法有点太长了,无法发布。

接下来,您必须实施ISignatureHelpSource。此界面为Intellisense提供签名帮助信息。

方法ISignatureHelpSource.AugmentSignatureHelpSession()是创建参数信息列表的位置,以及您要添加自定义参数信息的位置。 MSDN提供的示例在此处使用预先编写的字符串。实际上,根据您的目标,您可能希望动态计算这些内容,可能是使用Roslyn。

最后,您必须通过ISignatureHelpSourceProvider导出MEF。这允许Visual Studio使用您的ISignatureHelpSource