Как исправить нарушение Stylecop SA1305 (венгерский)

StackOverflow https://stackoverflow.com/questions/4857429

  •  27-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

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

Что касается "D3DDevice" - это очень интересный случай. По логике, он разбивает следующие слова - {"D", "3", "D", "Device"} или {"D3", "D", "Device"}. И второй «D», кажется, не следует за «верблежом».

Но я твердо верю, что статический анализ (особенно именование) должен быть достаточно гибким, чтобы удовлетворить потребности пользователей. В настоящее время 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;

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

Вы также можете использовать 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
  • Снимите правило из набора результатов
  • Нажмите Применить - ОК
  • Повторный полицейский стиль снова правит.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top