Программист
0,0
рейтинг
11 января в 09:02

Разработка → Полезные дополнения к ReSharper



Всем привет!

Как я заметил, немало людей использует 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 в комментарии.
Как часто Вы пользуетесь плагинами ReSharper'а?

Проголосовало 223 человека. Воздержалось 39 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Игорь Манушин @imanushin
карма
21,0
рейтинг 0,0
Программист
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Разработка

Комментарии (12)

  • +5
    ZenSharp
    • +6
      image
      image
      A shortcuts language for defining ReSharper live template items.

      github.com/ulex/ZenSharp
      • 0
        Очень круто, спасибо!
        • 0
          Я ещё использую Mnemonics. + N своих темплейтов. Не так круто, как ZenSharp, то мне норм.
  • +4
    Я бы добавил github.com/controlflow/resharper-heapview, можно много нового узнать
    • 0
      Да, согласен. Позволяет в самом начале ловить проблемы с производительностью.
  • +1
    И еще один плагин, тоже от Шведова, для счастливых обладателей 9.x решарпера, github.com/controlflow/resharper-postfix, в 10 он уже вроде как встроен
    • 0
      Да, в 10м он уже встроен.
  • +1
    AgentMulder, незаменимая вещь при работе с DI.
  • +1
    я не только часто использую, но еще и сам пишу ;) (https://github.com/constructor-igor/NUnit.That.Resharper.Plugin)
  • +1
    В последнем релизе AsyncSuffix добавилась возможность определять свои «асинхронные» типы. Ну, вдруг у вас там IAsyncEnumerable есть.
    image
  • +1
    Если у вас есть вопросы про написание плагинов к решарперу — спрашивайте ;)

    P.S. www.jetbrains.com/resharper/devguide/README.html

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.