我想开发自己的参数信息工具提示(一旦你开始在函数调用中输入参数就会弹出)。
我想用Roslyn实现它,但我不知道从哪里开始。任何人都可以给我一个小例子让我开始吗?
答案 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
。