# File lib/rcodetools/doc.rb, line 9 def initialize(opts = {}) super @filename = opts[:filename] extend UseMethodAnalyzer if opts[:use_method_analyzer] end
# File lib/rcodetools/doc.rb, line 15 def self.run(code, opts) new(opts).doc(code, opts[:lineno], opts[:column]) end
# File lib/rcodetools/doc.rb, line 49 def __prepare_line(x) v = "#{VAR}" result = "#{VAR}_result" klass = "#{VAR}_klass" flag = "#{VAR}_flag" which_methods = "#{VAR}_methods" ancestor_class = "#{VAR}_ancestor_class" idx = 1 recv = x[:recv] || x[:klass] || raise(ArgumentError, "need :recv or :klass") meth = x[:meth_or_constant] || x[:meth] debugprint "recv=#{recv}", "meth=#{meth}" if meth # imported from fastri/MagicHelp code = <<-EOC #{v} = (#{recv}) $stderr.print("#{MARKER}[#{idx}] => " + #{v}.class.to_s + " ") if Module === #{v} and '#{meth}' =~ /^[A-Z]/ and #{v}.const_defined?('#{meth}') #{result} = #{v}.to_s + "::#{meth}" else #{__magic_help_code result, v, meth.dump} end $stderr.puts(#{result}) exit EOC else code = <<-EOC #{v} = (#{recv}) $stderr.print("#{MARKER}[#{idx}] => " + #{v}.class.to_s + " ") $stderr.puts(#{v}.to_s) exit EOC end oneline_ize(code) end
overridable by module
# File lib/rcodetools/doc.rb, line 87 def _doc(code, lineno, column) end
# File lib/rcodetools/doc.rb, line 90 def doc(code, lineno, column=nil) _doc(code, lineno, column) or runtime_data(code, lineno, column).to_s end
# File lib/rcodetools/doc.rb, line 19 def prepare_line(expr, column) set_expr_and_postfix!(expr, column){|c| withop_re = /^.{#{c-1}}[#{OPERATOR_CHARS}]+/ if expr =~ withop_re withop_re else /^.{#{c}}[\w#{OPERATOR_CHARS}]*/ end } recv = expr # When expr already knows receiver and method, return(__prepare_line :recv => expr.eval_string, :meth => expr.meth) if expr.eval_string case expr when /^(?:::)?([A-Z].*)(?:::|\.)(.*)$/ # nested constants / class methods __prepare_line :klass => $1, :meth_or_constant => $2 when /^(?:::)?[A-Z]/ # normal constants __prepare_line :klass => expr when /\.([^.]*)$/ # method call __prepare_line :recv => Regexp.last_match.pre_match, :meth => $1 when /^(.+)(\[\]=?)$/ # [], []= __prepare_line :recv => $1, :meth => $2 when /[#{OPERATOR_CHARS}]+$/ # operator __prepare_line :recv => Regexp.last_match.pre_match, :meth => $& else # bare words __prepare_line :recv => "self", :meth => expr end end