Как исправить нарушение Stylecop SA1305 (венгерский)
-
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
- Снимите правило из набора результатов
- Нажмите Применить - ОК
- Повторный полицейский стиль снова правит.