Вкратце, 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 No 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.
- Я не член команды IDE, которая разрабатывает этот продукт, хотя и сижу сейчас ними на одном этаже. Поэтому прошу рассматривать данный пост всего лишь как личное мнение рядового пользователя CodeRush. Официальная позиция команды IDE или статистика по TOП возможностей может вполне не совпадать с моей. Данный пост возник спонтанно как результат лояльности к данному продукту и наличию пары свободных деньков на новогодних каникулах.
- Если кто-то из читателей также использует CodeRush, то прошу, так сказать, обменяться опытом, и поделиться своими любимыми списками фишек продукта (или даже его аналогов) в комментариях. Так получилось, что после 3го курса института (где, кстати, баловался Visual Assist), сразу попал в DevExpress, где сильно привязался к CodeRush, и в итоге после этого никаких других подобных инструментов глубоко не смотрел. Был бы рад узнать другой опыт и возможно даже что-то перенять для себя, хотя говорят, что выбор IDE productivity tools делается только один раз в жизни...
Автор: DenisGaravsky