Сегодня, я вернусь к этому вопросу с новой информацией.
Итак, напомню, что речь идёт о внедрении документации в код. При этом справка оформляется в виде специальных комментариев вроде (стиль JavaDoc):
{*------------------------------------------------------------------------------ Конвертирует дату-время из отчёта в TDateTime. @param AValue Строка, представляющая дату из отчёта. Имеет формат вида 'Sun, 25 Jan 2009 12:48:15 +0300'. @return Значение TDateTime (по местному времени), которое соответствует параметру AValue, или 0, если AValue не содержит корректного представления даты. @throws нет @see GetDate -------------------------------------------------------------------------------} function GetDateTime(const AValue: String): TDateTime; begin ... end;или (стиль XML-Doc):
/// <summary>Конвертирует дату-время из отчёта в TDateTime.</summary> /// <param name="AValue">Строка, представляющая дату из отчёта. Имеет формат вида 'Sun, 25 Jan 2009 12:48:15 +0300'.<param> /// <returns>Значение TDateTime (по местному времени), которое соответствует параметру AValue, или 0, если AValue не содержит корректного представления даты.</returns> /// <seealso cref="GetDate">GetDate</seealso> function GetDateTime(const AValue: String): TDateTime; begin ... end;Плюсы и минусы документации в коде:
- (+) Всегда актуальная документация. Вы можете изменить функцию (убрать/добавить) и забыть обновить документацию, ведомую вручную. Но вы не можете забыть сделать это для документации, которая пишется вместе с кодом.
- (+) Очень просто писать - нужно просто добавить специально оформленный комментарий (который, кстати, может быть забит в шаблон Code Template).
- (-) Нет GUI. GUI удобно, когда ты не помнишь наизусть все эти правила и тэги.
- (-) Нет WYSIWYG.
- (-) Автоматическая генерация справки может уступать по "красоте" ручной.
- (-) Сильно засоряет код. Большие блоки комментариев могут затруднять чтение кода.
До сегодняшнего дня я считал, что документация в коде - это достаточно спорный момент. Но сегодня я узнал об одной утилите, которая изменила моё мнение в сторону полной поддержки документации в коде.
Встречаем: Documentation Insight - add-in для Delphi IDE, реализующий WYSIWYG-редактор для редактирования документации в исходном коде.
Продукт находится в стадии беты, но выглядит достаточно юзабельным и обещающим.
Требования:
- Internet Explorer 7 или выше
- MSXML 6.0
- RAD Studio 2007
- RAD Studio 2010
- RAD Studio XE
Появится окно, которое можно пристыковать или использовать как плавающее - равно как все остальные окна IDE:
Ну, как вы уже увидели на снимках экрана, оно предоставляет вам GUI-интерфейс для редактирования документации в комментариях. Кроме того, оно автоматически расставляет тэги свёртки кода (code folding) для больших текстов. Вот как выглядит документация в коде (слева - свёрнуто, справа - развёрнуто):
Таким образом, документация не засоряет код и совершенно не мешается. Справедливости ради надо сказать, что Code Folding - фишка IDE, а не плагина. Но то, что он её использует - большое удобство.
Использование плагина тривиально - вы щёлкаете на функцию, метод, тип или переменную в коде - она отображается в окне Documentation Insight в том виде, как она получилась бы в документации. По-умолчанию никакого описания у объектов нет - только малоинформативный авто-шаблон.
Чтобы отредактировать описание объекта, вы можете делать это по старинке: вписывая специальным образом оформленные комментарии в код, либо же используя Documentation Insight. Для последнего случая вам нужно переключить его из режима просмотра в режим редактирования. Делается это самой правой кнопкой со значком листа и ручки. Слева - режим просмотра. Справа - режим редактирования:
В режиме редактирования вы можете щёлкать по блокам текста и вводить описания. Панель инструментов сверху даёт вам доступ к WYSIWYG-оформлению. Для списочных значений (например, блока Exceptions) ввод строки автоматически расширяет список, вводя новую пустую строку в конец списка.
Инструмент поддерживает множество тэгов и даёт возможность вставлять их в текст. Вот пример возможностей:
Ещё одна очень клёвая фишка этого расширения - интеграция со справкой Delphi. Например, вы переходите к объявлению метода
IndexOf
класса TStringList
, либо же находитесь внутри его - и Documentation Insight покажет вам документацию по этому методу:Здорово, да? Понятно, что редактировать это описание вы не сможете, но зато вы получаете цельное представление, как о своём коде, так и о коде Delphi - в однообразном виде, что очень приятно. Кстати, все ссылки в окне Documentation Insight - рабочие.
В заключение хотелось бы отметить, что расширение пока поддерживает только документацию в стиле XML-doc. Кроме того, надо сказать, что документация в стиле XML-doc подхватывается ещё и самой Delphi для использования в Help Insight! Например, вот как выглядит всплывающая подсказка в IDE Delphi для функции с документацией:
Чрезвычайно приятно видеть, как несколько разрознённых возможностей так удачно работают вместе (эй, это не так уж часто бывает в Delphi!).
Примечание: Help Insight обрабатывает не все допустимые тэги, но вы можете самостоятельно изменить шаблон (или взять готовый), если вы что-то понимаете в XSL-преобразованиях.
Ах да, упомянул ли я, что этот прекрасный инструмент совершенно бесплатен? :)
Обновление: автор Documentation Insight (Baoquan Zuo) указал, что они хотят развивать Documentation Insight и поэтому он будет платным продуктом. Бета версии бесплатны, но имеют ограничения на время работы.
Итак, давайте подведём итоги. Вот плюсы и минусы документации в коде с использованием Documentation Insight и новых Delphi:
- (+) Всегда актуальная документация.
- (+) Очень просто писать.
- (+) На выбор есть GUI или старомодный способ ручного написания комментариев.
- (+) WYSIWYG.
- (+) Практически не засоряет код. Вы также можете настроить поведение свёртки блоков.
- (+) Интеграция с Code Insight.
- (-) Автоматическая генерация справки может уступать по "красоте" ручной.
Обновление: Documentation Insight является частью Delphi, начиная с Delphi XE 2.
К сожалению, в лагере генераторов документации всё не так радужно. Мой любимый Help & Manual не поддерживает генерацию документации по коду, ибо его основное предназначение - пользовательская справка.
ОтветитьУдалитьНормальным выбором видится Doc-O-Matic, но его минимальная цена (за Doc-O-Matic SRC) - $500 :(
Ещё надо заметить, что базовая поддержка генерации справки по коду есть и в самой Delphi: включите поддержку Modelling (в меню: View/Model View), в опциях проекта включите опцию "Generate XML Documentation" (вкладка "Compiling").
ОтветитьУдалитьТеперь можно щёлкнуть правой кнопкой мыши по проекту в окне Model View и выбрать команду "Generate documentation".
Проблема в том, что результат получится только в виде HTML и выглядит он... не очень воодушевляюще.
Вы можете его настроить - используя правку XSL-шаблонов, но CHM, PDF или MS Help вы из этого не извлечёте.
Да, и, вроде бы, эта функция есть не во всех редакциях Delphi.
Сильная штука. Спасибо за статью!
ОтветитьУдалитьИ ты кардианльно сменил свою точку зрения?
ОтветитьУдалитьНе уж то будешь абсолютно все функции покрывать документацией? или предел есть?
Yep, я поменял. Осталось подобрать инструмент для конвертации доков в комментах в хэлп-файл и начну делать.
ОтветитьУдалитьА предел... да ровно такой же, каков предел покрытия документации в справке, составляемой вручную. Ну, может и шире. В идеале - надо бы описать каждую функцию, класс, метод, тип. На практике - как получится. Понятно, что совсем очевидные можно отложить на потом.
В Doc-O-Matic самой продвинутой редакции есть полезный инструмент, позволяющий графически показать степень покрытия кода документацией.
Графически? Это он код графически представляет или раскрашивает исходник?
ОтветитьУдалитьТут на вкладке Screenshot два скрина с красно-зелёной диаграммой. При щелчке на кубике показывается, что это за объект.
ОтветитьУдалитьКрасный - документации нет.
Зелёный - документация есть.
P.S. Описывать максимум функций (по возможности) полезно ещё и тем, что вся эта информация показывается сразу же в IDE - через Help Insight.
ОтветитьУдалитьСпасибо за прекрасный способ генерации доков!!!!!!!
ОтветитьУдалитьА софтина то не бесплатная :(
ОтветитьУдалитьИ еще с первой беты бесплатной не была
Доброго времени суток!
ОтветитьУдалитьПочему у меня вот так: http://funkyimg.com/u2/360/761/DocInsight_abracadabra.jpg
Delphi 2010 v14.0.3593 Win7 x64 Ultimate
А почему вы меня об этом спрашиваете?
ОтветитьУдалитьПотому что это стало после установке вашего шаблона для ХелпИнсайт, возвращаю штатный шаблон - абракадабра исчезает :).
ОтветитьУдалитьВы чего-то путаете. Я в жизни не делал ни одного шаблона для HelpInsight и ничего в этом не понимаю.
ОтветитьУдалитьНаверное, вы имели ввиду этот шаблон. Ну так и пишите автору этого шаблона.
А почему же
ОтветитьУдалитьCredits
GunSmoker
Marco Cantu
:)
Credits = участники, сделали вклад.
ОтветитьУдалитьЯ тестировал этот шаблон по просьбе автора (Baoquan Zuo). Думаю, что Marco Cantu помог ему с информацией о шаблонах.
А у вас кириллица работает?
ОтветитьУдалитьДа, нормально работает.
ОтветитьУдалитьСудя по скрину, у вас могли не подключиться все файлы - как-то странно он выглядит, как будто стили не подключены.
Несколько раз всё перепроверил, старый шаблон возвращаю - нормально, новый - крякозябры. Неужели где-то надо поставить Cyrillic в шаблоне, проглядел все файлы - ничего подходящего не нашёл :(. К сожалению в CSS / XSL не знаток.
ОтветитьУдалитьТак там не кириллица, а UTF-8.
ОтветитьУдалитьСейчас посмотрел: если ты не копируешь папку, а только один файл, то как раз и получается ситуация, как на скриншоте. Потому что шаблон не может загрузить файлы из папки.
Инструкция была: "You should backup your local HelpInsight.xsl file and then extract the downloaded zip file to the corresponding location".
Т.е. должно быть:
- До: HelpInsight.xsl
- После: HelpInsight.xsl, HelpInsight_backup.xsl, HelpInsight (папка).
Скопировал всё как в инструкции, всё равно вот так. Счас попробую ИДЕ перегрузить.
ОтветитьУдалитьВ общем, похоже, смысл в том, что у вас не подцепляются файлы из папки HelpInsight из архива.
ОтветитьУдалитьА уж почему это происходит - надо разбираться.
Проверить права на папку. Проверить, что не перепутано {$BDS}\ObjRepos\en и {$BDS}\ObjRepos (в D2010 {$BDS}\ObjRepos не будет работать).
Вот скрин папки:
ОтветитьУдалитьhttp://funkyimg.com/u2/747/786/DocInsight_1.jpg
Ну я не знаю. Должно работать. У меня работает именно в таком раскладе. Я как поставил тогда, так и не удалял, всегда сижу с этим шаблоном.
ОтветитьУдалитьМогу только посоветовать обратиться к автору шаблона. Он в этом хотя бы понимает.
Я - нет.
а для Lazarus подобного нет?
ОтветитьУдалитьесть, почти такое.
Удалитьhttp://wiki.freepascal.org/FPDoc_Editor/ru