2011-01-31 19 views
8

私のコードには "m_d3dDevice"という名前の変数が含まれています。StyleCop SA1305(ハンガリー語)の違反を修正する方法

StyleCopは、この名前文句:

SA1305:変数名 'm_d3dDeviceは' ハンガリアン記法のように見えるのプレフィックス で始まります。 プレフィックスを削除するか、許可されたプレフィックスのリストに リストを追加してください。

(私は手動で無効SA1308(「M_」)、私は背くことをいとわないよいくつかのルールのいずれかを持っています。)

私はハンガリーでの例外として「D3D」を許可することはできませんタブには1〜2文字の接頭辞しか許されておらず、 "d3"が助けにならないようにしました。私は私のCustomDictionaryファイルに "d3d"を追加することを考えることができます(とにかく、ドキュメントはCustomDictがルール1305に使用されていないことを暗示しています)。

StyleCopでこれを許可するための提案はありますか?私の変数をF2にする必要がないことは今や誇りの問題です。

+0

に以下を追加することにより、Hungarainルール自体を抑制することができる

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

'の略語? –

+0

私は、このルールを満たす唯一の方法は、あなたの変数の名前を 'm_direct3DDevice'のようなものに変更することだと思います。 –

+4

違反を特定するためのばかげた "ルール"とさらにばかげたリトマステスト。そのルールを無効にして、変数に名前を付けるだけの賢さを自分自身に委ねるのは間違っていますか? *ハンガリーの表記を避けるためのブランケットルールは、明らかに、それを使用するルールと同じように馬鹿げています。 –

答えて

6

StyleCop+をご覧ください。 これには柔軟な命名規則が含まれています。これにより、名前チェックを無効にするのではなく、すべてのプライベートフィールドの名前を "m_"(または任意のもの)から始めるように強制できます。

「d3dデバイス」については、非常に興味深いケースです。論理的には、{"d"、 "3"、 "d"、 "Device"}または{"d3"、 "d"、 "Device"}という単語に分割されます。そして第二の "d"は "camelNotation"に従わないようです。

しかし、静的解析(特に命名)は、ユーザーのニーズを満たすのに十分柔軟でなければならないと強く信じています。現在、StyleCop +は次のようにあなたのケースをサポートしています。たとえば、プライベートフィールドのテンプレートの命名に「例外」を追加すると、次のようになります。

m _ $( AABB)
m_d3d $(AABB)

は、これが回避策となる可能性が高いですが、私はあなたの「D3D」の場合について考えます - そして多分StyleCop +はこのような何かをサポートします。

興味深い例をありがとう!

+2

非常に便利な投稿ですので、私から+1してください。しかし、公平な警告として、あなたはStackOffflowの新機能と、StyleCop +の作成者または密接に関連しているようです。ユーザーがあなたの投稿にスパムとしてフラグを立てないように、あなたの所属を明示的にする(単純な免責事項を含めるなど)ことができます。 [FAQ](http://stackoverflow.com/faq)の一番下にもこれについて簡単に説明しています。しかし、関係なく、サイトにようこそ、あなたの専門知識を共有してくれてありがとう! –

+1

StyleCop +をチェックします。ありがとうございます。変数の名前を変更したり、ルールを無効にしたりするのではなく、これを最善の答えとしてマークします。-mpg – mpg

+0

@Codyはい、そうです。私は著者です。警告ありがとう、私は確かにそれを促進するつもりはなかった。私はそれに注意する。 –

11

また、ケースバイケースでスタイルキャップを非表示にすることもできます。例えば

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

多くの嫌な名前がある場合、これは魅力的な選択肢ではないかもしれませんが、1つまたは2つは一般的に問題ありません。

0

抑制属性の追加は、時間とプロセスがかかるすべての方法の上で実行する必要があります。

あなたのプロジェクト

  • 選択Stylecop設定
  • 検索SA1305
  • チェックを外し
  • を結果セットからルールにこの

    • 右クリックをしてみてください、あなたのプロジェクトからこのルールを削除したい場合
    • 適用 - OKをクリックしてください。
    • 再度ルールを再実行してください。
    1

    パッケージファイルでSettings.StyleCopを使用して設定を構成することもできます。

    あなたはSettings.StyleCopファイルにコードの下に追加して、特定の単語を抑制することができます:あなたは「D3Dで何Settings.StyleCopファイル

    <Analyzer AnalyzerId="StyleCop.CSharp.NamingRules"> 
        <Rules> 
        <Rule Name="FieldNamesMustNotUseHungarianNotation"> 
        <RuleSettings> 
        <BooleanProperty Name="Enabled"> 
         False 
        </BooleanProperty> 
        </RuleSettings> 
        </Rule> 
    </Rules> 
    </Analyzer> 
    
    関連する問題