C#/Visual Studio 命名规则可以配置为标记单字母前缀吗?

问题描述 投票:0回答:1

可以通过 Tools > Options > Text Editor > C# > Code Style > Naming 在 VS 中配置命名规则违规,用于驼峰命名法,并使用意外前缀(如

_IsVisible
)标记局部变量和参数或
m_Name
,同时允许它们用于私有字段。

IDE1006 违反命名规则:不需要前缀“m_” IDE1006 违反命名规则:不需要前缀“_”

但是,局部变量/参数错误地以 m 为前缀,但没有下划线,例如

public void Method(int mValue)
{
    bool mLocalVar = false;
}

不要被标记。

命名规则是否可以配置为将不带 _ 的 m 前缀也视为违规?

c# .net visual-studio naming-conventions static-analysis
1个回答
0
投票

您可以创建自己的代码分析器。

创建代码分析器项目:

enter image description here

在第一个分析器项目中,修改函数

public override void Initialize(AnalysisContext context)
{
    context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
    context.EnableConcurrentExecution();

    context.RegisterSyntaxNodeAction(AnalyzeNode, Microsoft.CodeAnalysis.CSharp.SyntaxKind.VariableDeclarator);
}

    private static void AnalyzeNode(SyntaxNodeAnalysisContext context)
    {
        var variableDeclaration = (Microsoft.CodeAnalysis.CSharp.Syntax.VariableDeclaratorSyntax)context.Node;
        var variableName = variableDeclaration.Identifier.Text;

        if (variableName.StartsWith("m"))
        {
            var diagnostic = Diagnostic.Create(Rule, variableDeclaration.GetLocation(), variableName);
            context.ReportDiagnostic(diagnostic);
        }
    }

设置警告或错误:

private static readonly DiagnosticDescriptor Rule = new DiagnosticDescriptor(DiagnosticId, Title, MessageFormat, Category, DiagnosticSeverity.Warning, isEnabledByDefault: true, description: Description);

修改resx文件中的文本:

enter image description here

在代码修复项目中:

评论修复代码:

    // Register a code action that will invoke the fix.
    //context.RegisterCodeFix(
    //    CodeAction.Create(
    //        title: CodeFixResources.CodeFixTitle,
    //        createChangedSolution: c => MakeUppercaseAsync(context.Document, declaration, c),
    //        equivalenceKey: nameof(CodeFixResources.CodeFixTitle)),
    //    diagnostic);

选择 vsix 项目作为启动项目进行测试:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.