Naamgevingsregels in codestijl
In het .editorconfig-bestand kunt u naamconventies definiëren voor code-elementen van uw .NET-programmeertaal, zoals klassen, eigenschappen en methoden, en hoe de compiler of IDE deze conventies moet afdwingen. U kunt bijvoorbeeld opgeven dat een openbaar lid dat niet in hoofdletters is geplaatst, moet worden behandeld als een compilerfout of dat als een privéveld niet begint met een _
buildwaarschuwing moet worden uitgegeven.
U kunt met name een naamgevingsregel definiëren, die uit drie delen bestaat:
- De symboolgroep waarop de regel van toepassing is, bijvoorbeeld op openbare leden of privévelden.
- De naamgevingsstijl die u aan de regel wilt koppelen, bijvoorbeeld dat de naam een hoofdletter moet hebben of moet beginnen met een onderstrepingsteken.
- Het ernstniveau van het bericht wanneer code-elementen in de symboolgroep niet de naamgevingsstijl volgen.
Algemene syntaxis
Als u een van de bovenstaande entiteiten wilt definiëren( een naamgevingsregel, symboolgroep of naamgevingsstijl), stelt u een of meer eigenschappen in met behulp van de volgende syntaxis:
<kind>.<entityName>.<propertyName> = <propertyValue>
Alle eigenschapsinstellingen voor een bepaalde kind
en entityName
vormen de definitie van die specifieke entiteit.
Elke eigenschap mag slechts eenmaal worden ingesteld, maar sommige instellingen staan meerdere door komma's gescheiden waarden toe.
De volgorde van de eigenschappen is niet belangrijk.
<soort> waarden
<Type> geeft aan welk type entiteit wordt gedefinieerd: naamgevingsregel, symboolgroep of naamgevingsstijl en moet een van de volgende zijn:
Een eigenschap instellen voor | <De soortwaarde> gebruiken | Opmerking |
---|---|---|
Naamgevingsregel | dotnet_naming_rule |
dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion |
Symboolgroep | dotnet_naming_symbols |
dotnet_naming_symbols.interface.applicable_kinds = interface |
Naamgevingsstijl | dotnet_naming_style |
dotnet_naming_style.pascal_case.capitalization = pascal_case |
<entityName>
<entityName> is een beschrijvende naam die u kiest die meerdere eigenschapsinstellingen aan één definitie koppelt. Met de volgende eigenschappen worden bijvoorbeeld twee definities van symbolengroep geproduceerd, interface
en types
elk met twee eigenschappen die erop zijn ingesteld.
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> en <propertyValue>
Elk type entiteit( naamgevingsregel, symboolgroep of naamgevingsstijl) heeft eigen ondersteunde eigenschappen, zoals beschreven in de volgende secties.
Eigenschappen van symboolgroep
U kunt de volgende eigenschappen voor symboolgroepen instellen om te beperken welke symbolen in de groep zijn opgenomen. Als u meerdere waarden voor één eigenschap wilt opgeven, scheidt u de waarden met een komma.
Eigenschappen | Beschrijving | Toegestane waarden | Vereist |
---|---|---|---|
applicable_kinds |
Soorten symbolen in de groep 1 | * (gebruik deze waarde om alle symbolen op te geven)namespace class struct interface enum property method field event delegate parameter type_parameter local local_function |
Ja |
applicable_accessibilities |
Toegankelijkheidsniveaus van de symbolen in de groep | * (gebruik deze waarde om alle toegankelijkheidsniveaus op te geven)public internal of friend private protected protected_internal of protected_friend private_protected local (voor symbolen die zijn gedefinieerd in een methode) |
Ja |
required_modifiers |
Alleen symbolen vergelijken met alle opgegeven modifiers 2 | abstract of must_inherit async const readonly static of shared 3 |
Nee |
Opmerkingen:
- Tuple-leden worden momenteel niet ondersteund in
applicable_kinds
. - De symboolgroep komt overeen met alle modifiers in de
required_modifiers
eigenschap. Als u deze eigenschap weglaat, zijn er geen specifieke modifiers vereist voor een overeenkomst. Dit betekent dat de modifiers van een symbool geen effect hebben op het al dan niet toepassen van deze regel. - Als uw groep de eigenschap heeft of bevat, bevat
const
de groep ook symbolen omdat ze impliciet/Shared
static
zijn.required_modifiers
shared
static
Als u echter niet wilt dat destatic
naamgevingsregel wordt toegepast opconst
symbolen, kunt u een nieuwe naamgevingsregel maken met een symboolgroep vanconst
. De nieuwe regel heeft voorrang op basis van de regelvolgorde. class
bevat C#-records.
Naamgevingsstijleigenschappen
Een naamgevingsstijl definieert de conventies die u wilt afdwingen met de regel. Voorbeeld:
- Hoofdletters maken met
PascalCase
- Begint met
m_
- Eindigt met
_g
- Woorden scheiden met
__
U kunt de volgende eigenschappen instellen voor een naamgevingsstijl:
Eigenschappen | Beschrijving | Toegestane waarden | Vereist |
---|---|---|---|
capitalization |
Hoofdletterstijl voor woorden binnen het symbool | pascal_case camel_case first_word_upper all_upper all_lower |
Ja1 |
required_prefix |
Moet beginnen met deze tekens | Nee | |
required_suffix |
Moet eindigen met deze tekens | Nee | |
word_separator |
Woorden binnen het symbool moeten worden gescheiden door dit teken | Nee |
Opmerkingen:
- U moet een hoofdletterstijl opgeven als onderdeel van uw naamgevingsstijl, anders wordt uw naamgevingsstijl mogelijk genegeerd.
Naamgevingsregeleigenschappen
Alle naamgevingsregeleigenschappen zijn vereist om een regel van kracht te laten worden.
Eigenschappen | Beschrijving |
---|---|
symbols |
De naam van een symboolgroep die elders is gedefinieerd; de naamgevingsregel wordt toegepast op de symbolen in deze groep |
style |
De naam van de naamgevingsstijl die moet worden gekoppeld aan deze regel; de stijl elders wordt gedefinieerd |
severity |
Hiermee stelt u de ernst in waarmee de naamgevingsregel moet worden afgedwongen. Stel de bijbehorende waarde in op een van de beschikbare ernstniveaus.1 |
Opmerkingen:
- De ernstspecificatie binnen een naamgevingsregel wordt alleen gerespecteerd binnen ontwikkelings-ID's, zoals Visual Studio. Deze instelling wordt niet begrepen door de C#- of VB-compilers, dus niet gerespecteerd tijdens de build. Als u naamgevingsregels wilt afdwingen bij het bouwen, moet u in plaats daarvan de ernst instellen met behulp van de ernstconfiguratie van coderegels. Zie dit GitHub-probleem voor meer informatie.
Regelvolgorde
De volgorde waarin naamgevingsregels zijn gedefinieerd in een EditorConfig-bestand maakt niet uit. De naamgevingsregels worden automatisch geordend volgens de definities van de regels zelf. Meer specifieke regels met betrekking tot toegankelijkheid, modifiers en symbolen hebben voorrang op minder specifieke regels. Als er sprake is van overlapping tussen regels of als de regelvolgorde problemen veroorzaakt, kunt u het snijpunt van de twee regels opsplitsen in een nieuwe regel die voorrang heeft op de bredere regels waaruit deze is afgeleid. Zie Voorbeeld: Overlappende naamgevingsstrategieën en Voorbeeld: const
modifier bevat static
en readonly
.
De editorConfig Language Service-extensie kan een EditorConfig-bestand en rapportcases analyseren waarbij de regelvolgorde in het bestand verschilt van wat de compiler tijdens runtime gaat gebruiken.
Notitie
Als u een versie van Visual Studio gebruikt die ouder is dan Visual Studio 2019, moeten naamgevingsregels worden geordend van meest specifiek naar minst specifiek in het EditorConfig-bestand. De eerste regel die kan worden toegepast, is de enige regel die wordt toegepast. Als er echter meerdere regeleigenschappen met dezelfde naam zijn, heeft de laatst gevonden eigenschap met die naam voorrang. Zie Bestandshiërarchie en prioriteit voor meer informatie.
Voorbeeld: Overlappende naamgevingsstrategieën
Houd rekening met de volgende twee naamgevingsregels:
- Openbare methoden zijn PascalCase.
- Asynchrone methoden eindigen met
"Async"
.
Voor public async
methoden is het niet duidelijk welke regel voorrang heeft. U kunt een nieuwe regel voor public async
methoden maken en de naamgeving exact opgeven.
Voorbeeld: const
modifier bevat static
en readonly
Houd rekening met de volgende twee naamgevingsregels:
- Constante velden zijn PascalCase.
- Niet-openbare
static
velden worden s_camelCase.
Regel 2 is specifieker en heeft voorrang, dus alle niet-openbare constante velden worden s_camelCase. U kunt het probleem oplossen door een snijpuntregel te definiëren: niet-openbare constante velden zijn PascalCase.
Standaardnaamstijlen
Als u geen aangepaste naamgevingsregels opgeeft, worden de volgende standaardstijlen gebruikt:
Voor klassen, structs, opsommingen, eigenschappen, methoden en gebeurtenissen met elke toegankelijkheid is de standaardnaamgevingsstijl Pascal case.
Voor interfaces met elke toegankelijkheid is de standaardnaamgevingsstijl Pascal met een vereist voorvoegsel van I.
Coderegel-id: IDE1006 (Naming rule violation)
Alle naamgevingsopties hebben regel-id IDE1006
en titel Naming rule violation
. U kunt de ernst van naamschendingen globaal configureren in een EditorConfig-bestand met de volgende syntaxis:
dotnet_diagnostic.IDE1006.severity = <severity value>
De ernstwaarde moet worden warning
afgedwongen of error
afgedwongen bij de build. Zie ernstniveau voor alle mogelijke ernstwaarden.
Voorbeeld: Hoofdlettergebruik van openbare leden
Het volgende .editorconfig-bestand bevat een naamconventie waarmee wordt aangegeven dat openbare eigenschappen, methoden, velden, gebeurtenissen en gemachtigden die zijn gemarkeerd readonly
, een hoofdletter moeten hebben. Deze naamconventie specificeert meerdere soorten symbolen waarop de regel moet worden toegepast, met behulp van een komma om de waarden te scheiden.
[*.{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
Voorbeeld: Velden van een privé-exemplaar met onderstrepingsteken
Dit .editorconfig-bestandsfragment dwingt af dat velden van het privé-exemplaar moeten beginnen met een _
; als die conventie niet wordt gevolgd, zal de IDE deze behandelen als een compilerfout. Privé statische velden worden genegeerd.
Omdat u alleen een symboolgroep kunt definiëren op basis van de id's die de groep heeft (bijvoorbeeld static
of readonly
), en niet door de id's die de groep niet heeft (bijvoorbeeld een exemplaarveld omdat deze niet beschikt static
), moet u twee naamgevingsregels definiëren:
- Voor alle privévelden moet
static
deunderscored
naamgevingsstijl al dan niet als compilererror
worden toegepast. - Voor privévelden met
static
moet deunderscored
naamgevingsstijl worden toegepast met een ernstniveau vannone
; met andere woorden, negeer dit geval.
[*.{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
In dit voorbeeld ziet u ook dat entiteitsdefinities opnieuw kunnen worden gebruikt. De underscored
naamgevingsstijl wordt gebruikt door zowel de private_static_fields_none
private_fields_underscored
regels als naamgevingsregels.