【问题标题】:How to document a file with RDoc如何使用 RDoc 记录文件
【发布时间】:2018-05-15 17:47:41
【问题描述】:

搜索RDoc documentation 后,我找不到如何在 RDoc 中记录文件/顶级方法...

假设我有以下代码:

## 
# File documentation.
# File:: foo.rb
# Date:: 09/05/2018
##
require 'stuff'

##
# Class documentation
class Foo
     # Stuff
end

##
# Method documentation
def foo_method()
    # Stuff too
end

使用此代码运行 RDoc 将仅生成 Foo 类的文档,我希望在其中获得文件 foo.rb 和顶级方法 foo_method() 的文档。

所以我的问题是:如何制作 RDoc 文档文件和顶级方法?

【问题讨论】:

    标签: ruby rdoc


    【解决方案1】:

    仍然找不到如何做到这一点。

    作为一种解决方法,我制作了一个 Ruby 脚本,它可以读取我的其他 Ruby 文件(包含文档),对其进行解析,然后创建一些模型模块,在其中插入解析的文档。

    如果有人对此感兴趣,这里是脚本:

    #:stopdoc:
    FILES = ['features/step_definitions/*.rb', 'features/support/*.rb', 'lib/ffi/*.rb', 'lib/*.rb']
    
    FILE_NAME = 'docs/files.rb'
    TOP_LEVEL_NAME = 'docs/top_level.rb'
    
    def gen_files(content)
        match = content.scan(/(##[^`]+File::[ ]*([\w]+)[^`]+?##)/)
        File.open(FILE_NAME, 'a') do |f|
            f << "\n"
            f << match[0][0]
            f << "\n"
            f << "module #{match[0][1].capitalize}\n\nend\n"
        end
    end
    
    def gen_top_level(content)
        match = content.scan(/(##[\t ]*[\r]*\n(#[^\r\n]*[\r\n\t ]*)*##[\t ]*[\r]*\n){1}([^\r\n]+)/)
        File.open(TOP_LEVEL_NAME, 'a') do |f|
            match[1 .. -1].each do |m|      # Skip the file description
                f << "\n"
                next if (m[2].include?('module') || m[2].include?('class'))
                f << m[0]
                name = nil
                unless m[2].scan(/def [^`]+/).empty?
                    name = m[2]
                    name = "#{name}\n\nend"
                end
                name = m[2] unless m[2].scan(/[A-Z_]+[ ]?=[ ]?[^`]+/).empty?
                if name.nil?
                    name = m[2].gsub(/do([^`]*)/, '').gsub(/[^\d|\w]/, '_').gsub(/_+/, '_').gsub(/_$/, '')
                    name = "def #{name}\n\nend"
                end
                f << name
                f << "\n"
            end
        end
    end
    
    File.write(FILE_NAME, "module Files #:nodoc:\n\n\n")
    File.write(TOP_LEVEL_NAME, "module TopLevel\n\n\n")
    
    FILES.each do |file_regex|
        Dir.glob(file_regex).each do |rb_f|
            gen_files(File.read(rb_f))
            gen_top_level(File.read(rb_f))
        end
    end
    
    File.open(FILE_NAME, 'a') do |f|
        f << "\n\n\nend"
    end
    File.open(TOP_LEVEL_NAME, 'a') do |f|
        f << "\n\n\nend"
    end
    #:startdoc:
    

    在这个脚本中,我生成了 2 个文件:一个包含 Files 文档,一个包含顶级文档。对于顶级文档,此脚本处理常量、方法定义和 Cucumber 步骤 (Gherkin)。

    我还是有点吃惊,像 RDoc 这样的工具不能指定一个选项或其他东西来解析顶级函数的文档..

    我不会接受我的回答,因为这只是一个不干净的解决方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多