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

mpg*_*mpg 9 stylecop hungarian-notation

我的代码包含一个名为"m_d3dDevice"的变量.

StyleCop抱怨这个名字:

SA1305:变量名称'm_d3dDevice'以类似匈牙利表示法的前缀开头.删除前缀或将其添加到允许的前缀列表中.

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

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

有什么建议使StyleCop允许这个吗?现在不需要F2我的变量是一件值得骄傲的事.

Der*_*ark 12

您还可以根据具体情况抑制stylecop.例如

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

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


Ole*_*uev 7

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

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

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

m _ $(aaBb)
m_d3d $(AaBb)

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

谢谢你有趣的例子!

  • 一个非常有用的帖子,所以我来自+1.但作为一个公平的警告,因为看起来你既是Stack Overflow的新手,又是StyleCop +的作者或与StyleCop +密切相关的人.您可能希望明确说明您的联盟(例如,通过包含一个简单的免责声明),以便用户不会将您的帖子标记为垃圾邮件.[FAQ](http://stackoverflow.com/faq)的最底层也简要讨论了这一点.但无论如何,欢迎访问该网站,并感谢您分享您的专业知识! (2认同)

7vi*_*am7 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>
Run Code Online (Sandbox Code Playgroud)

您可以Hungarain通过将以下内容添加到Settings.StyleCop文件中来取消规则本身

<Analyzer AnalyzerId="StyleCop.CSharp.NamingRules">
  <Rules>
   <Rule Name="FieldNamesMustNotUseHungarianNotation">
    <RuleSettings>
     <BooleanProperty Name="Enabled">
        False
     </BooleanProperty>
    </RuleSettings>
   </Rule>
 </Rules>
</Analyzer>
Run Code Online (Sandbox Code Playgroud)