Pravidla pojmenování stylu kódu
V souboru .editorconfig můžete definovat konvence vytváření názvů pro prvky kódu programovacího jazyka .NET, jako jsou třídy, vlastnosti a metody, a způsob, jakým by kompilátor nebo integrované vývojové prostředí měly tyto konvence vynucovat. Můžete například určit, že veřejný člen, který není velkými písmeny, by měl být považován za chybu kompilátoru nebo že pokud soukromé pole nezačíná _
na , mělo by se vystavit upozornění sestavení.
Konkrétně můžete definovat pravidlo pojmenování, které se skládá ze tří částí:
- Skupina symbolů, na kterou se pravidlo vztahuje, například na veřejné členy nebo soukromá pole.
- Styl pojmenování, který se má přidružit k pravidlu, například že název musí být velkými písmeny nebo musí začínat podtržítkem.
- Úroveň závažnosti zprávy, pokud prvky kódu zahrnuté ve skupině symbolů nedodržují styl pojmenování.
Obecná syntaxe
Pokud chcete definovat některou z výše uvedených entit – pravidlo pojmenování, skupinu symbolů nebo styl pojmenování – nastavte jednu nebo více vlastností pomocí následující syntaxe:
<kind>.<entityName>.<propertyName> = <propertyValue>
Všechna nastavení vlastností pro danou kind
entitu a entityName
tvoří danou definici entity.
Každá vlastnost by měla být nastavena pouze jednou, ale některá nastavení umožňují více hodnot oddělených čárkami.
Pořadí vlastností není důležité.
<kind> values
<Druh> určuje, který druh entity se definuje – pravidlo pojmenování, skupina symbolů nebo styl pojmenování – a musí to být jedna z těchto věcí:
Nastavení vlastnosti pro | <Použití hodnoty typu> | Příklad |
---|---|---|
Pravidlo pojmenování | dotnet_naming_rule |
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion |
Skupina symbolů | dotnet_naming_symbols |
dotnet_naming_symbols.interface.applicable_kinds = interface |
Styl pojmenování | dotnet_naming_style |
dotnet_naming_style.pascal_case.capitalization = pascal_case |
<entityName>
<entityName> je popisný název, který zvolíte, který přidruží nastavení více vlastností k jedné definici. Například následující vlastnosti vytvoří dvě definice skupiny symbolů interface
a types
každý z nich má dvě vlastnosti nastavené na něm.
dotnet_naming_symbols.interface.applicable_kinds = interface
dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum, delegate
dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected
<propertyName> a <propertyValue>
Každý druh entity – pravidlo pojmenování, skupina symbolů nebo styl pojmenování – má své vlastní podporované vlastnosti, jak je popsáno v následujících částech.
Vlastnosti skupiny symbolů
Pro skupiny symbolů můžete nastavit následující vlastnosti, abyste omezili, které symboly jsou součástí skupiny. Chcete-li zadat více hodnot pro jednu vlastnost, oddělte hodnoty čárkou.
Vlastnost | Popis | Povolené hodnoty | Požaduje se |
---|---|---|---|
applicable_kinds |
Druhy symbolů ve skupině 1 | * (tuto hodnotu použijte k určení všech symbolů)namespace class struct interface enum property method field event delegate parameter type_parameter local local_function |
Ano |
applicable_accessibilities |
Úrovně přístupnosti symbolů ve skupině | * (tuto hodnotu použijte k určení všech úrovní přístupnosti.public internal nebo friend private protected protected_internal nebo protected_friend private_protected local (pro symboly definované v rámci metody) |
Ano |
required_modifiers |
Shoda pouze se symboly se všemi zadanými modifikátory 2 | abstract nebo must_inherit async const readonly static nebo shared 3 |
No |
Poznámky:
- Členové řazené kolekce členů nejsou v současné době podporováni
applicable_kinds
. - Skupina symbolů odpovídá všem modifikátorům
required_modifiers
ve vlastnosti. Pokud tuto vlastnost vynecháte, nejsou pro shodu vyžadovány žádné konkrétní modifikátory. To znamená, že modifikátory symbolu nemají žádný vliv na to, jestli se toto pravidlo použije nebo ne. - Pokud vaše skupina obsahuje nebo obsahuje vlastnost, bude skupina obsahovat
const
také symboly, protože jsou implicitně/static
Shared
.required_modifiers
shared
static
Pokud ale nechcetestatic
, aby pravidlo pojmenování platilo proconst
symboly, můžete vytvořit nové pravidlo pojmenování se skupinou symbolůconst
. Nové pravidlo bude mít přednost podle pořadí pravidel. class
obsahuje záznamy jazyka C#.
Vlastnosti stylu pojmenování
Styl pojmenování definuje konvence, které chcete vynutit s pravidlem. Příklad:
- Velká písmena s velkým písmenem
PascalCase
- Začíná na
m_
- Končí na
_g
- Oddělte slova pomocí
__
Pro styl pojmenování můžete nastavit následující vlastnosti:
Vlastnost | Popis | Povolené hodnoty | Požaduje se |
---|---|---|---|
capitalization |
Styl psaní velkých písmen u slov v symbolu | pascal_case camel_case first_word_upper all_upper all_lower |
Ano1 |
required_prefix |
Musí začínat těmito znaky. | No | |
required_suffix |
Musí končit těmito znaky. | No | |
word_separator |
Slova v symbolu musí být oddělena tímto znakem. | No |
Poznámky:
- Styl psaní velkých písmen musíte zadat jako součást stylu pojmenování, jinak se styl pojmenování může ignorovat.
Vlastnosti pravidla pojmenování
Aby se pravidlo projevilo, vyžadují se všechny vlastnosti pravidla pojmenování.
Vlastnost | Popis |
---|---|
symbols |
Název skupiny symbolů definované jinde; Pravidlo pojmenování se použije na symboly v této skupině. |
style |
Název stylu pojmenování, který by měl být přidružen k tomuto pravidlu; styl je definován jinde. |
severity |
Nastaví závažnost, se kterou se má vynucovat pravidlo pojmenování. Nastavte přidruženou hodnotu na jednu z dostupných úrovní závažnosti.1 |
Poznámky:
- Specifikace závažnosti v rámci pravidla pojmenování se respektuje pouze v rámci vývojových vývojových prostředí, jako je Například Visual Studio. Toto nastavení nepochopeno kompilátory jazyka C# nebo VB, proto se během sestavování nerespektuje. Pokud chcete vynutit pravidla stylu pojmenování při sestavení, měli byste místo toho nastavit závažnost pomocí konfigurace závažnosti pravidla kódu. Další informace najdete u tohoto problému na GitHubu.
Pořadí pravidel
Pořadí, ve kterém jsou pravidla pojmenování definována v souboru EditorConfig, nezáleží. Pravidla pojmenování se automaticky řadí podle definic samotných pravidel. Konkrétnější pravidla týkající se pravděpodobností přístupu, modifikátorů a symbolů mají přednost před méně specifickými pravidly. Pokud se pravidla překrývají nebo pokud řazení pravidel způsobuje problémy, můžete průnik těchto dvou pravidel rozdělit do nového pravidla, které má přednost před širšími pravidly, ze kterých bylo odvozeno. Příklady viz Příklad: Překrývající se strategie pojmenování a Příklad: const
modifikátor zahrnuje static
a readonly
.
Rozšíření EditorConfig Language Service může analyzovat soubor EditorConfig a případy sestavy, kdy se pořadí pravidel v souboru liší od toho, co kompilátor použije za běhu.
Poznámka:
Pokud používáte verzi sady Visual Studio starší než Visual Studio 2019, měla by se pravidla pojmenování řadit od většiny specifických po nejméně konkrétní v souboru EditorConfig. První pravidlo, které lze použít, je jediné použité pravidlo. Pokud však existuje více vlastností pravidla se stejným názvem, má přednost vlastnost naposledy nalezená s tímto názvem. Další informace najdete v tématu Hierarchie souborů a priorita.
Příklad: Překrývající se strategie pojmenování
Zvažte následující dvě pravidla pojmenování:
- Veřejné metody jsou PascalCase.
- Asynchronní metody končí na
"Async"
.
U public async
metod není zřejmé, které pravidlo má přednost. Můžete vytvořit nové pravidlo pro public async
metody a přesně určit pojmenování.
Příklad: const
modifikátor zahrnuje static
a readonly
Zvažte následující dvě pravidla pojmenování:
- Konstantní pole jsou PascalCase.
- Neveřejná
static
pole jsou s_camelCase.
Pravidlo 2 je konkrétnější a má přednost, takže všechna neveřejná konstantní pole jsou s_camelCase. Pokud chcete tento problém vyřešit, můžete definovat pravidlo průniku: neveřejná konstantní pole jsou PascalCase.
Výchozí styly pojmenování
Pokud nezadáte žádná vlastní pravidla pojmenování, použijí se následující výchozí styly:
Pro třídy, struktury, výčty, vlastnosti, metody a události s libovolnou přístupností je výchozí styl pojmenování pascal případ.
Pro rozhraní s jakoukoli přístupností je výchozím stylem pojmenování pascal případ s požadovanou předponou I.
ID pravidla kódu: IDE1006 (Naming rule violation)
Všechny možnosti pojmenování mají ID IDE1006
pravidla a název Naming rule violation
. Závažnost porušení názvů můžete nakonfigurovat globálně v souboru EditorConfig s následující syntaxí:
dotnet_diagnostic.IDE1006.severity = <severity value>
Hodnota závažnosti musí být warning
nebo musí být vynucena při sestaveníerror
. Všechny možné hodnoty závažnosti najdete na úrovni závažnosti.
Příklad: Velká písmena veřejného člena
Následující soubor .editorconfig obsahuje konvenci pojmenování, která určuje, že veřejné vlastnosti, metody, pole, události a delegáty, které jsou označeny readonly
, musí být velkými písmeny. Tato konvence vytváření názvů určuje více druhů symbolů, na které se má pravidlo použít, a to pomocí čárky k oddělení hodnot.
[*.{cs,vb}]
# Defining the 'public_symbols' symbol group
dotnet_naming_symbols.public_symbols.applicable_kinds = property,method,field,event,delegate
dotnet_naming_symbols.public_symbols.applicable_accessibilities = public
dotnet_naming_symbols.public_symbols.required_modifiers = readonly
# Defining the 'first_word_upper_case_style' naming style
dotnet_naming_style.first_word_upper_case_style.capitalization = first_word_upper
# Defining the 'public_members_must_be_capitalized' naming rule, by setting the
# symbol group to the 'public symbols' symbol group,
dotnet_naming_rule.public_members_must_be_capitalized.symbols = public_symbols
# setting the naming style to the 'first_word_upper_case_style' naming style,
dotnet_naming_rule.public_members_must_be_capitalized.style = first_word_upper_case_style
# and setting the severity.
dotnet_naming_rule.public_members_must_be_capitalized.severity = suggestion
Příklad: Pole privátní instance s podtržítkem
Tento fragment kódu souboru .editorconfig vynucuje, aby pole privátní instance měla začínat _
hodnotou ; pokud tato konvence není dodržena, integrované vývojové prostředí (IDE) s ním bude zacházet jako s chybou kompilátoru. Privátní statická pole se ignorují.
Protože můžete definovat pouze skupinu symbolů na základě identifikátorů, static
které má (například nebo readonly
), a ne identifikátory, které nemá (například pole instance, protože static
neobsahuje), musíte definovat dvě pravidla pojmenování:
- Všechna soukromá pole (
static
nebo ne) by měla mítunderscored
použitý styl pojmenování jako kompilátorerror
. - U soukromých polí
static
by měl býtunderscored
použit styl pojmenování s úrovnínone
závažnosti ; jinými slovy tento případ ignorujte.
[*.{cs,vb}]
# Define the 'private_fields' symbol group:
dotnet_naming_symbols.private_fields.applicable_kinds = field
dotnet_naming_symbols.private_fields.applicable_accessibilities = private
# Define the 'private_static_fields' symbol group
dotnet_naming_symbols.private_static_fields.applicable_kinds = field
dotnet_naming_symbols.private_static_fields.applicable_accessibilities = private
dotnet_naming_symbols.private_static_fields.required_modifiers = static
# Define the 'underscored' naming style
dotnet_naming_style.underscored.capitalization = pascal_case
dotnet_naming_style.underscored.required_prefix = _
# Define the 'private_fields_underscored' naming rule
dotnet_naming_rule.private_fields_underscored.symbols = private_fields
dotnet_naming_rule.private_fields_underscored.style = underscored
dotnet_naming_rule.private_fields_underscored.severity = error
# Define the 'private_static_fields_none' naming rule
dotnet_naming_rule.private_static_fields_none.symbols = private_static_fields
dotnet_naming_rule.private_static_fields_none.style = underscored
dotnet_naming_rule.private_static_fields_none.severity = none
Tento příklad také ukazuje, že definice entit lze znovu použít. Styl underscored
pojmenování se používá jak v pravidlech private_fields_underscored
private_static_fields_none
pojmenování, tak i v pravidlech pojmenování.