File: completion.rb

package info (click to toggle)
ruby 1.4.3-6
  • links: PTS
  • area: main
  • in suites: potato
  • size: 4,068 kB
  • ctags: 7,509
  • sloc: ansic: 60,668; ruby: 23,106; yacc: 4,122; sh: 1,753; lisp: 997; makefile: 597; sed: 68; awk: 36; tcl: 31; perl: 17; python: 6
file content (47 lines) | stat: -rw-r--r-- 1,208 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

require "readline"

module IRB
  module InputCompletion
    ReservedWords = [
      "BEGIN", "END",
      "alias", "and", 
      "begin", "break", 
      "case", "class",
      "def", "defined", "do",
      "else", "elsif", "end", "ensure",
      "false", "for", 
      "if", "in", 
      "module", 
      "next", "nil", "not",
      "or", 
      "redo", "rescue", "retry", "return",
      "self", "super",
      "then", "true",
      "undef", "unless", "until",
      "when", "while",
      "yield"
    ]
      
    CompletionProc = proc { |input|
      case input
      when /^([^.]+)\.([^.]*)$/
	receiver = $1
	message = $2
	if eval("(local_variables|#{receiver}.type.constants).include?('#{receiver}')", 
	    IRB.conf[:MAIN_CONTEXT].bind)
	  candidates = eval("#{receiver}.methods", IRB.conf[:MAIN_CONTEXT].bind)
	else
	  candidates = []
	end
	candidates.grep(/^#{Regexp.quote(message)}/).collect{|e| receiver + "." + e}
      else
	candidates = eval("methods | private_methods | local_variables | type.constants", 
			  IRB.conf[:MAIN_CONTEXT].bind)
	(candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)
      end
    }
  end
end

Readline.completion_proc = IRB::InputCompletion::CompletionProc