Всем привет!
Как я заметил, немало людей использует ReSharper, однако полностью игнорируют его расширения (плагины). В этой статье я опишу те из них, которые показались мне полезными.
Названия расширений кликабельны и ведут на их детальное описание.
Respeller Free
Расширение для нахождения орфографических ошибок. Крайне полезно в случаях, когда пишутся комментарии, создается публичный API, пишется текст в лог. В этих случаях, обычно, тексты не даются техническим писателем, а лишь проверяются в процессе review. И если есть орфографические ошибки, то и Ctrl-F по логам может выдавать не те результаты (ведь буквы пропущены), и Ctrl-T по проекту не покажет класс (по тем же причинам).
В нем же можно создать свой словарь, который хранится в настройках ReSharper стандартным образом (т.е. иерархично: настройки команды, свои настройки и пр.)
Enhanced Tooltip
Улучшатель подсказок при наведении мыши (англ. — tooltip) или в Code Completion меню (т.е. при нажатии Ctrl-Space). В отличии от стандартного, он также:
- Подсвечивает синтаксис: картинка
- Показывает xmldoc, в том числе информацию об исключении и т.д. (что не делают студия + ReSharper)
- Выводит информацию о NotNull/CanBeNull аттрибутах
- Показывается как при выборе функции по Ctrl-Space, так и при наведении мыши
- Настраивается: картинка
Мне это расширение не раз помогало, чтобы быстро понять информацию об исключениях, а также о том, когда результат работы функции может (или не может) быть null'ом
Community External Annotations
ReSharper поддерживает разметку кода NotNull/CanBeNull аттрибутами, а также рядом других (например, StringFormatMethodAttribute), которые помогают ему понять множество возможных значений для аргументов или результатов. Например, если результат работы функции с CanBeNull атрибутом передается в функцию с NotNull аргументом, то это место в коде будет подчеркнуто, как потенциально опасное (кстати, совет ребятам SvyatoslavMC, Andrey2008 из PVS Studio Team: добавить к себе эти проверки тоже). Однако, вместо добавления атрибутов к коду, можно создать специальный xml-файл, в котором будут описаны они же. Этот способ подходит для библиотек, код которых не изменить, однако поведение уже более-менее изучено. Подобным образом JetBrains разметила ряд популярных библиотек, таких как log4net и пр.
В Community External Annotations добавлены подсказки еще для ряда популярных проектов. Более того, если вы уже изучили определенную библиотеку, знаете подводные камни, то можете закоммитить аннотации в git, и они появятся у всех разработчиков (которые используют ReSharper, конечно).
ConfigureAwait Checker и AsyncSuffix
Если Вы пишете код с Task'ами, то эти расширения — просто Must Have. Меня они уже не раз спасали от багов.
ConfigureAwait Checker требует, чтобы все await'ы заканчивались ConfigureAwait(true) или ConfigureAwait(false). По умолчанию компилятор будет считать, что после await небходимо вернуться в свой контекст синхронизации (т.е. как с ConfigureAwait(true)), что далеко не всегда правильно. Например, если вы запустили из UI долгую Background Task, то в идеале она должна вернуться в UI контекст только в самом конце (чтобы увеличить отзывчивость приложения, путем уменьшения нагрузки на этот поток). Однако, если где-нибудь Вы забыли проставить ConfigureAwait(false), то возврат произойдет намного раньше (так как вся последовательность вызовов настраивается в начале, то есть, в нашем случае, в UI потоке). С другой стороны, если явно не проставлен флаг, возвращаться обратно или нет, то не всегда понятно: в этом месте следует сменить контекст на первоначальный, или же просто разработчик забыл проставить ConfigureAwait(false). С этим расширением никто никогда не забудет явно написать, где требуется выполнять код после await.
Расширение AsyncSuffix требует, чтобы асинхронные методы заканчивались словом Async. Крайне полезно в случае рефакторингов, так как позволяет подсветить в review все превращения синхронного метода в асинхронный (что уменьшает вероятность того, что что-то забыли). А заодно унифицирует код, так что по сигнатуре метода становится ясна многопоточная идея.
Заключение
На деле у ReSharper'а есть еще много расширений. Большинство оставшихся специфичны под определенную технологию, например AngularJS или xUnit Tests Support ReSharper. Однако, расширения выше уже ускоряют скорость разработки и уменьшают вероятность багов. Если есть еще советы — welcome в комментарии.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (12)
CepbluBoJlk
11.01.2016 12:49+4Я бы добавил github.com/controlflow/resharper-heapview, можно много нового узнать
imanushin
11.01.2016 13:23Да, согласен. Позволяет в самом начале ловить проблемы с производительностью.
CepbluBoJlk
11.01.2016 13:36+1И еще один плагин, тоже от Шведова, для счастливых обладателей 9.x решарпера, github.com/controlflow/resharper-postfix, в 10 он уже вроде как встроен
constructor
12.01.2016 16:22+1я не только часто использую, но еще и сам пишу ;) (https://github.com/constructor-igor/NUnit.That.Resharper.Plugin)
return_true
12.01.2016 16:58+1В последнем релизе AsyncSuffix добавилась возможность определять свои «асинхронные» типы. Ну, вдруг у вас там IAsyncEnumerable есть.
derigel
12.01.2016 17:28+1Если у вас есть вопросы про написание плагинов к решарперу — спрашивайте ;)
P.S. www.jetbrains.com/resharper/devguide/README.html
workless
ZenSharp
RouR
github.com/ulex/ZenSharp
imanushin
Очень круто, спасибо!
return_true
Я ещё использую Mnemonics. + N своих темплейтов. Не так круто, как ZenSharp, то мне норм.