我目前正在努力改善编码感觉,因此我已经开始向所使用的类型添加一些扩展方法。
我发现,我经常使用相同的属性执行相同的操作。
我想在有人打电话时显示此提示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.6
和Visual Studio 2015 RC
。在Visual Studio 2015中,可以使用Roslyn诊断程序(和可选的Fix)来实现。新的Visual Studio 2015代码编辑器在后台使用Roslyn进行所有解析,现在基于它的代码分析,度量和重构引擎。
在Roslyn github页面上给出了这种检查的示例实现。完整的实现对于在StackOverflow上获得答案来说有点太多,因为它涉及许多步骤,需要完成一个完整的教程,但是此处提供了类似内容的完整教程。并可能是您工作的基础。(稍后再问其他问题)。产品附带的标准规则的代码也可以在Roslyn GitHub中找到。
这段代码应该可以使您更加接近,但是我尚未对其进行测试。根据Roslyn SDK教程创建标准的诊断和修复程序,然后将Initialize
和AnalyzeNode
方法替换为(用自己的名称空间替换):
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.Match
并Regex.Replace
在未编译时给出警告。如果它是一个常量字符串,则发出警告甚至更简单。
像Resharper和CodeRush这样的Visual Studio扩展提供了一个SDK,该SDK可以完成与FxCop类似的功能,但是它们像Roslyn一样嵌入到IDE中。您可以采用这种方法。
如果您想要代码编辑器中不使用任何扩展名或自定义项的内容,则将a添加<remark />
到代码文档中就可以完成。在最坏的情况下,您可以在Debug.Assert(input != "|");
方法中添加,这样开发人员将得到早期警告(在开发/调试时),表示他们使用了错误的API。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句