gpt4 book ai didi

c# - 如何在 Visual Studio 中显示特定提示

转载 作者:太空狗 更新时间:2023-10-29 17:59:10 24 4
gpt4 key购买 nike

我目前正在努力提高我的编码感觉,所以我已经开始为我正在使用的类型添加一些扩展方法。


我想通了,我经常做同样的 Action ,总是具有相同的属性。

我想在有人调用 ReplaceNewLine("|") 时显示此提示:

The char you want to remove is |. Use the RemoveNewLine() extension without any attributes instead.

我尝试使用 [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 诊断(和可选的修复)来实现。新的 Visual Studio 2015 代码编辑器在后台使用 Roslyn 来完成所有解析工作,代码分析、指标和重构引擎现在基于它。

此类检查的示例实现是 given on the Roslyn github page .完整的实现对于 StackOverflow 上的答案来说有点多,因为它需要完成许多步骤并且相当于一个完整的教程,但是这个完整的教程 something similar is given here .并且可能是您工作的基础。 (稍后再问其他问题)。 standard rules that ship with the product can be found in the Roslyn GitHub as well 的代码.

这段代码应该让你非常接近,但我还没有测试过。根据 Roslyn SDK totorial 创建标准诊断和修复并替换 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 向后兼容的东西,您可以选择编写自定义代码分析规则。这example rule接受对 Regex.Match 的调用的输入和 Regex.Replace并在不编译时发出警告。当它是常量字符串时发出警告会更简单。

像 Resharper 和 CodeRush 这样的 Visual Studio 扩展提供了一个 SDK,它可以做类似于 FxCop 的事情,但它们像 Roslyn 一样嵌入到 IDE 中。采取这种方法可能是您的一种选择。

如果您想要代码编辑器中不使用任何扩展或自定义的内容,则添加 <remark /> codedoc 是你能做的。在最坏的情况下,您可以输入 Debug.Assert(input != "|");在该方法中,开发人员将通过这种方式(在开发/调试时)获得他们错误使用您的 API 的早期警告。

关于c# - 如何在 Visual Studio 中显示特定提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30872123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com