Всем привет!

Как я заметил, немало людей использует 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'а?

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

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

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


  1. workless
    11.01.2016 09:30
    +5

    ZenSharp


    1. RouR
      11.01.2016 10:34
      +6

      image
      image

      A shortcuts language for defining ReSharper live template items.

      github.com/ulex/ZenSharp


      1. imanushin
        11.01.2016 11:58

        Очень круто, спасибо!


        1. return_true
          12.01.2016 16:56

          Я ещё использую Mnemonics. + N своих темплейтов. Не так круто, как ZenSharp, то мне норм.


  1. CepbluBoJlk
    11.01.2016 12:49
    +4

    Я бы добавил github.com/controlflow/resharper-heapview, можно много нового узнать


    1. imanushin
      11.01.2016 13:23

      Да, согласен. Позволяет в самом начале ловить проблемы с производительностью.


  1. CepbluBoJlk
    11.01.2016 13:36
    +1

    И еще один плагин, тоже от Шведова, для счастливых обладателей 9.x решарпера, github.com/controlflow/resharper-postfix, в 10 он уже вроде как встроен


    1. imanushin
      11.01.2016 13:53

      Да, в 10м он уже встроен.


  1. BloodUnit
    11.01.2016 16:39
    +1

    AgentMulder, незаменимая вещь при работе с DI.


  1. constructor
    12.01.2016 16:22
    +1

    я не только часто использую, но еще и сам пишу ;) (https://github.com/constructor-igor/NUnit.That.Resharper.Plugin)


  1. return_true
    12.01.2016 16:58
    +1

    В последнем релизе AsyncSuffix добавилась возможность определять свои «асинхронные» типы. Ну, вдруг у вас там IAsyncEnumerable есть.
    image


  1. derigel
    12.01.2016 17:28
    +1

    Если у вас есть вопросы про написание плагинов к решарперу — спрашивайте ;)

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