如何在Visual Studio中显示特定提示

疯狂

我目前正在努力改善编码感觉,因此我已经开始向所使用的类型添加一些扩展方法。


我发现,我经常使用相同的属性执行相同的操作。

我想在有人打电话时显示此提示ReplaceNewLine("|")

您要删除的字符为|使用RemoveNewLine()不带任何属性扩展名。

我尝试使用[Obsolete(...)]属性,但是每次调用该函数时都会显示出来。

我的问题是:如何根据我在Visual Studio中的输入显示特定的提示?

码:

public static class StringExtension
{
    public static string ReplaceNewLine(this string s)
    {
        return s.Replace("|", Environment.NewLine);
    }

    // show hint if c is |
    public static string ReplaceNewLine(this string s, string c)
    {
        return s.Replace(c, Environment.NewLine);
    }
}

职位:

  • 当然,提示在显示时可能带有Obsolete代码(0618/ CS0618),但这对我而言并不重要。我只想显示提示!
  • 我工作C# 6.0.NET 4.6Visual Studio 2015 RC
杰西霍温

在Visual Studio 2015中,可以使用Roslyn诊断程序(和可选的Fix)来实现。新的Visual Studio 2015代码编辑器在后台使用Roslyn进行所有解析,现在基于它的代码分析,度量和重构引擎。

在Roslyn github页面上给出了这种检查的示例实现完整的实现对于在StackOverflow上获得答案来说有点太多,因为它涉及许多步骤,需要完成一个完整的教程,但是此处提供了类似内容的完整教程并可能是您工作的基础。(稍后再问其他问题)。产品附带标准规则的代码也可以在Roslyn GitHub中找到

这段代码应该可以使您更加接近,但是我尚未对其进行测试。根据Roslyn SDK教程创建标准的诊断和修复程序,然后将InitializeAnalyzeNode方法替换为(用自己的名称空间替换):

public override void Initialize(AnalysisContext context)
{
    context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.InvocationExpression);
}

private void AnalyzeSyntaxNode(SyntaxNodeAnalysisContext context)
{
    InvocationExpressionSyntax invocationExpression = context.Node as InvocationExpressionSyntax;
    IMethodSymbol methodSymbol = context.SemanticModel.GetSymbolInfo(invocationExpression).Symbol as IMethodSymbol;

    if (
        methodSymbol != null
        && methodSymbol.Name == "ReplaceNewline" 
        && methodSymbol.ContainingNamespace.Name == "MySampleFix"
        && methodSymbol.OriginalDefinition.Parameters.Length == 1)
    {
        if (invocationExpression.ArgumentList.Arguments.Count() == 1)
        {
            LiteralExpressionSyntax arg =
                invocationExpression.ArgumentList.Arguments[0].Expression as LiteralExpressionSyntax;

            if (arg != null && arg.Token.ValueText == "|")
            {
                Diagnostic.Create(Rule, invocationExpression.GetLocation());
            }
        }
    }
}

如果要使某些东西与旧版本的Visual Studio向后兼容,则可以选择编写自定义代码分析规则。示例规则将输入作为对的调用,Regex.MatchRegex.Replace在未编译时给出警告。如果它是一个常量字符串,则发出警告甚至更简单。

像Resharper和CodeRush这样的Visual Studio扩展提供了一个SDK,该SDK可以完成与FxCop类似的功能,但是它们像Roslyn一样嵌入到IDE中。您可以采用这种方法。

如果您想要代码编辑器中不使用任何扩展名或自定义项的内容,则将a添加<remark />到代码文档中就可以完成。在最坏的情况下,您可以在Debug.Assert(input != "|");方法中添加,这样开发人员将得到早期警告(在开发/调试时),表示他们使用了错误的API。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Visual Studio Code中触发参数提示?

如何在Visual Studio Code中触发销毁提示?

如何在Android Studio中显示参数提示?

如何在visual studio中显示模板的静态类成员?

如何在Visual Studio中突出显示虚函数

如何在Visual Studio 2017中显示呼叫堆栈窗口

如何在Visual Studio Code本身中显示图形?

如何在Visual Studio 2013中显示'git blame'?

如何在Visual Studio扩展中显示图像?

如何在Visual Studio注册面板中显示标志?

如何在Visual Studio Code中显示引用计数?

如何在Visual Studio Code中显示功能的使用?

Visual Studio代码:如何在IntelliSense中显示重载?

Visual Studio:如何在IntelliSense中显示重载?

如何在Visual Studio for Mac中显示隐藏文件?

如何在Visual Studio 2015中显示标准输出?

如何在Visual Studio代码中显示被忽略的文件?

如何在Visual Studio中仅显示类的事件?

如何在 Visual Studio 中显示 Unicode 字符?

如何在Notepad ++ / Visual Studio中替换特定模式

如何在Visual Studio 2015中从Git获取特定版本?

如何在Visual Studio Code中附加到特定进程

如何在 Visual Studio 扩展中的 QuickInfo 提示中为 ClassifiedTextRun 添加单击事件处理程序?

如何在Andorid Studio中显示JSON的特定数据

如何在Visual Studio中更改“许可给”?

如何在Visual Studio中升级ReSharper?

如何在Visual Studio中包括OpenSSL

如何在Visual Studio中获取行号

如何在visual studio中调试python