Вы можете использовать пользовательские паттерны для проверки кода.В Visual Studio зайдите в Настройки, РешарперВ категории «Проверка кода» найдите «Пользовательские шаблоны».Там вы можете добавить свои собственные вставки кода поверх многих встроенных проверок.
Самый простой способ получить то, что вам нужно, это сохранить следующий фрагмент текста в XML-файл:
<CustomPatterns>
<Pattern Severity="SUGGESTION" FormatAfterReplace="True" ShortenReferences="True" Language="CSHARP">
<Comment>Event call is not thread-safe</Comment>
<ReplaceComment>Convert to thread-safe event call</ReplaceComment>
<ReplacePattern><![CDATA[var eventHandler = $SomeEvent$;
if (null != eventHandler)
{
eventHandler($args$);
}
]]></ReplacePattern>
<SearchPattern><![CDATA[if ($SomeEvent$ != null)
{
$SomeEvent$ ($args$);
}
]]></SearchPattern>
<Params>
<IgnoreBracesInSingleStatementBlocks>False</IgnoreBracesInSingleStatementBlocks>
<IgnoreParanthesisInExpressions>False</IgnoreParanthesisInExpressions>
<SmartMatchAssociativeExpressions>False</SmartMatchAssociativeExpressions>
<TreatReversedBinaryExpressionsEquivalent>Never</TreatReversedBinaryExpressionsEquivalent>
</Params>
<Placeholders>
<ArgumentPlaceholder Name="args" Minimal="-1" Maximal="-1" />
<ExpressionPlaceholder Name="SomeEvent" ExpressionType="System.EventHandler" ExactType="False" />
</Placeholders>
</Pattern>
</CustomPatterns>
И используйте функцию импорта для проверки кода.Вы можете увидеть, что я сделал, и узнать на примере.
Это даст вам более четкую подсказку в VS и предложит исправление, где бы ни происходил паттерн.Вы можете использовать «Найти сейчас», чтобы найти все вхождения шаблона поиска.
Одно большое НО (к сожалению).Фиксированный шаблон также распознается как подозреваемыйЕдинственный способ исправить это, насколько я могу видеть сейчас, это сделать шаблон поиска менее универсальным.
Редактировать:
Я не сделалМне не понравился мой последний комментарий, поэтому я все-таки попытался что-то с этим сделать.Я изменил XML, и теперь он работает.Хитрость заключалась в том, чтобы отменить сравнение в коде замены (if (null != eventHandler)
) и отключить «сопоставлять аналогичные конструкции».Я сам начал использовать эту проверку кода, на самом деле это была отличная идея!