Как исправить нарушение StyleCop SA1305 (венгерский) - PullRequest
9 голосов
/ 01 февраля 2011

Мой код содержит переменную с именем "m_d3dDevice".

StyleCop жалуется на это имя:

SA1305: имя переменной 'm_d3dDevice' начинается с префикса, который выглядит как венгерскийнотации.Удалите префикс или добавьте его в список разрешенных префиксов.

(Обратите внимание, что я вручную отключил SA1308 ("m_"), одно из немногих правил, которые я готов не подчиняться.)

Я не могу разрешить "d3d" как исключение на вкладке "Венгерский", так как он допускает только 1 или 2 префикса символов, а разрешение "d3" не помогло.Я перепробовал все, что мог придумать, чтобы добавить «d3d» в мой файл CustomDictionary (и в любом случае документы подразумевают, что CustomDict не используется для правила 1305).

Какие-либо предложения сделать так, чтобы StyleCop позволял это?Теперь это гордость - не иметь F2 для моей переменной.

Ответы [ 4 ]

12 голосов
/ 24 апреля 2013

Вы также можете отключить stylecop в каждом конкретном случае.например,

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

Это может быть не очень привлекательным вариантом, если у вас есть множество оскорбительных имен, но для одного или двух обычно это нормально.

7 голосов
/ 01 февраля 2011

Вы можете взглянуть на StyleCop + . Он содержит гибкие правила именования, которые позволят вам принудительно назначать имена всем частным полям, начинающимся с «m_» (или как вам угодно), вместо того, чтобы отключать проверку имен (как вы сделали).

Что касается "d3dDevice" - это очень интересный случай. По логике он разделяется на следующие слова - {"d", "3", "d", "Device"} или {"d3", "d", "Device"}. И второе «d», похоже, не следует за «camelNotation».

Но я твердо убежден, что статический анализ (особенно именование) должен быть достаточно гибким, чтобы удовлетворить потребности пользователей. В настоящее время StyleCop + может поддерживать ваш случай следующим образом - например, вы можете добавить «исключение» (сколько угодно) в шаблон именования для частных полей, чтобы он выглядел следующим образом:

м _ $ (AABB)
m_d3d $ (AABB)

Скорее всего, это обходной путь, но я подумаю о вашем случае "d3d" - и, возможно, StyleCop + будет поддерживать что-то вроде этого.

Спасибо за интересный пример!

5 голосов
/ 10 августа 2017

Вы также можете использовать 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>
0 голосов
/ 09 февраля 2017

Добавление атрибута подавления должно выполняться поверх всех методов, которые потребуют времени и длительного процесса.

Если вы хотите удалить это правило из вашего проекта, попробуйте это

  • Щелкните правой кнопкой мыши по вашему проекту
  • Выберите настройки Stylecop
  • Найти SA1305
  • Снять отметку с набора результатов
  • Нажмите Применить - ОК
  • Снова правит полицейский в стиле Рерун.
...