如何修复StyleCop SA1305(匈牙利语)的违规行为

时间:2011-01-31 23:43:55

标签: stylecop hungarian-notation

我的代码包含一个名为“m_d3dDevice”的变量。

StyleCop抱怨这个名字:

  

SA1305:变量名称   'm_d3dDevice'以前缀开头   看起来像匈牙利符号。   删除前缀或将其添加到   允许的前缀列表。

(注意我手动禁用了SA1308(“m_”),这是我愿意不服从的少数规则之一。)

我不能允许“d3d”作为匈牙利标签中的例外,因为它只允许1或2个字符前缀,并且允许“d3”没有帮助。我已经尝试了一些我能想到的将“d3d”添加到我的CustomDictionary文件中(无论如何,文档暗示CustomDict不用于规则1305)。

任何使StyleCop的建议允许这个?现在不用为我的变量而感到骄傲。

4 个答案:

答案 0 :(得分:12)

您还可以根据具体情况抑制stylecop。 e.g。

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

如果您有许多违规名称,这可能不是一个有吸引力的选择,但对于一两个,这通常很好。

答案 1 :(得分:6)

您可以查看StyleCop+。 它包含灵活的命名规则,允许您强制所有私有字段以“m_”(或任何您希望的方式)开头,而不是禁用名称检查(就像您一样)。

关于“d3dDevice” - 这是一个非常有趣的案例。逻辑上,它分为以下单词 - {“d”,“3”,“d”,“Device”}或{“d3”,“d”,“Device”}。第二个“d”似乎不遵循“camelNotation”。

但是,我坚信静态分析(特别是命名)应该足够灵活以满足用户需求。目前,StyleCop +可以通过以下方式支持您的案例 - 例如,您可以将“例外”(根据需要)添加到私有字段的命名模板中,以便它看起来像:

  

米_ $(AABB)
  m_d3d $(AABB)

这更有可能是解决方法,但我会考虑你的“d3d”案例 - 也许StyleCop +会支持这样的事情。

感谢您提供有趣的示例!

答案 2 :(得分:5)

您还可以使用包文件中的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>

答案 3 :(得分:0)

添加抑制属性应该在所有需要时间和漫长过程的方法之上完成。

如果您想从项目中删除此规则,请尝试以下

  • 右键点击您的项目
  • 选择样式设置
  • 查找SA1305
  • 取消选中结果集
  • 中的规则
  • 单击“应用” - “确定”
  • 再次重新运行警察规则。