10 моих любимых функций CodeRush для .NET разработки в Visual Studio


    Вкратце, DevExpress CodeRush — это платный плагин для Visual Studio, относящийся к классу productivity tools, который позволяет разработчику быстрее писать более качественный код, отлаживать его, запускать тесты, обнаруживать дефекты и выполнять другие полезные функции.

    В этой статье я постарался собрать не просто список своих собственных предпочтений по его использованию, но и провести небольшую валидацию так, чтобы на выходе большинство из представленных фишек использовались другими ребятами в моей команде. Я считаю, что даже несмотря на активное развитие Visual Studio (особенно порадовала 2012я версия) и превращение некоторых из описанных функций в нативные, необходимость в сторонних помощниках типа CodeRush и ReSharper все еще актуальна для части разработчиков, так как позволяет сэкономить время и повысить общее удобство кодирования. Наконец, не стоит забывать, что еще достаточно разработчиков сидят на Visual Studio 2010- (как минимум сужу по множеству заказчиков) ввиду особенностей проекта, бюджета или просто привычки.

    Итак, кому интересно узнать, что другие .NET разработчики используют для повышения эффективности пусть и малой, но не менее увлекательной части процесса конструирования программного обеспечения, прошу пожаловать под кат (внимание, много картинок и видео, а также опрос!)


    Заранее предупреждаю, что моя «горячая десятка» демонстрирует всего лишь малую долю возможностей продукта (про себя думаю, что использую меньше 5%). Для большего удобства читателя помимо русских названий функционала буду приводить типичные для программисткого уха английские названия, указывать клавиатурные сокращения по умолчанию (если есть), а также указывать кое-где аналоги среди стандартных студийных возможностей.

    1. Сворачивание дерева проектов в Solution Explorer для Visual Studio 2010-/Collapse To Projects


    Часто приходится работать с большими решениями, состоящими из десятков проектов, и поэтому данная функция бывает просто незаменима, чтобы найти нужное место в проекте:



    Пользуюсь ей уже несколько лет в разных версиях Visual Studio и пока очень доволен (до появления этой возможности использовал VB-шный макрос, в последних версиях студии макросы вырезали, ЕМНИП). Надеюсь, кому-то эта маленькая функция будет также полезна, так как не все проекты еще используют Visual Studio 2012+, где появилась встроенная кнопка Collapse All прямо в Solution Explorer:



    2. Быстрая навигация по файлам в решении/Quick File Navigation (Control+Alt+F)


    Нередкая ситуация, когда ты знаешь нужный файл с исходным кодом по имени и хочешь быстро в него попасть. Для этого просто незаменима команда Control+Alt+F, которая позволяет сделать переход максимально быстро:



    Начиная с версии Visual Studio 2012 доступна похожая функция в Solution Explorer:



    3. Быстрая навигация по типам и членам в решении/Quick Navigation (Control+Shift+Q)


    Эта опция очень похожа на предыдущую, разница лишь в том, что навигируемся мы уже не по файлам, а по всем типам и их членам:



    Откровенно, если решение просто огромное, то вызов этого диалога поиска без каких-либо дополнительных настроек может давать заметный лаг по понятным причинам. Чтобы этого избежать, рекомендую провести небольшой тюнинг поиска (по разновидностям типов и членов, доступу и области), который поможет избавиться от мусорных результатов и также повысить отзывчивость. Конечно, было бы еще лучше, если бы список не перестраивался при каждом вызове, а кешировался до пересборки (нужно предложить нашей IDE команде сделать такую опцию).

    Как альтернативу я иногда использую старый-добрый студийный поиск, например Control+Shift+F по строке “ss ClassName”, что в принципе тоже неплохо работает. Также вполне для этой цели удобна стандартная Navigate To (Control+,) фишка, но использую я ее гораздо реже:



    4. Навигация по местам использования типов и членов/Tab To Next Reference (Tab/Shift+Tab)


    Это, наверное, одна из моих самых любимых возможностей! Она позволяет быстро узнать, где и как используется какой-то тип или член: например, откуда зовется данный метод. Для этого достаточно установить курсор на нужный объект в коде и нажать клавишу Tab (вперед) или Shift+Tab (назад), что является очень естественным и понятным для любого пользователя Windows:



    Существуют стандартные студийные сокращения (Control+Shift+Arrow Up/Down) для того же самого, но они у меня вызывают небольшую боль в левой руке, хотя, конечно, вы можете все это перенастроить под себя.

    5. Оптимизация пространств имен/Optimize Namespace References (Control+~)


    Я люблю избавляться от ненужных using в файлах, которые я посещаю, и делать так, чтобы все выглядело красиво и опрятно. Если вы такой же using-nazi как и я, то эта фича для вас:



    Хотя эта возможность появилась еще в Visual Studio 2008 (команда Organize Usings из контекстного меню), я до сих пор использую кодерашевский функционал, так как он кажется удобнее за счет подсветки и более быстрого вызова.

    Стоит отметить, что в настройках можно выбрать сортировку по умолчанию, например у меня стоит по длине, вместо алфавитной:



    6. Анализ кода и форматирования/Code Analysis & Code Style (Control+~)


    Вкратце, этот встраиваемый в студию инструмент, по сути, является FxCop + StyleCop в одном флаконе стероидов, который визуально представлен тонкой полоской справа в Code Editor:



    Эта полоска ненавязчиво показывает разноцветные засечки (цвет сигнализирует серьезность проблемы), указывающие программисту на возможные проблемы в коде. Полный список диагностируемых проблем (включая даже дубликатный код в решении!) можно посмотреть тут.
    Как и с другими подобными инструментами этот помощник можно гибко настроить под себя или принятые в компании code rules, чтобы показывались только нужные подсказки:



    И, напоследок, если вы доверяете механизму анализа как своей жене:-), то в меню для файла в Solution Explorer есть волшебная команда Code Cleanup, которая собственно автоматом «почистит» за вас найденные проблемы. Но, если честно, то этой командой я никогда не пользуюсь, так как не люблю, когда кто-то полностью за меня автоматом правит код. Помню даже делал ребятам предложение, чтобы добавили диалог подтверждения для этой команды, так как мне она кажется довольно серьезной (чтобы избежать случайных нажатий в контекстном меню).

    Что касается поиска дупликатного кода (Duplicate Code Detection and Consolidation) и форматирования, то этими фишками я пользуюсь гораздо реже и не буду на них особо заострять внимание, просто оставлю ссылки для тех, кому будет интересно.

    В общем и целом, этот встроенный анализ кода является довольно сносной начальной защитой от дурака или зорким глазом партнера по парному программированию, если хотите. Думаю особенно будет полезно начинающим .NET разработчикам.
    В заключение тут стоит отметить, что помимо упомянутых ранее FxCop/StyleCop с Visual Studio 2012 появилось окошко Code Analysis, выполняющее похожие функции:



    7. Вынос типа в файл, переименования типа или файла/Move Type To File, Rename, Rename File to Match Type (Control+~)


    Многие считают хорошим тоном иметь в одном исходном файле только один публичный класс, и если это вдруг не так, то команда Move Type To File поможет это максимально быстро исправить. Родственная команда Rename File to Match Type позволяет переименовать файл по имени типа, находящегося в нем, если вдруг их имена не совпадают. Ну и, наконец, вы можете переименовать любой типа или член через интуитивное нажатие F2, предварительно поставив курсор на нужный элемент:



    8. Добавление конструкторов базового типа/Add Missing Constructors (Control+~)


    Частенько при наследовании необходимо реализовать конструкторы базового типа с кучей параметров, которые предпочтительнее бы не набирать самому, а лучше скопировать откуда-то или нагенерить автоматом. Данная команда позволяет сделать всю рутинную работу в один мышиный клик или за пару нажатий клавиш на клавиатуре:


    До этого я обычно перемещался к объявлению базового типа через F12 и копировал сигнатуру его конструкторов.

    9. Вынос метода или переменной/Extract Method, Widen Scope (Control+~)


    Очень часто бывает нужно упростить какой-то метод или сделать область видимости переменной более широкой. Я предпочитаю для этих задач возможности CodeRush:



    , хотя и стоит, наверное, упомянуть, что тоже самое, но чуть менее удобно, можно сделать и через встроенный рефактор:



    10. Шаблоны для быстрой генерации кода/Code Generation Templates


    Тут я бы хотел перечислить наиболее часто используемые мной сокращения, которые наверное пригодятся почти в любой программе:
    • сс – добавляет конструктор к типу. Несмотря на простоту, это довольно умный шаблон, который в отличие от стандартного анализирует члены типа и предлагает добавить их как параметры, что бывает часто удобно.
    • f – добавляет цикл for, причем может автоматом брать верхнюю границу из ранее скопированной в буфер обмена переменной, например коллекции.
    • fe – добавляет цикл foreach, причем может автоматом вычислить тип элемента по ранее скопированной в буфер обмена переменной, например коллекции.
    • r?, p? — добавляет новое свойство типа, который обычно выбирается по первой букве. Например, p сделает свойства типа object, pi сделает своство типа int, pd – свойство типа double, pb — bool и так далее. Если нужно свойство только для чтения, то вместо p используется r, например rb.
    • x?
      По роду своей деятельности часто создаю модели данных для наших фреймворков XAF и XPO, поэтому использую специальные шаблоны, которые по умолчанию начинаются с x (xc, xp?, xr?, xpcl, xpa)


    На видео продемонстрированы все вышеописанные комбинации в действии:



    С этими сокращениями по первой букве все интуитивно просто и понятно, разве кроме единственного исключения, которое обычно вызывает у меня улыбку: если использовать шаблон pdt, который в моем мире должен выдавать свойство типа DateTime, то получим на выходе свойство типа DataTable – не очень похоже на самый часто используемый тип разработчиками во всем мире:-). Для самого же DateTime используется «тонкий» pd8 (от схожего звучания date c «д» + «восемь» по-английски). Благо все это можно опять же гибко настроить через диалог настроек, в котором также можно создать собственные шаблоны:



    Конечно же это не все шаблоны или сокращения и, кому интересно, можно будет посмотреть полный список вот тут или вызвать прямо в Visual Studio через комбинацию Control+Alt+/ (хотя честно сомневаюсь, что в мире кто-то использует и 20% от общего числа этих сокращений).

    В плане сокращений я, можно сказать, немножко нестандартной ориентации, так как умудряюсь пользоваться одновременно как стандартными студийными средствами (Insert Code Snipped, что по Control+K+X), так и кодерашевскими, правда они почти не пересекаются:



    11.
    <irony>Unload CodeRush for certain projects</irony>


    Ни для кого, наверное, не секрет, что любые расширения для Visual Studio, какими бы хорошими они не были, не ускоряют работу самой IDE. Что уж говорить, когда речь идет о манипулировании просто огромными решениям, например из 80ти и больше проектов – в таких случаях сама «чистая» студия уже еле шевелится, не то что с плагинами… В такие моменты даже у самых лояльных пользователей вот вот да и закрадется мысль поскорее отключить все дополнительные свистелки, ну или как-то минизировать их воздействие:



    В частности, мне бы было очень полезно иметь возможность включать функции CodeRush только для нужных проектов, с которыми, например, чаще всего работаешь. Сейчас такой фишки нет, но если бы была, то тогда она точно бы попала в список моих любимых, поэтому и занимает почетное одиннадцатое место, хоть и виртуальное:-)

    Конечно же, это не все фишки, которые я использую и есть еще куча мелких и приятных плюшек, которые не заслуживают отдельных пунктов (структурная подстветка кода, проверка правописания, выбор цвета в коде, «умные» скобки, визуализация глубокой отладки и еще 100500 других возможностей).

    В заключение


    Помню пару лет назад мне очень понравилось, когда ребята из нашей команды IDE сделали Friction Free режим работы, который позволяет гибко настроить CodeRush именно под ваш стиль кодирования. Это было сделано специально, чтобы минимизировать воздействие искусственного интелекта помощника, а именно, чтобы он не думал, что лучше вас знает, что вам любо и не любо, и не добавлял непонятные куски кода в ответ на случайные нажатия на клавиатуре. Конкретно, этот «silent mode» показывает подтверждение, если во время набора вы выполнили какую-то CodeRush команду:



    Т.е. если вам понравилось, что произошло, то вы можете разрешить ему делать это и дальше. Так со временем, просто делая свою обычную работу, вы сможете научить CodeRush делать только то, что вам нужно, и совсем не вмешиваться в привычный процесс кодирования (несколько лет назад он и правда грешил этим), при этом не ломая ваши привычки, что, как известно, является одним из признаков софта, которым приятно пользоваться. Помню, когда эта возможность только появилась, я специально выставил этот режим и смог избавиться от нескольких надоедливых фишек этого «умника», которые иногда случайно вызывались, но которые мне не хватало духа и времени найти в настройках и отрубить.

    Возможно также будет интересно:


    CodeRush for Visual Studio (страница продукта с описанием полных возможностей и ссылкой на скачку пробной версии)
    Search and Navigation Tips/Tricks with Visual Studio (статья про стандартные возможности IDE из блога Scott Guthrie)
    Остерегайтесь инструментов повышения производительности (горячая дискуссия на Хабре)
    DevExpress CodeRush Tips & Tricks (частный блог о применении инструмента)
    Статьи про CodeRush на Хабре

    С уважением,
    Денис

    P.S.


    1. Я не член команды IDE, которая разрабатывает этот продукт, хотя и сижу сейчас ними на одном этаже. Поэтому прошу рассматривать данный пост всего лишь как личное мнение рядового пользователя CodeRush. Официальная позиция команды IDE или статистика по TOП возможностей может вполне не совпадать с моей. Данный пост возник спонтанно как результат лояльности к данному продукту и наличию пары свободных деньков на новогодних каникулах.
    2. Если кто-то из читателей также использует CodeRush, то прошу, так сказать, обменяться опытом, и поделиться своими любимыми списками фишек продукта (или даже его аналогов) в комментариях. Так получилось, что после 3го курса института (где, кстати, баловался Visual Assist), сразу попал в DevExpress, где сильно привязался к CodeRush, и в итоге после этого никаких других подобных инструментов глубоко не смотрел. Был бы рад узнать другой опыт и возможно даже что-то перенять для себя, хотя говорят, что выбор IDE productivity tools делается только один раз в жизни...

    Only registered users can participate in poll. Log in, please.

    Какие возможности CodeRush вам нравятся?

    Developer Soft
    74.33
    Company
    Share post

    Comments 28

      +3
      В добавление к пункту голосования «Другое» постоянно использую через Ctrl + ~:
      Promote to Parameter для вынесения части кода из метода в параметры
      Reorder Parameters для методов, которая исправляет автоматически все места вызовов, что удобно

      Introduce Local / Inline temp — для добавления / убирания локальных переменных из части фрагментов кода

      Касательно использования или нет — в настройках в опции Startup галка «Load manually» бывает очень кстати, когда не постоянно приходится открывать много различных проектов с целью изучения, без активного собственного кодирования.
        +7
        Во время чтения статьи не покидало какое-то странное чувство… Вроде бы тебя никто не вспоминает, а все равно хочется икнуть. :)
          +8
          У меня вопрос. Студия сама по себе умеет половину того, что здесь описано.
          Студия с решарпером умеет ВСЕ что здесь описано и еще очень много всего.

          Решарпер стоит 149 баксов для разработчика, и 249 — для компании.
          CodeRush — 249 баксов.

          Собственно, вопрос укладывается в одно слово — зачем?
            +3
            чего-то она там вроде бы умеет, да не так ;-)
              +4
              Точно такой же вопрос хотел задать.
                +1
                Зато она это умеет это красивее)) Решарпер — для нердов, КодРаш — для гиков, думаю так)
                  0
                  В начале поста писал про разработчиков, сидящих на Visual Studio 2010 или более ранних версиях, которые не такие продвинутые как последние. Во-вторых, даже если студия умеет что-то, то инструмент может делать это более изящно, хотя не всегда (например, я использую стандартный Shift+F12 (Find All References) вместо кодерашевского диалога).
                  Ну и, конечно же, студия с CodeRush тоже умеет много всего, что тут не описано.
                    +3
                    Вы можете назвать несколько киллфич, которых нет в решарпере?
                    0
                    А как с тормозами у CodeRush, я помню на VS2008 ставил, было желание попробовать этого зверя, тогда все до жути тормозило?
                      +4
                      Со времен 2008-й было несколько глобальных улучшений производительности. Самые большие это кеш и асинхронный смартег. Думаю, что последние версии не должны оставить впечатление неповоротливого монстра.
                  +1
                  Решарпер напрягся.
                    +3
                    Где?!?
                    0
                    … Для этого достаточно установить курсор на нужный объект в коде и нажать клавишу Tab (вперед) или Shift+Tab (назад), что является очень естественным и понятным для любого пользователя Windows …

                    А я, дурак, думал, что при установке курсора в поле для ввода многострочного текста и нажатии кнопки Tab я добавлю символ табуляции \t очень естественным и понятным для пользователя Windows образом…

                    upd. Алсо, я не помню случаев, чтобы кнопка Tab (не Ctrl-Tab и не Alt-Tab) в какой-то программе могла переключаться между экранами. Фокус на одном экране менять — это да.
                      +4
                      Как часто вы ожидаете вставки символа табуляции находясь курсором в центре имени класса/метода/переменной?
                      Если курсор будет вначале имени, поведение будет абсолютно предсказуемым (добавится ожидаемый \t).
                        –1
                        Всегда (о.о) Или, по крайней мере, я уж точно не жду, что после этого произойдет что-то отличное от «ничего» и «символ табуляции». А как часто вы ожидаете, что при нажатии F2 во время перестрелки в Half Life игра предложит вам изменить имя текущего игрока? Вроде бы кнопка далеко — случайно не заденешь, игра на паузу встанет, а фича кому-нибудь да пригодится, но не покидает ощущение, что что-то здесь не так…

                        Это я к чему. Если есть некое поведение у кнопки, то не стоит лишний раз его изменять, дабы атмосфера офиса не загрязнялась «WTF? Да йопт, WTF? Да чтоб тебя!..». Отмазка «можно задать другую комбинацию» не сработает — первое впечатление об удобстве продукта происходит именно при дефолтных настройках.

                        Например, Resharper вешает свой IntelliSense на Ctrl+Space (правда, добавляя еще одну комбинацию клавиш, но она, ЕМНИП, уж точно никем не используется), а не на что-то еще. Почему-то он не вешает вызов списка предположений на Enter или F1, хотя кто в здравом уме будет ставить перенос внутри имени метода/свойства или сразу после точки (и уж точно по первому чиху не будет звать тяжеловесную справку — он хочет подсказки, а не трехтомным словарем по голове)?..
                          +3
                          Именно для «привередливых» пользователей CodeRush стартует в FrictionFree режиме, чтобы можно было сразу ударить ему по «рукам», если какое-то поведение не устраивает. Но как показывает практика, большинство людей шоткаты по умолчанию вполне устраивают и через небольшой промежуток времени они переключаются в режим Default.
                      0
                      Нормальный поиск по файлам, типам, методам и др. есть и в 2010 студии: Ctrl +,
                        0
                        Да, я упоминал его в п.3.
                        Плюс в 13й студии они избавились от модальности этого окна. Эх, еще бы сделали побольше опций, чтобы можно было сильнее урезать результаты поиска (файл, тип, метод и другие, как в кодераше), а не только по @, тогда и правда задумаюсь о переходе. Вообще приятно видеть, как Visual Studio улучшается последнее время… чую вполне можем увидеть какие-то из перечисленных выше «киллфич» в Visual Studio 201NEXT:-)
                          0
                          Но, если честно говорить, fuzzy matching там не ахти.
                            0
                            злобный офтоп в теме про кодраш, но коль такую тему подняли: в R# если я в окне search type/member/filename (которое по Ctrl+N) введу «DTO\», то лично я бы ожидал, что первыми в списке результатов будут файлы из папки DTO. А на практике первыми идут члены/типы из неймспейса DTO. ИМХО нелогично, backslash вроде как намекает, что я прежде всего файлы ищу.

                    Only users with full accounts can post comments. Log in, please.