庭院宝石是一种用于生成红宝石代码文档的工具。
通过命令行完成,并生成文档。
但是我想知道是否可以通过IRB与解析的代码和统计信息进行交互。
你可以进入IRB并召集这样的院子:
require 'yard'
YARD
但是,我似乎无法与代码交互或获取和解析统计信息。例如,获取代码中的方法列表会很棒,或者通过解析器获取方法列表的对象。
答案 0 :(得分:2)
请参阅YARD::Registry上的文档(链接到Architecture Overview document),以获取在运行yard
后解析出的代码对象。
在注册表中打印所有方法的示例:
require 'yard'
YARD::Registry.load!
puts YARD::Registry.all(:method).map(&:path)
高级课程 - 获取所有未记录的对象:
require 'yard'
YARD::Registry.load!
puts YARD::Registry.all.select {|o| o.docstring.blank? }.map(&:path)
除了CodeObjects Architecture Overview类API文档之外,您还可以在YARD::CodeObjects::Base中看到CodeObjects的更多属性。这将为您提供有关您可以查询的内容的更多信息。如果您计划内省标记,您可能还需要查看YARD::Docstring类。
请注意,如果您想要实际生成注册表(尚未运行yard
),则可以使用Registry类执行此操作,但最好使用YARD::CLI::Yardoc.run这一点。
答案 1 :(得分:0)
从院子里看来,看起来宝石似乎不是用于那个目的,但你可以提取一些信息。
require 'yard'
stats = YARD::CLI::Stats.new
stats.run(files) # it allows patter matching, for instance 'lib/*.rb'
stats.all_objects # all the objects recognized by the parser
stats.all_objects.select{|o| o.type == :method} # to get only methods
stats.all_objects.select{|o| o.type == :class} # to get only classes
我不确定这对你是否足够,但我认为你不能在更深层次上获取信息。
答案 2 :(得分:0)
这实际上取决于你需要做什么,但我强烈建议你看看pry让你做出伟大的事情:
[1] pry(main)> require 'cgi'
=> true
[2] pry(main)> show-method CGI::escape
From: /home/carlesso/.rbenv/versions/2.1.2/lib/ruby/2.1.0/cgi/util.rb @ line 7:
Owner: CGI::Util
Visibility: public
Number of lines: 6
def escape(string)
encoding = string.encoding
string.b.gsub(/([^ a-zA-Z0-9_.-]+)/) do |m|
'%' + m.unpack('H2' * m.bytesize).join('%').upcase
end.tr(' ', '+').force_encoding(encoding)
end
甚至更奇怪的东西:
[4] pry(main)> cd CGI
[5] pry(CGI):1> ls
constants:
Cookie CR EOL HtmlExtension HTTP_STATUS InvalidEncoding LF MAX_MULTIPART_COUNT MAX_MULTIPART_LENGTH NEEDS_BINMODE PATH_SEPARATOR QueryExtension REVISION Util
Object.methods: yaml_tag
CGI::Util#methods:
escape escapeElement escapeHTML escape_element escape_html h pretty rfc1123_date unescape unescapeElement unescapeHTML unescape_element unescape_html
CGI.methods: accept_charset accept_charset= parse
CGI#methods: accept_charset header http_header nph? out print
class variables: @@accept_charset
locals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_
您也可以修改某些内容,例如edit CGI::escape
会将$EDITOR
打开到相关文件/行(在我的情况下,vim将在.rbenv/versions/2.1.2/lib/ruby/2.1.0/cgi/util.rb
第7行打开
如果有礼物将显示帮助:
[10] pry(CGI):1> help Pry.hist
Usage: hist [--head|--tail]
hist --all
hist --head N
hist --tail N
hist --show START..END
hist --grep PATTERN
hist --clear
hist --replay START..END
hist --save [START..END] FILE
Aliases: history
Show and replay Readline history.
-a, --all Display all history
-H, --head Display the first N items
-T, --tail Display the last N items
-s, --show Show the given range of lines
-G, --grep Show lines matching the given pattern
-c, --clear Clear the current session's history
-r, --replay Replay a line or range of lines
--save Save history to a file
-e, --exclude-pry Exclude Pry commands from the history
-n, --no-numbers Omit line numbers
-h, --help Show this message.
但是,再次,它确实取决于您的需求,一点点“元编程”可以帮助您,如.methods
,.instance_variables
,.constants
可能有用..