lua - метаданные для документации

Я прочитал комментарий от Нормана Рэмси об использовании метаданных для создания документации в lua.

Я пытаюсь сгенерировать документацию из моей библиотеки, и я бы предпочел не использовать luadoc, если это возможно.

Я хотел бы узнать больше об этом "метаданных-ориентированном" методе создания документации - методологии, примерах или используемых программах.

Другие ответы приветствуются, но на этот вопрос, вероятно, Норман может ответить лучше, чем кто-либо другой.

Спасибо!

1 ответ

Решение

Ну, я полагаю, что должен ответить на это. Код не готов к работе в прайм-тайм, хотя после 15 июля 2010 г. я смогу перейти в высвобождаемое состояние и буду рад поделиться своими копиями.

Есть две идеи:

  1. Каждый модуль имеет таблицу с именем __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, и так далее.

  2. Есть инструмент командной строки, который сканирует __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.
    

Наши серверы не работают, но когда я получу шанс, я опубликую ссылку на этот код, если кто-то захочет поиграть с ним.

Другие вопросы по тегам