![image](https://habr.com/images/px.gif#%3D%22http%3A%2F%2Fimg5.imageshack.us%2Fimg5%2F2997%2Fvs2010logo.png%22)
Разработчики должны иметь возможность легко искать, ориентироваться и понимать код, в котором работают. Мы изучили юзабилити и пришли к выводу, что разработчик проводит много времени читая, пересматривая и исследуя существующий код, вместо написания нового кода.
Редактор VS 2010 добавляет новые возможности, который позволяют более продуктивно искать и ориентироваться в коде, а также проще понимать, как код используется в проекте.
Поиск и навигация в исходном коде ASP.NET MVC
Для данной статьи я буду использовать исходный код ASP.NET MVC фреймворка, у которого много тысяч строк кода, для демонстрации некоторых новых возможностей в поиске и навигации у VS 2010. Если у вас установлена VS 2010 Beta 2, вы можете загрузить ASP.NET MVC фреймворк.
![image](http://weblogs.asp.net/blogs/scottgu/image_5F9C65E4.png)
Вы обнаружите, что производительность, ниже представленных возможностей, реально высокая, не смотря большой кусок кода в несколько тысяч строк. Все возможности, которые я опишу, уже интегрированы в VS 2010 и работают для всех проектов на C# или VB.
Поддержка “Navigate To”
Очень важно для маленьких или больших проектов иметь возможность быстро искать и перемещаться по коду.
Visual Studio 2010 теперь поддерживает новое горячее сочетание клавиш (Ctrl+запятая), при нажатии на которое открывается новое окно “Navigate To”, которое позволяет быстро находить типы, файлы, переменные и члены в вашем проекте и перемещаться к их объявлению.
![image](http://weblogs.asp.net/blogs/scottgu/image_0713324F.png)
Благодаря выдачи результатов по ходу ввода запроса, “Navigate To” дает прирост в поиске через UI:
![image](http://weblogs.asp.net/blogs/scottgu/image_12C87981.png)
Наберите еще несколько букв, и вы увидите автоматически отфильтрованный список, который соответствует запросу “controller”:
![image](http://weblogs.asp.net/blogs/scottgu/image_77AFAA72.png)
Вы можете использовать полосу прокрутки для перемещения по результату поиска или использовать альтернативу — нажимать Tab и далее пользоваться стрелочками, если не хотите отрывать руки от клавиатуры. Список “Navigate To” включает в себя все типы результатов, которые соответствуют поисковому запросу, включая имена типов, методов, свойств, файлов и объявление полей
![image](http://weblogs.asp.net/blogs/scottgu/image_473925FC.png)
Выбор любого результата со списка, откроет нужный исходный файл в VS 2010 (если он еще не открыт) и перекинет вас в нужное место кода, подсвечивая релевантное имя.
![image](http://weblogs.asp.net/blogs/scottgu/image_6BEA3D73.png)
Нечеткие возможности поиска
Поле поиска в “Navigate To” умеет делать хитрые вещи, оно позволяет смекалисто отфильтровывать и искать, не зная толком имени вещи, которую вы ищите. Это позволяет фильтровать ваши поиски и получать информацию в реальном времени, во время набора.
Чтобы опробовать данную возможность, давайте сначала будем искать слово “cache”. Обратите внимание, результат включает в себя не только элементы, которые начинаются со слова “cache”, но и любые элементы, которые содержат слово “cache”:
![image](http://weblogs.asp.net/blogs/scottgu/image_219F82CE.png)
Мы можем добавлять несколько слов в поле поиска для дальнейшего отфильтровывания результатов. Например, ниже, я отфильтровываю список по элементам, которые содержат оба слова “cache” и “action” в имени:
![image](http://weblogs.asp.net/blogs/scottgu/image_2D54CA00.png)
Типы и члены в .NET Framework используют правило именования называемое “Pascal Casing”, которое означает, что первые буквы каждого слова в имени типа или члена должны быть заглавными. Окно “Navigate To” позволяет вам опционально использовать “Pascal Casing” соглашение для быстрого фильтрования типов. Достаточно написать заглавными первые буквы имен у типов/членов, и он автоматически отфильтрует результаты, которые соответствуют данному соглашению.
Например, написав “AMS” вы увидите результат ниже (только те типы и члены, которые содержат слова, которые начинаются с А, затем с M, потом с S):
![image](http://weblogs.asp.net/blogs/scottgu/image_18EF0475.png)
Окно “Navigate To” позволяет вам быстро фильтровать и перемещаться по коду, используя минимум нажатий и избавляет вас от использования мышки, открытия Solution Explorer и нажатия непосредственно на файл.
View Call Hierarchy
Конечно иметь возможность быстрой навигации и поиска по коду — это замечательно, но иметь возможность просматривать, как используется код — это ведь еще лучше! VS 2010 представляет новую возможность — “View Call Hierarchy”, которая позволяет быстро обнаружить места в коде, с которых вызываются ваши методы или свойства и передвигаться по дереву вызовов, не запуская или отлаживая, при этом, приложение.
Для использования данной возможности, просто выделите имя метода или свойства в коде, нажмите Ctrl+K, Ctrl+T или правой кнопкой и выберите “View Call Hierarchy” с контекстного меню:
![image](http://weblogs.asp.net/blogs/scottgu/image_76B6F8EE.png)
Это откроет новое окно инструмента “Call Hierarchy”, которое по умолчанию появляется под редактором кода. Ниже, вы можете увидеть, как “Call Hierarchy” отображает два метода в нашем проекте, которые вызывают метод ViewPage.RenderView(), выделенный выше.
![image](http://weblogs.asp.net/blogs/scottgu/image_581D0845.png)
Далее мы можем углубляться иерархию первого метода “RenderViewAndRestoreContentType”, чтобы увидеть очередь вызова:
![image](http://weblogs.asp.net/blogs/scottgu/image_5CB312FF.png)
Для виртуальных методов/свойств вы можете также можете вызывать окно иерархии, чтобы увидеть, что показывает подкласс и перегрузить их.
Двойное нажатие на любом члене в окне “Call Hierarchy” откроет соответствующий исходный файл и переместит в нужное место в коде.
![image](http://weblogs.asp.net/blogs/scottgu/image_79D8BB09.png)
Это позволит вам быстро перемещаться по коду и лучше понимать отношения между классами и методами во время работы.
Highlighted References
D VS 2010, когда вы выделяете или подсвечиваете переменные / параметры / объявление поля в редакторе кода, все места с ними автоматически подсвечиваются для вас в редакторе. Это позволяет легко определить, где и как переменная или параметр используется.
Например, когда мы выделяем в редакторе параметр “controllerContext”, передаваемый в метод ControllerActionInvoker.GetParameterValue() ниже, его четыре места использования в данном методе также подсвечиваются:
![image](http://weblogs.asp.net/blogs/scottgu/image_5E53B906.png)
Если я выделю локальную переменную в методе, все места ее использования также автоматически подсветятся:
![image](http://weblogs.asp.net/blogs/scottgu/image_0DC227D3.png)
Если подсвечено несколько мест использования, вы можете перемещаться по ним, используя Ctrl-Shift- ↑ и Ctrl-Shift-↓