Pull to refresh

Полезные дополнения к ReSharper

Reading time3 min
Views18K


Всем привет!

Как я заметил, немало людей использует 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 в комментарии.
Only registered users can participate in poll. Log in, please.
Как часто Вы пользуетесь плагинами ReSharper'а?
23.75% Постоянно57
13.33% Иногда вижу полезные советы/рефакторинги32
15% Крайне редко/почти никогда36
47.92% Не использую115
240 users voted. 40 users abstained.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+12
Comments12

Articles

Change theme settings