Stylecop SA1305(ハンガリー)の違反を修正する方法
-
27-10-2019 - |
質問
私のコードには、「m_d3ddevice」という名前の変数が含まれています。
Stylecopはこの名前について不満を述べています。
SA1305:変数名「M_D3DDevice」は、ハンガリーの表記のように見えるプレフィックスから始まります。プレフィックスを削除するか、許可されたプレフィックスのリストに追加します。
(私は手動で無効にしたことに注意してください。SA1308( "M_")は、私が望んでいない数少ないルールの1つです。)
ハンガリーのタブでは「D3D」を例外として許可することはできません。1つまたは2つのCharプレフィックスのみを許可しており、「D3」を許可することは役に立たなかったからです。 「D3D」をCustomDictionaryファイルに追加するために考えられるすべてを試しました(とにかく、ドキュメントは、規則1305にはカスタムディクトが使用されていないことを暗示しています)。
Stylecopを許可するための提案はありますか?私の変数をf2する必要がないことは今、誇りの問題です。
解決
あなたは見ることができます stylecop+。これには、名前のチェックを無効にする代わりに、すべてのプライベートフィールドを「M_」(または希望するもの)で名前を付けることができる柔軟な命名ルールが含まれています(あなたがしたように)。
「d3ddevice」に関して - これは非常に興味深いケースです。論理的には、次の単語に分割されます - {"d"、 "3"、 "d"、 "device"}または{"d3"、 "d"、 "device"}。そして、2番目の「D」は「Camelnotation」に従わないようです。
しかし、私は、静的分析(特に命名)はユーザーのニーズを満たすのに十分な柔軟性があるべきであると強く信じています。現在、Stylecop+は次の方法でケースをサポートできます。たとえば、「例外」(必要なだけ)をプライベートフィールドの名前の名前に追加することができます。
m _ $(aabb)
m_d3d $(aabb)
これは回避策になる可能性が高いですが、私はあなたの「D3D」ケースについて考えます - そしておそらくStylecop+はこのようなものをサポートします。
興味深い例をありがとう!
他のヒント
また、ケースバイケースでStylecopを抑制することもできます。例えば
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.StyleCop.CSharp.NamingRules",
"SA1305:FieldNamesMustNotUseHungarianNotation",
Justification = "Using Win32 naming for consistency.")]
IntPtr hFile;
これは、多くの問題のある名前がある場合、魅力的な選択肢ではないかもしれませんが、1つまたは2つは一般的に問題ありません。
使用することもできます Settings.StyleCop
パッケージファイルで、設定を構成します。
以下のコードをに追加することにより、特定の単語を抑制できます 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>
あなたは抑制することができます Hungarain
以下をに追加することにより、それ自体をルールします Settings.StyleCop
ファイル
<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
<Rules>
<Rule Name="FieldNamesMustNotUseHungarianNotation">
<RuleSettings>
<BooleanProperty Name="Enabled">
False
</BooleanProperty>
</RuleSettings>
</Rule>
</Rules>
</Analyzer>
抑制属性の追加は、時間と長いプロセスが必要なすべての方法の上に実行する必要があります。
プロジェクトからこのルールを削除したい場合は、これを試してください
- プロジェクトを右クリックしてください
- StyleCopの設定を選択します
- SA1305を見つけます
- 結果セットからルールをチェックします
- 適用]をクリックします - OK
- Rerun Style Copは再び支配します。