module

IRB::InputCompletor

v1_9_3_392 - Show latest stable

No documentation available for this module.

Constants

CompletionProc = proc { |input|\nbind = IRB.conf[:MAIN_CONTEXT].workspace.binding\n\n# puts "input: #{input}"\n\ncase input\nwhen /^((["'`]).*\\2)\\.([^.]*)$/\n# String\nreceiver = $1\nmessage = $3\n\ncandidates = String.instance_methods.collect{|m| m.to_s}\nselect_message(receiver, message, candidates)\n\nwhen /^(\\/[^\\/]*\\/)\\.([^.]*)$/\n# Regexp\nreceiver = $1\nmessage = Regexp.quote($2)\n\ncandidates = Regexp.instance_methods.collect{|m| m.to_s}\nselect_message(receiver, message, candidates)\n\nwhen /^([^\\]]*\\])\\.([^.]*)$/\n# Array\nreceiver = $1\nmessage = Regexp.quote($2)\n\ncandidates = Array.instance_methods.collect{|m| m.to_s}\nselect_message(receiver, message, candidates)\n\nwhen /^([^\\}]*\\})\\.([^.]*)$/\n# Proc or Hash\nreceiver = $1\nmessage = Regexp.quote($2)\n\ncandidates = Proc.instance_methods.collect{|m| m.to_s}\ncandidates |= Hash.instance_methods.collect{|m| m.to_s}\nselect_message(receiver, message, candidates)\n\nwhen /^(:[^:.]*)$/\n# Symbol\nif Symbol.respond_to?(:all_symbols)\nsym = $1\ncandidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}\ncandidates.grep(/^#{sym}/)\nelse\n[]\nend\n\nwhen /^::([A-Z][^:\\.\\(]*)$/\n# Absolute Constant or class methods\nreceiver = $1\ncandidates = Object.constants.collect{|m| m.to_s}\ncandidates.grep(/^#{receiver}/).collect{|e| "::" + e}\n\n# when /^(((::)?[A-Z][^:.\\(]*)+)::?([^:.]*)$/\nwhen /^([A-Z].*)::([^:.]*)$/\n# Constant or class methods\nreceiver = $1\nmessage = Regexp.quote($2)\nbegin\ncandidates = eval("#{receiver}.constants.collect{|m| m.to_s}", bind)\ncandidates |= eval("#{receiver}.methods.collect{|m| m.to_s}", bind)\nrescue Exception\ncandidates = []\nend\nselect_message(receiver, message, candidates, "::")\n\nwhen /^(:[^:.]+)(\\.|::)([^.]*)$/\n# Symbol\nreceiver = $1\nsep = $2\nmessage = Regexp.quote($3)\n\ncandidates = Symbol.instance_methods.collect{|m| m.to_s}\nselect_message(receiver, message, candidates, sep)\n\nwhen /^(-?(0[dbo])?[0-9_]+(\\.[0-9_]+)?([eE]-?[0-9]+)?)(\\.|::)([^.]*)$/\n# Numeric\nreceiver = $1\nsep = $5\nmessage = Regexp.quote($6)\n\nbegin\ncandidates = eval(receiver, bind).methods.collect{|m| m.to_s}\nrescue Exception\ncandidates = []\nend\nselect_message(receiver, message, candidates, sep)\n\nwhen /^(-?0x[0-9a-fA-F_]+)(\\.|::)([^.]*)$/\n# Numeric(0xFFFF)\nreceiver = $1\nsep = $2\nmessage = Regexp.quote($3)\n\nbegin\ncandidates = eval(receiver, bind).methods.collect{|m| m.to_s}\nrescue Exception\ncandidates = []\nend\nselect_message(receiver, message, candidates, sep)\n\nwhen /^(\\$[^.]*)$/\n# global var\nregmessage = Regexp.new(Regexp.quote($1))\ncandidates = global_variables.collect{|m| m.to_s}.grep(regmessage)\n\n# when /^(\\$?(\\.?[^.]+)+)\\.([^.]*)$/\n# when /^((\\.?[^.]+)+)\\.([^.]*)$/\n# when /^([^."].*)\\.([^.]*)$/\nwhen /^([^."].*)(\\.|::)([^.]*)$/\n# variable.func or func.func\nreceiver = $1\nsep = $2\nmessage = Regexp.quote($3)\n\ngv = eval("global_variables", bind).collect{|m| m.to_s}\nlv = eval("local_variables", bind).collect{|m| m.to_s}\ncv = eval("self.class.constants", bind).collect{|m| m.to_s}\n\nif (gv | lv | cv).include?(receiver) or /^[A-Z]/ =~ receiver && /\\./ !~ receiver\n# foo.func and foo is var. OR\n# foo::func and foo is var. OR\n# foo::Const and foo is var. OR\n# Foo::Bar.func\nbegin\ncandidates = []\nrec = eval(receiver, bind)\nif sep == "::" and rec.kind_of?(Module)\ncandidates = rec.constants.collect{|m| m.to_s}\nend\ncandidates |= rec.methods.collect{|m| m.to_s}\nrescue Exception\ncandidates = []\nend\nelse\n# func1.func2\ncandidates = []\nObjectSpace.each_object(Module){|m|\nbegin\nname = m.name\nrescue Exception\nname = ""\nend\nbegin\nnext if name != "IRB::Context" and\n/^(IRB|SLex|RubyLex|RubyToken)/ =~ name\nrescue Exception\nnext\nend\ncandidates.concat m.instance_methods(false).collect{|x| x.to_s}\n}\ncandidates.sort!\ncandidates.uniq!\nend\nselect_message(receiver, message, candidates, sep)\n\nwhen /^\\.([^.]*)$/\n# unknown(maybe String)\n\nreceiver = ""\nmessage = Regexp.quote($1)\n\ncandidates = String.instance_methods(true).collect{|m| m.to_s}\nselect_message(receiver, message, candidates)\n\nelse\ncandidates = eval("methods | private_methods | local_variables | self.class.constants", bind).collect{|m| m.to_s}\n\n(candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)\nend\n}

Operators = ["%", "&", "*", "**", "+", "-", "/",\n"<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",\n"[]", "[]=", "^", "!", "!=", "!~"]

ReservedWords = [\n"BEGIN", "END",\n"alias", "and",\n"begin", "break",\n"case", "class",\n"def", "defined", "do",\n"else", "elsif", "end", "ensure",\n"false", "for",\n"if", "in",\n"module",\n"next", "nil", "not",\n"or",\n"redo", "rescue", "retry", "return",\n"self", "super",\n"then", "true",\n"undef", "unless", "until",\n"when", "while",\n"yield",\n]

Files

  • lib/irb/completion.rb