TJC*_*ers 6 ruby documentation documentation-generation code-documentation
我希望能够将模板化的YARD doc样式注释插入到我现有的Rails遗留应用程序中.目前它几乎没有评论.我希望类标题和方法标题具有指定的参数(通过从我假设的方法签名中提取)和占位符的返回值.
在PHP代码中,我有一些工具可以检查代码并在适当的位置创建插入代码中的doc头注释.在Ruby with Duck类型等中,我确信像@params等类型之类的东西不容易猜到,而且我很好 - 我希望在插入后手动逐个查看代码文件.如果可能的话,只想避免必须将所有骨架模板插入代码(超过500个文件).
我已经搜索过这样做的宝石等,到目前为止还没有找到过.那里有没有?
看起来你必须自己编写它,但是通过访问 Ruby 的S-表达式,这不是一个大问题,它会为你解析源代码。所以你可以这样做:
require 'ripper'
def parse_sexp( sexp, stack=[] )
case sexp[0]
when :module
name = sexp[1][1][1]
line_number = sexp[1][1][2][0]
parse_sexp(sexp[2], stack+[sexp[0], sexp[1][1][1]])
puts "#{line_number}: Module: #{name}\n"
when :class
name = sexp[1][1][1]
line_number = sexp[1][1][2][0]
parse_sexp(sexp[3], stack+[sexp[0], sexp[1][1][1]])
puts "#{line_number}: Class: #{stack.last}::#{name}\n"
when :def
name = sexp[1][1]
line_number = sexp[1][2][0]
parse_sexp(sexp[3], stack+[sexp[0], sexp[1][1]])
puts "#{line_number}: Method: #{stack.last}##{name}\n"
else
if sexp.kind_of?(Array)
sexp.each { |s| parse_sexp(s,stack) if s.kind_of?(Array) }
end
end
end
sexp = Ripper.sexp(open 'prog.rb')
parse_sexp(sexp)
Run Code Online (Sandbox Code Playgroud)
Prog.rb 是:
$ cat -n prog.rb
1 module M1
2 class C1
3 def m1c1
4 a="test"
5 puts "hello"
6 return a if a.empty?
7 puts "hello2"
8 a
9 end
10 end
11 class C2 < C3
12 def m1c2
13 puts "hello"
14 end
15 end
16 class C3
17 end
18 end
Run Code Online (Sandbox Code Playgroud)
您将得到的是:
#line_number #entity
3: Method: C1#m1c1
2: Class: M1::C1
12: Method: C2#m1c2
11: Class: M1::C2
16: Class: M1::C3
1: Module: M1
Run Code Online (Sandbox Code Playgroud)
因此,您只需要自定义模板,并提取同一数组中可用的参数即可:
#irb > pp Ripper.sexp("def method(param1);nil; end")
...[:def,
[:@ident, "method", [1, 4]],
[:paren,
[:params, [[:@ident, "param1", [1, 11]]]...
Run Code Online (Sandbox Code Playgroud)
有点困难的任务是找出返回的内容,但仍然可行 -在 the 最后一个语句中:return查找 s并将其添加到方法的最后一个语句中。:defstack
最后将这些注释放在源文件的适当行上方。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |