FallbackNamingRules.cs 4.4 KB
Newer Older
J
Jonathon Marolf 已提交
1 2 3
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
R
Ravi Chande 已提交
4 5

using System;
6 7
using System.Collections.Immutable;
using Microsoft.CodeAnalysis.Diagnostics.Analyzers.NamingStyles;
8
using Microsoft.CodeAnalysis.NamingStyles;
9 10
using static Microsoft.CodeAnalysis.Diagnostics.Analyzers.NamingStyles.SymbolSpecification;

11
namespace Microsoft.CodeAnalysis.Shared.Naming
12
{
13
    internal static class FallbackNamingRules
14
    {
15 16 17 18 19 20 21 22 23 24
        /// <summary>
        /// Standard field/property names a refactoring look for given a named symbol that is the subject of refactoring. 
        /// The refactoring will try to find existing matching symbol and if not found, it will generate one.
        /// </summary>
        internal static readonly ImmutableArray<NamingRule> RefactoringMatchLookupRules = ImmutableArray.Create(
            new NamingRule(
                new SymbolSpecification(Guid.NewGuid(), "Property", ImmutableArray.Create(new SymbolKindOrTypeKind(SymbolKind.Property))),
                new NamingStyle(Guid.NewGuid(), capitalizationScheme: Capitalization.PascalCase),
                enforcementLevel: ReportDiagnostic.Hidden),
            new NamingRule(
25
                new SymbolSpecification(Guid.NewGuid(), "Field", ImmutableArray.Create(new SymbolKindOrTypeKind(SymbolKind.Field), new SymbolKindOrTypeKind(SymbolKind.Parameter))),
26 27 28 29 30 31
                new NamingStyle(Guid.NewGuid(), capitalizationScheme: Capitalization.CamelCase),
                enforcementLevel: ReportDiagnostic.Hidden),
            new NamingRule(
                new SymbolSpecification(Guid.NewGuid(), "FieldWithUnderscore", ImmutableArray.Create(new SymbolKindOrTypeKind(SymbolKind.Field))),
                new NamingStyle(Guid.NewGuid(), prefix: "_", capitalizationScheme: Capitalization.CamelCase),
                enforcementLevel: ReportDiagnostic.Hidden));
R
Ravi Chande 已提交
32

33 34 35 36 37 38 39 40
        /// <summary>
        /// Standard name rules for name suggestion/completion utilities.
        /// </summary>
        internal static readonly ImmutableArray<NamingRule> CompletionOfferingRules = ImmutableArray.Create(
            CreateCamelCaseFieldsAndParametersRule(),
            CreateEndWithAsyncRule(),
            CreateGetAsyncRule(),
            CreateMethodStartsWithGetRule());
41 42 43

        private static NamingRule CreateGetAsyncRule()
        {
Š
Šimon Koníček 已提交
44
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(MethodKind.Ordinary));
45 46
            var modifiers = ImmutableArray.Create(new ModifierKind(ModifierKindEnum.IsAsync));
            return new NamingRule(
47
                new SymbolSpecification(Guid.NewGuid(), "endswithasync", kinds, accessibilityList: default, modifiers),
48
                new NamingStyle(Guid.NewGuid(), prefix: "Get", suffix: "Async"),
49
                ReportDiagnostic.Info);
50 51 52 53
        }

        private static NamingRule CreateCamelCaseFieldsAndParametersRule()
        {
Š
Šimon Koníček 已提交
54
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(SymbolKind.Field), new SymbolKindOrTypeKind(SymbolKind.Parameter), new SymbolKindOrTypeKind(SymbolKind.Local));
55
            return new NamingRule(
56
                new SymbolSpecification(Guid.NewGuid(), "camelcasefields", kinds, accessibilityList: default, modifiers: default),
57
                new NamingStyle(Guid.NewGuid(), capitalizationScheme: Capitalization.CamelCase),
58
                ReportDiagnostic.Info);
59 60 61 62
        }

        private static NamingRule CreateEndWithAsyncRule()
        {
Š
Šimon Koníček 已提交
63
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(MethodKind.Ordinary));
64 65
            var modifiers = ImmutableArray.Create(new ModifierKind(ModifierKindEnum.IsAsync));
            return new NamingRule(
66
                new SymbolSpecification(Guid.NewGuid(), "endswithasynct", kinds, accessibilityList: default, modifiers),
67
                new NamingStyle(Guid.NewGuid(), suffix: "Async"),
68
                ReportDiagnostic.Info);
69 70 71 72
        }

        private static NamingRule CreateMethodStartsWithGetRule()
        {
Š
Šimon Koníček 已提交
73
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(MethodKind.Ordinary));
74
            return new NamingRule(
75
                new SymbolSpecification(Guid.NewGuid(), "startswithget", kinds, accessibilityList: default, modifiers: default),
76
                new NamingStyle(Guid.NewGuid(), prefix: "Get"),
77
                ReportDiagnostic.Info);
78 79
        }
    }
S
Sam Harwell 已提交
80
}