Предисловие
Как при помощи awk, tiddlywiki и такой-то матери разобраться в структуре классов, которые вы видите первый раз, а сделать что-то надо ещё вчера.
Внимание: использование данного метода очень ограниченное, к тому же в нормальных средах разработки этот приём и не нужен. Но у меня был проект на C++ в BCB6, так что пришлось делать самому.
Что имеем
Набор классов, порядка 150 штук. В процессе разработки системы имена у части из них поменялись, а названия файлов остались прежние. И сразу выяснить, кто-кому родственник не представляется возможным. Есть Class Explorer — но он не информативен, а самое главное, невозможно выяснить какие именно классы наследуются от данного.
Что требуется для выполнения анализа
(предполагается, что мы проводим изыскания в Windows)
- AWK/GAWK
- браузер, умеющий работать с TW (Firefox, Opera, IE)
К несчастью команда for в командном интерпретаторе Windows не работает с вложенными каталогами (да, я знаю про /R, но for возвращает абсолютный путь с обратными слешами, который потом нужно потом разворачивать, а мне пока лениво), поэтому можем обработать только один каталог. Но если под рукой есть bin-utils и win-bash то простым переименование bin/find в bin/gfind можно будет использовать и версию для bash. Для *nix систем используется файл с соответствующим именем.
Анализ
по пунктам
- Скачиваем архив — в нём модифицированный TW, скрипты bat, sh, awk
- Распаковываем
- В папку src складываем файлы для анализа (пока я анализирую только *.h).
- Если нужно — скачиваем GAWK for Windows
- После чего запускаем нужный скрипт и после его окончания работы открываем в браузере classes.html
Что получаем на выходе
Теги:
- 2explain — записи для «расшифровки» (записи полученные в результате обработки исходников)
- base_class — классы от которых наследуются
- теги с именами классов от которых наследуются
Записи вида
TFilterStateKeeper
File ./uFilter.h
Parent TStateKeeper
Глоссарий
TW — TiddlyWiki
BCB — Borland C++ Builder (строитель скучных земель, страшная среда разработки, которая ещё застала отсутствие свёртывания кода и рефакторинг кода)
AWK/GAWK — интерпретируемый скриптовый C-подобный язык построчного разбора и обработки входного потока (например, текстового файла) по заданным шаблонам. GAWK — это GNU версия, с различными улучшениями.
Модификация TW заключается исключительно в разделении JavaScript и собственно страницы с данными — на результатах работы это не сказывается, но становится проще модифицировать и отлаживать.
Пример: classes.html (Не забудьте разрешить скрипты). На этом примере видно, что работает «парсер» не идеально («классы» that и to).
Да можно (и нужно) использовать doxygen. Но в нём нет поиска с использованием регулярных выражений, и нельзя быстро сделать и сохранить пометки. А самое главное — в нём нет анимации! :)