FallbackNamingRules.cs 4.8 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
        /// <summary>
16
        /// Standard symbol names if the user doesn't have any existing naming rules.
17
        /// </summary>
18 19
        public static readonly ImmutableArray<NamingRule> Default = ImmutableArray.Create(
            // Symbols that should be camel cased.
20
            new NamingRule(
21 22 23 24 25 26 27 28
                new SymbolSpecification(
                    Guid.NewGuid(),
                    nameof(Capitalization.CamelCase),
                    ImmutableArray.Create(
                        new SymbolKindOrTypeKind(SymbolKind.Field),
                        new SymbolKindOrTypeKind(SymbolKind.Local),
                        new SymbolKindOrTypeKind(SymbolKind.Parameter),
                        new SymbolKindOrTypeKind(SymbolKind.RangeVariable))),
29 30
                new NamingStyle(Guid.NewGuid(), capitalizationScheme: Capitalization.CamelCase),
                enforcementLevel: ReportDiagnostic.Hidden),
C
Restore  
Cyrus Najmabadi 已提交
31 32 33 34 35 36 37 38 39
            // Include an entry for _ prefixed fields (.Net style).  That way features that are looking to see if
            // there's a potential matching field for a particular name will find these as well.
            new NamingRule(
                new SymbolSpecification(
                    Guid.NewGuid(),
                    "CamelCaseWithUnderscore",
                    ImmutableArray.Create(new SymbolKindOrTypeKind(SymbolKind.Field))),
                new NamingStyle(Guid.NewGuid(), prefix: "_", capitalizationScheme: Capitalization.CamelCase),
                enforcementLevel: ReportDiagnostic.Hidden),
40
            // Everything else should be pascal cased.
41
            new NamingRule(
C
Restore  
Cyrus Najmabadi 已提交
42
                CreateDefaultSymbolSpecification(),
43
                new NamingStyle(Guid.NewGuid(), capitalizationScheme: Capitalization.PascalCase),
44
                enforcementLevel: ReportDiagnostic.Hidden));
R
Ravi Chande 已提交
45

46 47 48 49 50 51 52 53
        /// <summary>
        /// Standard name rules for name suggestion/completion utilities.
        /// </summary>
        internal static readonly ImmutableArray<NamingRule> CompletionOfferingRules = ImmutableArray.Create(
            CreateCamelCaseFieldsAndParametersRule(),
            CreateEndWithAsyncRule(),
            CreateGetAsyncRule(),
            CreateMethodStartsWithGetRule());
54 55 56

        private static NamingRule CreateGetAsyncRule()
        {
Š
Šimon Koníček 已提交
57
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(MethodKind.Ordinary));
58 59
            var modifiers = ImmutableArray.Create(new ModifierKind(ModifierKindEnum.IsAsync));
            return new NamingRule(
60
                new SymbolSpecification(Guid.NewGuid(), "endswithasync", kinds, accessibilityList: default, modifiers),
61
                new NamingStyle(Guid.NewGuid(), prefix: "Get", suffix: "Async"),
62
                ReportDiagnostic.Info);
63 64 65 66
        }

        private static NamingRule CreateCamelCaseFieldsAndParametersRule()
        {
Š
Šimon Koníček 已提交
67
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(SymbolKind.Field), new SymbolKindOrTypeKind(SymbolKind.Parameter), new SymbolKindOrTypeKind(SymbolKind.Local));
68
            return new NamingRule(
69
                new SymbolSpecification(Guid.NewGuid(), "camelcasefields", kinds, accessibilityList: default, modifiers: default),
70
                new NamingStyle(Guid.NewGuid(), capitalizationScheme: Capitalization.CamelCase),
71
                ReportDiagnostic.Info);
72 73 74 75
        }

        private static NamingRule CreateEndWithAsyncRule()
        {
Š
Šimon Koníček 已提交
76
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(MethodKind.Ordinary));
77 78
            var modifiers = ImmutableArray.Create(new ModifierKind(ModifierKindEnum.IsAsync));
            return new NamingRule(
79
                new SymbolSpecification(Guid.NewGuid(), "endswithasynct", kinds, accessibilityList: default, modifiers),
80
                new NamingStyle(Guid.NewGuid(), suffix: "Async"),
81
                ReportDiagnostic.Info);
82 83 84 85
        }

        private static NamingRule CreateMethodStartsWithGetRule()
        {
Š
Šimon Koníček 已提交
86
            var kinds = ImmutableArray.Create(new SymbolKindOrTypeKind(MethodKind.Ordinary));
87
            return new NamingRule(
88
                new SymbolSpecification(Guid.NewGuid(), "startswithget", kinds, accessibilityList: default, modifiers: default),
89
                new NamingStyle(Guid.NewGuid(), prefix: "Get"),
90
                ReportDiagnostic.Info);
91 92
        }
    }
S
Sam Harwell 已提交
93
}