пятница, 13 апреля 2012 г.

Вырастить дерево



Решил тут восстановить историческую несправедливость в Visual Studio. Из всего леса деревьев которые там есть, "Закладки" (Bookmarks) представляют из себя пень - всего два уровня вложенности. Осталось так и в 2010 студии. Объяснить это могу только тем, что мало кто пользуется закладками, а для работы в системах контроля версий они почти не годятся.


Пора с этим покончить.




Итак "Дерево закладок" умеет:
  • создавать закладки;
  • создавать папки закладок;
  • создавать папки в папках закладок;
  • создавать папки в папках в папках закладок;
  • ...
  • поддерживает перетаскивание закладок в папки, из папок и между собой;
  • функция "закладка в закладке"; :)
  • переименование закладок и папок по клавише F2;
  • поддерживает привязку закладок к коду с помощью шаблонов на регулярных выражениях;


Про первые три кнопки все должно быть понятно:

  1. Ставим курсор на строку кода, на которую будет перебрасывать закладка
  2. Нажимаем кнопку создания закладки
  3. Двойным кликом в дереве по ней переходим на соответствующую строку
  4. Удаляем и перемещаем в папки по желанию
  5. Перемещать можно и закладки в закладки, поэтому перемещение в папку или закладку отличается от перемещения в определенную позицию, перетаскиванием в верхнюю или нижнюю часть целевой закладки/папки. Визуализации процесса пока нет.

Последняя же кнопка нужна в случае, когда были использованы привязки, а файл был изменен вне студии, т.е. закладки уже не указывают на те строки кода, на которых были созданы.
Шаблоны привязок можно добавлять, для этого в настройках есть раздел "Bookmarks tree", где можно пополнить соответствующую коллекцию.
У каждого шаблона три поля:
  • Pattern - с помощью регулярных выражений описываем шаблон;
  • PatternKey - уникальный строковый ключ, любой произвольный;
  • GroupNumbers - номера групп через запятую, из которых формируется поисковая строка.
Суть пересчета на примере:
        void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
объявление функции соответствует шаблону "\w+\s(\w+)\([a-zA-Z0-9,\s]+\)", в случае совпадения    группа номер 1 - "(\w+)" - название функции, т.е. backgroundWorker_DoWork. Когда выполняется пересчет, ищется строка соответствующая данному регулярному выражению, если такая строка найдена, то значение первой группы сравнивается с сохраненной при создании закладки поисковой строкой.
Пока встроено два типа шаблонов - для объявлений функций и для вызова оператора new.
Аналогично для оператора new, в качестве первой группы и поисковой строки выступает название экземпляра создаваемого объекта.
Таким образом, если позиция таких закладок была по какой-то причине сбита, после нажатия кнопки "Rescan", закладки с привязками будут восстановлены.

Дерево закладок сохраняется в файле с названием "bookmarkstree.tree" и лежит он рядом с файлом *.sln

Страница проекта:
http://visualstudiogallery.msdn.microsoft.com/e2e6fb19-5581-41fd-9a95-2872c288d590
https://sourceforge.net/projects/bookmarkstree/

Так или иначе были подсмотрены:
http://www.codeproject.com/Articles/61915/Numbered-Bookmarks-Visual-Studio-Extension-VSX-201
http://www.codeproject.com/Articles/31592/Editable-TextBlock-in-WPF-for-In-place-Editing
За что им большое спасибо.

4 комментария:

  1. Очень нужная штука. Только не работает... Тоесть может я чего не понял - скачал, установил, а ничего не появилось - ни менюшки, ни кнопки... Как пользвать её?

    ОтветитьУдалить
  2. Приятно слышать, что это нужная штука :)
    Если речь про 2010 студию, все корректно установилось, студия была перезапущена и в "Extension manager..." появилась новая запись, то модуль расширения можно найти в меню View->Other Windows->Bookmarks tree

    ОтветитьУдалить
  3. замечательно, спасибо. следующий вопрос - изменить имя закладки / папки - это как?

    ОтветитьУдалить