2011-01-31 12 views
8

Mój kod zawiera zmienną o nazwie "m_d3dDevice".Jak naprawić naruszenie StyleCop SA1305 (węgierski)

StyleCop narzeka tej nazwie:

SA1305: Zmienna nazwa 'm_d3dDevice' zaczyna się od przedrostka który wygląda jak notacji węgierskiej. Usuń prefiks lub dodaj go do listy dozwolonych prefiksów na stronie .

(Uwaga muszę ręcznie wyłączony SA1308 („M_”), jeden z niewielu zasad jestem skłonny do nieposłuszeństwa.)

Nie mogę pozwolić „D3D” jako wyjątek w węgierskim zakładka, ponieważ zezwala tylko na 1 lub 2 przedrostki znaków, a "d3" nie pomogło. Próbowałem wszystkiego, co mogę wymyślić, aby dodać "d3d" do mojego pliku CustomDictionary (a mimo to dokumenty sugerują, że CustomDict nie jest używany dla reguły 1305).

Jakieś sugestie, aby StyleCop pozwoliły na to? Teraz jest rzeczą dumy, że nie muszę mieć F2 mojej zmiennej.

+0

Settings.StyleCop co jest „D3D "skrót? –

+0

Myślę, że jedynym sposobem na spełnienie tej zasady jest zmiana nazwy zmiennej na coś podobnego do 'm_direct3DDevice', jeśli jest to skrót. –

+4

Co za niedorzeczna "zasada" i jeszcze bardziej śmieszny test lakmusowy, by wykryć naruszenia. Co jest złego w wyłączaniu tej reguły i zaufaniu sobie, aby być wystarczająco inteligentnym, aby nazwać zmienne? Ogólna zasada, aby * uniknąć * "Węgierska notacja najwyraźniej stała się tak absurdalna, jak zasada, że ​​należy z niej korzystać. –

Odpowiedz

6

Możesz rzucić okiem na StyleCop+. Zawiera elastyczne reguły nazewnictwa, które pozwolą wymusić nazwanie wszystkich prywatnych pól zaczynając od "m_" (lub cokolwiek chcesz) zamiast wyłączać sprawdzanie nazw (tak jak robiłeś).

Jeśli chodzi o "d3dDevice" - jest to bardzo interesujący przypadek. Logicznie dzieli się na następujące słowa - {"d", "3", "d", "Urządzenie"} lub {"d3", "d", "Urządzenie"}. Drugi "d" wydaje się nie nadążać za "camelNotation".

Uważam jednak, że analiza statyczna (w szczególności nazywanie) powinna być wystarczająco elastyczna, aby zaspokoić potrzeby użytkowników. Obecnie StyleCop + może obsługiwać skrzynkę w następujący sposób - na przykład możesz dodać "wyjątek" (tyle, ile chcesz) do szablonu nazwy dla pól prywatnych, aby wyglądał:

m _ $ (AABB)
m_d3d $ (AABB)

jest to bardziej prawdopodobne obejście, ale myślę o swojej "D3D" przypadek - a może StyleCop + wesprze coś takiego.

Dziękujemy za interesujący przykład!

+2

Bardzo pomocny post, więc +1 ode mnie. Ale jako rzetelne ostrzeżenie, ponieważ wygląda na to, że jesteś nowicjuszem w Stack Overflow i jesteś autorem lub blisko związanym z StyleCop +. Być może zechcesz wyraźnie podkreślić swoją przynależność (powiedzmy, dołączając proste zastrzeżenie), aby użytkownicy nie zdecydowali się oznaczać swoich wpisów jako spamu. Na samym dole [FAQ] (http://stackoverflow.com/faq) omawiamy to również krótko. Ale niezależnie od tego, witamy na stronie i dziękujemy, że dzielisz się swoją wiedzą! –

+1

Sprawdzę StyleCop +, dziękuję. Ponieważ wydaje się, że nie ma "prawdziwej" odpowiedzi na tę sprawę, pomijając zmianę nazwy zmiennej lub wyłączenie reguły, zaznaczę ją jako najlepszą odpowiedź ... -mpg – mpg

+0

@Cody Tak, masz rację - Jestem autorem. Dziękuję za ostrzeżenie, na pewno nie zamierzałem go promować. Będę o tym ostrożny. –

11

Można również wyłączyć tryb stylecop dla każdego przypadku z osobna. na przykład

[System.Diagnostics.CodeAnalysis.SuppressMessage(
    "Microsoft.StyleCop.CSharp.NamingRules", 
    "SA1305:FieldNamesMustNotUseHungarianNotation", 
    Justification = "Using Win32 naming for consistency.")] 
IntPtr hFile; 

To może nie być atrakcyjną opcję, jeśli masz wiele nazw obraźliwe, ale dla jednej lub dwóch osób, to jest ogólnie w porządku.

0

Dodanie atrybutu suppression należy wykonać na wszystkich metodach, które wymagają czasu i długiego procesu.

Jeśli chcesz usunąć ten przepis z projektu spróbować tej

  • prawym przyciskiem myszy na projekcie Ustawienia
  • Wybierz StyleCop
  • Find SA1305
  • Odznacz reguła od wyniku ustawić
  • Kliknij Zastosuj - OK
  • Ponownie uruchom reguły policjanta.
1

Możesz także użyć Settings.StyleCop w plikach pakietów, aby skonfigurować ustawienia.

Można wyłączyć określone słowa dodając poniżej kod do pliku Settings.StyleCop:

<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> 

można stłumić samą regułę Hungarain przez dodanie następujących do pliku

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules"> 
    <Rules> 
    <Rule Name="FieldNamesMustNotUseHungarianNotation"> 
    <RuleSettings> 
    <BooleanProperty Name="Enabled"> 
     False 
    </BooleanProperty> 
    </RuleSettings> 
    </Rule> 
</Rules> 
</Analyzer>