CodeRush for Roslyn: Part 3 — огляд можливостей для вивчення коду

Кожен день в світі створюється новий код. Багато коду. Якась частина цього коду може бути корисною для вас. Може знизити витрати на розробку або заощадити ваш час. Але щоб скористатися кодом, у ньому необхідно розібратися, тому ледачі розробники більше читають, ніж пишуть. Швидке розуміння як працює код – це цінний навик, який набувається з роками практики. У цій статті ми розповімо як CodeRush for Roslyn (далі CRR) допомагає швидше читати код навіть тим, хто ще не опанував досконало цим навиком. Стаття буде цікава хакерам і ледачим розробникам.



Ніж машина може допомогти при вивченні коду?

Якщо відкрити вихідні коди якої-небудь програми в Notepad, то буде приблизно так:



Код сприймався легше, можна зробити підсвічування ключових слів. У найпростішій реалізації це може бути зроблено, наприклад, текстовим пошуком за ключовими словами. Або реалізувати розмальовку коду на основі регулярних виразів, як це зроблено в Far Manager.



При компіляції коду відбувається його лексичний і синтаксичний розбір. Результат роботи програми зазвичай являє собою дерево. Використовуючи інформацію з синтаксичного дерева, Visual Studio може визначати межі структурних блоків і робити розмальовку літералів.



Синтаксичне дерево для методу SayHello()



Але на передостанньому зображенні є розфарбування, для якої недостатньо синтаксичного дерева. Мова йде про сходинці «using System». Для того щоб ця строчка стала сірою, потрібно аналізувати інформацію про використання типів – семантичну модель. З семантичної моделі можна отримати інформацію про зв'язки між типами. Наприклад: базові класи і їхні нащадки, реалізація інтерфейсів, перевантаження методів, пошук посилань. пошук місць використання класів.

Ну і, нарешті, щоб розібратися в коді, його запускають під відладчиком і дивляться, як він працює.

Таким чином, крім, власне вихідного тексту, у розробників розширень для Visual Studio є ще як мінімум три джерела даних про ньому:

  1. Roslyn Syntax Tree
  2. Roslyn Semantic Model
  3. Debug information


CRR використовує цю інформацію, щоб допомогти в дослідженні коду?
CRR додає до стандартної студійної візуалізації структурну підсвічування і іконки спочатку методів. Структурна підсвічування будується за синтаксичним дереву.



Іконки містять інформацію про область видимості і про тип мовної конструкції і сприймаються людиною швидше. Структурна підсвічування працює і в XAML.



Багато люблять навігацію як в ILSpy, коли можна знайти всі місця, де викликається метод використовується або виставляється властивість. У CRR для цього є вікно References, який відображує інформацію, що знаходиться у семантичної моделі. На відміну від стандартного студійного пошуку посилань, в нашому вікні References реалізована угруповання, фільтрація, вбудований перегляд коду. Фільтрація реалізована не тільки по назві суті, але і за типом її використання.



Посилання можна шукати на що завгодно, а не тільки на методи або властивості. Наприклад, так виглядає результат пошуку посилань на елемент перерахування.



Вбудований в References перегляд коду показаний у нижній частині зображення. Завдяки йому, при перегляді посилань не змінюється поточна вкладка з кодом. Але, якщо треба, посилання у редакторі коду студії відкриється по подвійному кліку.

Движок, який працює у Об'єкт доступний ще й у вигляді спливаючого UI. У CRR ця фіча називається JumpTo. Крім семантичної моделі, JumpTo використовує дані про структуру проекту.



JumpTo працює навіть у XAML. При використанні MVVM патерну CRR вміє знаходити ViewModel і правильно навигироваться з XAML код моделі.



Крім продемонстрованих варіантів, JumpTo вміє навигировать за спадкоємцям і базовим типам, по перевантаженим методів, за файлів проекту. Щоб викликати JumpTo треба натиснути Ctr+Alt+N. На відміну від Об'єкт, JumpTo орієнтований більше на переходи, ніж на вивчення коду, тому при виборі елемента в списку видачі, відбувається навігація на нього без попереднього перегляду.

Крім навігації, яку надають Об'єкт та JumpTo, в CRR є механізм ручного навігації. Це закладок. Стандартні Bookmark, вміють навигировать з точністю до рядка. Закладки в CRR «двовимірні».



Крім закладок, на останньому малюнку показані маркери. Червоні маркери можна поставити самому, сині розставляють деякі наші фічі. Наприклад, DropMarkerBeforeJump. Маркер відрізняється від закладки тим, що вони пропадає, коли відбувається повернення до нього.

При налагодженні CRR вміє показувати значення локальних змінних і пророкувати переходи. На цьому малюнку видно, що наш Debug Visualizer зменшив яскравість фрагмента коду, для якого не спрацювало умова.Таким чином, при налагодженні коду, немає необхідності переглядати код з неактивної гілки.



CRR допомагає швидше розуміти код за рахунок його структурної підсвічування, вікна Об'єкт, просунутої навігації JumpTo і візуалізації в налагоджувач.
Скачати можна спробувати Visual Studio Gallery.

Це стаття із серії статей про CRR.

Попередні статті:
CodeRush for Roslyn: Part 2 — огляд фіч для кращого коду
CodeRush for Roslyn: Part 1 — корисні фічі для розробки через тестування
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.