Возможности поиска и навигации по коду в VS 2010 (из серии статей про VS 2010 и .NET 4.0)

Возможности поиска и навигации по коду в VS 2010 (из серии статей про VS 2010 и .NET 4.0)

Это девятая из серии статей, в которых я пишу о готовящихся к выходу VS 2010 и .NET 4. Сегодня я расскажу о некоторых новых возможностях поиска и навигации по коду, которые теперь встроены в VS 2010.

Поиск и навигация по коду

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

В редакторе кода в VS 2010 появилось несколько приятных новых возможностей, которые сделают ваш поиск и навигацию по коду более продуктивными и позволят легче понимать, как тот или иной код используется в разрабатываемом программном решении.

Поиск и навигация по исходному коду ASP.NET MVC

В этот статье я для примера буду использовать исходный код ASP.NET MVC (насчитывающий многие тысячи строк кода), чтобы продемонстрировать некоторые из новых возможностей VS 2010 по поиску и навигации. Если у вас установлена 2-я бета VS 2010, вы сможете воспроизвести описываемые действия, загрузив исходный кода ASP.NET MVC отсюда.

Вы заметите, что описываемые ниже возможности весьма работают по-настоящему быстро с этим проектом, несмотря на то, что он содержит тысячи и тысячи строк кода. Все возможности, которые я продемонстрирую, теперь встроены в VS 2010 и работают со всеми типами проектов как на VB, так и на C#.

Поддержка “Navigate To” в VS 2010

Иметь возможность быстрого поиска и навигации по коду одинаково важна как для больших, так и для маленьких проектов.

Visual Studio 2010 теперь поддерживает новую комбинацию клавиш Ctrl+ , (т.е. нужно одновременно нажать Ctrl и запятую). При ее нажатии появится диалоговое окно “Navigate To”, позволяющий быстро найти типы, файлы, переменные, а также методы и свойства в вашем решении (solution) и затем перейти к ним и открыть в редакторе кода:

Диалог “Navigate To” предоставляет интерфейс для быстрого инкрементного поиска, результаты которого немедленно появляются под полем ввода по мере того, как вы вводите поисковый запрос. К примеру, напечатайте “cont” (не нажимая в конце enter) - и вы увидите, как в списке результатов поиска сразу же появится 176 результатов:

Введите еще несколько символов - и вы увидите, что список результатов автоматически использует их для фильтрации, оставляя лишь те результаты, которые соответствуют введенной строке “controller”:

Вы можете использовать полосу прокрутки, чтобы просмотреть результаты, либо нажать tab и использовать клавиши стрелок, если не хотите убирать руки с клавиатуры. Вы заметите, что в окне “Navigate To” выводятся результаты любых типов, удовлетворяющие поисковому запросу, включая названия типов, свойств, методов, объявления полей и названия файлов:

Выбор любого из результатов поиска привет к тому, что в редакторе кода VS 2010 откроется соответствующий файл (если он еще не открыт), курсор переместится к соответствующей позиции в файле, а найденный идентификатор будет подсвечен:

Приятные возможности нечеткого поиска

Поле ввода в окне “Navigate To” поддерживает некоторые возможности “нечеткого поиска” (fuzzy search), которые позволят вам эффективно осуществлять поиск даже тогда, когда вы не знаете точно название того, что ищете. Эти возможности хорошо сочетаются с интерфейсом инкрементного/немедленного поиска в этом окне и позволяют вам уточнять поисковый запросы и сразу же видеть новые результаты по мере того, как вы печатаете.

Чтобы опробовать это на примере, давайте для начала поищем по слову “cache”. Обратите внимание, что результаты поиска включают не только названия, начинающиеся со слова “cache”, но также и другие, в названии которых это слово просто где-либо встречается:

Для дальнейшей фильтрации результатов мы можем добавить еще несколько слов в поисковый запрос. Например, ниже я отфильтровал результаты так, чтобы в названиях встречались слова “cache” и “action”:

Названия типов/методов/свойств в .NET Framework используют соглашение под названием “PascalCase” – это значит, что первая буква каждого слова в них делается заглавной. В диалоге “Navigate To” вы можете воспользоваться этим обстоятельством для быстрой фильтрации типов: просто наберите аббревиатуру для слов, входящих в название, - и сразу же увидите результаты поиска, соответствующие этой аббревиатуре с учетом указанного соглашения об именовании.

Например, введя “AMS”, вы получите показанные ниже результаты поиска (лишь те названия типов/методов/свойств, в которых встречаются слова, начинающиеся сначала с A, затем с M, затем с S):

Таким образом, окно “Navigate To” позволяет вам быстро искать код и переходить к нему, используя лишь несколько нажатий клавиш, так что вам уже не понадобится браться за мышь, открывать окно solution explorer и щелкать по нужному файлу.

Просмотр иерархии вызовов

Возможность быстрого поиска и навигации по коду - это здорово, но возможность в дополнение к этому быстро узнать, как используется тот или иной код, - это еще лучше. В VS 2010 появилась новая функциональность “View Call Hierarchy” (просмотр иерархии вызовов), позволяющая быстро узнать, где в вашем исходном коде используется определенный метод или свойство, а также позволяющая быстро пройтись по графу дерева вызовов в рамках вашего исходного кода (без необходимости запускать или отлаживать разрабатываемое решение).

Чтобы воспользоваться этой возможностью, просто выберите название метода или свойства в вашем исходном коде и либо нажмите комбинацию клавиш Ctrl+K,Ctrl+T, либо щелкните правой кнопкой мыши и выберите из контекстного меню пункт “View Call Hierarchy”:

В результате появится вспомогательное окно “Call Hierarchy”, которое по умолчанию располагается под редактором кода. На рисунке ниже вы видите, как в окне “Call Hierarchy” отображаются два метода, которые в рамках нашего решения (solution) вызывают выбранный ранее метод ViewPage.RenderView().

При желании мы можем перейти вниз по иерархии вызовов к первому методу “RenderViewAndRestoreContentType” и посмотреть, кто, в свою очередь, вызывает его:

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

При двойном щелчке мышью по любому методу/свойству в окне “Call Hierarchy” в редакторе кода откроется соответствующий файл с исходным кодом, и текущая позиция в файле установится на нужной строке:

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

Подсветка ссылок

В VS 2010, когда вы выбираете или выделяете переменную / параметр / объявление поля в редакторе кода, все последующие места их использования автоматически подсвечиваются в редакторе. За счет этого вы с легкостью можете быстро определить, где и как используется та или иная переменная или параметр.

Например, когда вы в редакторе кода выделите параметр “controllerContext”, переданный в метод ControllerActionInvoker.GetParameterValue(), как показано ниже, то обратите внимание, как автоматически подсветятся 4 обращения к этому параметру в методе:

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

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

Резюме

Новый редактор кода в VS 2010 позволяет быстро осуществлять поиск, навигацию и исследование исходного кода в рамках проекта или решения. Скорость выполнения этих операций по-настоящему высока (даже на больших объемах исходного кода), а соответствующая информация поддерживается в актуальном состоянии по мере того, как вы работаете над проектом и вносите в него изменения. Таким образом, новые возможности позволяют вам работать намного более продуктивно.

Надеюсь, вы нашли для себя что-то полезное,

Скотт

P.S. В последнее время я чаще использую Twitter, чтобы рассказывать о предстоящих планах и публиковать ссылки на интересные ресурсы. Вы можете следить за моими публикациями на Twitter по адресу: https://www.twitter.com/scottgu (@scottgu это мой ник на Twitter)

оригинал статьи