Come risolvere la violazione di StyleCop SA1305 (ungherese)
-
27-10-2019 - |
Domanda
Il mio codice contiene una variabile denominata "m_d3dDevice".
StyleCop si lamenta di questo nome:
SA1305:Il nome della variabile 'm_d3dDevice' inizia con un prefisso che assomiglia alla notazione ungherese.Rimuovere il prefisso o aggiungerlo al Elenco dei prefissi consentiti.
(Nota che ho disabilitato manualmente SA1308 ("m_"), una delle poche regole a cui sono disposto a disobbedire.)
Non posso consentire "d3d" come eccezione nella scheda ungherese, poiché consente solo 1 o 2 prefissi di carattere e consentire "d3" non è stato d'aiuto.Ho provato tutto ciò che mi viene in mente per aggiungere "d3d" al mio file CustomDictionary (e comunque i documenti implicano che CustomDict non sia utilizzato per la regola 1305).
Qualche suggerimento per fare in modo che StyleCop lo consenta?Ora è motivo di orgoglio non dover F2 sulla mia variabile.
Soluzione
Potresti dare un'occhiata StileCop+.Contiene regole di denominazione flessibili che ti permetteranno di forzare il nome di tutti i campi privati che iniziano con "m_" (o qualunque cosa desideri) invece di disabilitare il controllo del nome (come hai fatto tu).
Per quanto riguarda "d3dDevice", è un caso molto interessante.Logicamente, si divide nelle seguenti parole: { "d", "3", "d", "Dispositivo" } o { "d3", "d", "Dispositivo" }.E la seconda "d" sembra non seguire "camelNotation".
Ma sono fermamente convinto che l'analisi statica (in particolare la denominazione) dovrebbe essere sufficientemente flessibile da soddisfare le esigenze degli utenti.Attualmente StyleCop+ può supportare il tuo caso nel modo seguente: ad esempio, puoi aggiungere "eccezioni" (quante quante vuoi) al modello di denominazione per i campi privati, in modo che assomigli a:
m_$(aaBb)
m_d3d$(AaBb)
È più probabile che si tratti di una soluzione alternativa, ma penserò al tuo caso "d3d" e forse StyleCop+ supporterà qualcosa di simile.
Grazie per l'interessante esempio!
Altri suggerimenti
Puoi anche sopprimere lo stylecop caso per caso. per esempio
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.StyleCop.CSharp.NamingRules",
"SA1305:FieldNamesMustNotUseHungarianNotation",
Justification = "Using Win32 naming for consistency.")]
IntPtr hFile;
Questa potrebbe non essere un'opzione attraente se hai numerosi nomi offensivi, ma per uno o due va bene.
Puoi anche usare il Settings.StyleCop
Nei file del pacchetto per configurare le impostazioni.
Puoi sopprimere parole specifiche aggiungendo sotto il codice al Settings.StyleCop
file:
<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
<AnalyzerSettings>
<CollectionProperty Name="Hungarian">
<Value>as</Value>
<Value>do</Value>
<Value>id</Value>
<Value>if</Value>
<Value>in</Value>
<Value>ip</Value>
<Value>is</Value>
<Value>mx</Value>
<Value>my</Value>
<Value>no</Value>
<Value>on</Value>
<Value>to</Value>
<Value>ui</Value>
<Value>vs</Value>
<Value>x</Value>
<Value>y</Value>
<Value>z</Value>
<Value>iOS</Value>
<Value>IOS</Value>
</CollectionProperty>
</AnalyzerSettings>
</Analyzer>
Puoi sopprimere il Hungarain
Regola stessa aggiungendo quanto segue al Settings.StyleCop
file
<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
<Rules>
<Rule Name="FieldNamesMustNotUseHungarianNotation">
<RuleSettings>
<BooleanProperty Name="Enabled">
False
</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
</Analyzer>
L'aggiunta di attributo di soppressione dovrebbe essere eseguito sopra tutti i metodi che richiederanno tempo e un lungo processo.
Se desideri rimuovere questa regola dal tuo progetto, prova questo
- Fare clic con il tasto destro sul tuo progetto
- Seleziona Impostazioni StyleCop
- Trova SA1305
- Deseleziona la regola dal set di risultati
- Fare clic su Applica - OK
- REGOLE DI REGOLA DI RERUN STILE DI ANCORA.