lua - метаданные для документации
Я прочитал комментарий от Нормана Рэмси об использовании метаданных для создания документации в lua.
Я пытаюсь сгенерировать документацию из моей библиотеки, и я бы предпочел не использовать luadoc, если это возможно.
Я хотел бы узнать больше об этом "метаданных-ориентированном" методе создания документации - методологии, примерах или используемых программах.
Другие ответы приветствуются, но на этот вопрос, вероятно, Норман может ответить лучше, чем кто-либо другой.
Спасибо!
1 ответ
Ну, я полагаю, что должен ответить на это. Код не готов к работе в прайм-тайм, хотя после 15 июля 2010 г. я смогу перейти в высвобождаемое состояние и буду рад поделиться своими копиями.
Есть две идеи:
Каждый модуль имеет таблицу с именем
__doc
, Каждое имя в модуле получает запись в__doc
Таблица. Вот пример:__doc.rfc2822_to_localtime_or_nil = [[function(date) returns number or nil Converts RFC2822 date to local time (Unix time). ]]
Первая строка - это "короткая документация" функции. Я надеюсь, что однажды его можно будет динамически проверить, но пока это просто документация. Остальное - "длинная документация". Вот еще пара:
__doc.to_string = [[function(T) returns string Converts a message to a string in RFC 2822 format.]] __doc.to_orig_string = [[function(T) returns string Returns the string originally used to create the message, which may or may comply with RFC 2822.]]
Есть также различные специальные поля, такие как
__doc.__overview
,__doc.T
, и так далее.Есть инструмент командной строки, который сканирует
__doc
поля и предоставляет информацию. Прямо сейчас этот код не очень общий, и реализация - беспорядок. Но вот некоторые примеры выходных данных:Обзор всего пакета (обратите внимание на список недокументированных пунктов, что очень важно для сохранения честности):
% osbf3 internals Documented modules: boot cache -- the OSBF-Lua message cache cfg classifier command_line commands core filter lists log mime mlearn msg -- parse MIME message and manipulate headers options output roc sfid util Undocumented functions: core.hash core.utf8tohtml options.env_default
Краткий обзор одного модуля:
: nr@yorkie 5874 ; osbf3 internals -short msg msg: T = The representation of a message msg.add_header = function(T, tag, contents) msg.del_header = function(T, tag, ...) msg.fingerprint = function(string) returns string msg.has_sfid = function(msg.T) returns bool msg.header_indices = function(msg, tag, ...) returns iterator msg.headers_tagged = function(msg, tag, ...) returns iterator msg.of_string = function(s, uncertain) returns T or nil msg.sfid = function(msg.T, [msgspec]) returns string or calls error msg.synopsis = function(T, w) returns string msg.to_orig_string = function(T) returns string msg.to_string = function(T) returns string
Документация одной функции:
% osbf3 internals msg.synopsis msg.synopsis = function(T, w) returns string Returns a string of width w (default 60) which is a synopsis of the message T. The synopsis is formed from the Subject: line and the first few words of the body.
Наши серверы не работают, но когда я получу шанс, я опубликую ссылку на этот код, если кто-то захочет поиграть с ним.