首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用RDoc记录文件

如何用RDoc记录文件
EN

Stack Overflow用户
提问于 2018-05-11 02:22:47
回答 1查看 289关注 0票数 1

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

假设我有以下代码:

代码语言:javascript
复制
## 
# 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文档化文件和顶级方法?

EN

回答 1

Stack Overflow用户

发布于 2018-05-15 09:47:41

还是找不到该怎么做。

作为解决办法,我制作了一个Ruby脚本,它读取我的其他Ruby文件(包含文档),解析它,并创建一些模型模块,在其中插入解析的文档。

如果有人对此感兴趣,请看下面的脚本:

代码语言:javascript
复制
#: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:

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50284117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档