annotate runtime/autoload/rubycomplete.vim @ 834:5117153003bd v7.0e

updated for version 7.0e
author vimboss
date Sun, 16 Apr 2006 18:30:08 +0000
parents f24a95dae8ee
children 8e5830943bff
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
1 " Vim completion script
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
2 " Language: Ruby
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
3 " Maintainer: Mark Guzman ( segfault AT hasno DOT info )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
4 " Info: $Id$
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
5 " URL: http://vim-ruby.rubyforge.org
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
6 " Anon CVS: See above site
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
7 " Release Coordinator: Doug Kearns <dougkearns@gmail.com>
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
8 " ----------------------------------------------------------------------------
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
9 "
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
10 " Ruby IRB/Complete author: Keiju ISHITSUKA(keiju@ishitsuka.com)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
11 " ----------------------------------------------------------------------------
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
12
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
13 if !has('ruby')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
14 echo "Error: Required vim compiled with +ruby"
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
15 finish
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
16 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
17
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
18 if version < 700
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
19 echo "Error: Required vim >= 7.0"
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
20 finish
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
21 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
22
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
23 func! GetRubyVarType(v)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
24 let stopline = 1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
25 let vtp = ''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
26 let pos = getpos('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
27 let [lnum,lcol] = searchpos('^\s*#\s*@var\s*'.a:v.'\>\s\+[^ \t]\+\s*$','nb',stopline)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
28 if lnum != 0 && lcol != 0
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
29 call setpos('.',pos)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
30 let str = getline(lnum)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
31 let vtp = substitute(str,'^\s*#\s*@var\s*'.a:v.'\>\s\+\([^ \t]\+\)\s*$','\1','')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
32 return vtp
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
33 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
34 call setpos('.',pos)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
35 let [lnum,lcol] = searchpos(''.a:v.'\>\s*[+\-*/]*=\s*\([^ \t]\+.\(now\|new\|open\|get_instance\)\>\|[\[{"'']\)','nb',stopline)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
36 if lnum != 0 && lcol != 0
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
37 let str = matchstr(getline(lnum),'=\s*\([^ \t]\+.\(now\|new\|open\|get_instance\)\>\|[\[{"'']\)',lcol)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
38 let str = substitute(str,'^=\s*','','')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
39 call setpos('.',pos)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
40 if str == '"' || str == ''''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
41 return 'String'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
42 elseif str == '['
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
43 return 'Array'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
44 elseif str == '{'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
45 return 'Hash'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
46 elseif strlen(str) > 4
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
47 let l = stridx(str,'.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
48 return str[0:l-1]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
49 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
50 return ''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
51 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
52 call setpos('.',pos)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
53 return ''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
54 endf
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
55
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
56 function! rubycomplete#Complete(findstart, base)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
57 "findstart = 1 when we need to get the text length
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
58 if a:findstart
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
59 let line = getline('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
60 let idx = col('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
61 while idx > 0
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
62 let idx -= 1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
63 let c = line[idx-1]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
64 if c =~ '\w'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
65 continue
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
66 elseif ! c =~ '\.'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
67 idx = -1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
68 break
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
69 else
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
70 break
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
71 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
72 endwhile
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
73
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
74 return idx
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
75 "findstart = 0 when we need to return the list of completions
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
76 else
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
77 execute "ruby get_completions('" . a:base . "')"
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
78 return g:rbcomplete_completions
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
79 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
80 endfunction
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
81
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
82
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
83 function! s:DefRuby()
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
84 ruby << RUBYEOF
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
85 ReservedWords = [
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
86 "BEGIN", "END",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
87 "alias", "and",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
88 "begin", "break",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
89 "case", "class",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
90 "def", "defined", "do",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
91 "else", "elsif", "end", "ensure",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
92 "false", "for",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
93 "if", "in",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
94 "module",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
95 "next", "nil", "not",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
96 "or",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
97 "redo", "rescue", "retry", "return",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
98 "self", "super",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
99 "then", "true",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
100 "undef", "unless", "until",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
101 "when", "while",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
102 "yield",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
103 ]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
104
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
105 Operators = [ "%", "&", "*", "**", "+", "-", "/",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
106 "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
107 "[]", "[]=", "^", ]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
108
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
109 def identify_type(var)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
110 @buf = VIM::Buffer.current
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
111 enum = @buf.line_number
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
112 snum = (enum-10).abs
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
113 nums = Range.new( snum, enum )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
114 regxs = '/.*(%s)\s*=(.*)/' % var
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
115 regx = Regexp.new( regxs )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
116 nums.each do |x|
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
117 ln = @buf[x]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
118 #print $~ if regx.match( ln )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
119 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
120 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
121
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
122 def load_requires
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
123 @buf = VIM::Buffer.current
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
124 enum = @buf.line_number
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
125 nums = Range.new( 1, enum )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
126 nums.each do |x|
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
127 ln = @buf[x]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
128 begin
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
129 eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
130 rescue Exception
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
131 #ignore?
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
132 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
133 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
134 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
135
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
136 def get_completions(base)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
137 load_requires
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
138 input = VIM::evaluate('expand("<cWORD>")')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
139 input += base
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
140 message = nil
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
141
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
142
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
143 case input
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
144 when /^(\/[^\/]*\/)\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
145 # Regexp
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
146 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
147 message = Regexp.quote($2)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
148
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
149 candidates = Regexp.instance_methods(true)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
150 select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
151
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
152 when /^([^\]]*\])\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
153 # Array
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
154 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
155 message = Regexp.quote($2)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
156
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
157 candidates = Array.instance_methods(true)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
158 select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
159
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
160 when /^([^\}]*\})\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
161 # Proc or Hash
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
162 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
163 message = Regexp.quote($2)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
164
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
165 candidates = Proc.instance_methods(true) | Hash.instance_methods(true)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
166 select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
167
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
168 when /^(:[^:.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
169 # Symbol
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
170 if Symbol.respond_to?(:all_symbols)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
171 sym = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
172 candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
173 candidates.grep(/^#{sym}/)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
174 else
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
175 []
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
176 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
177
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
178 when /^::([A-Z][^:\.\(]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
179 # Absolute Constant or class methods
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
180 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
181 candidates = Object.constants
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
182 candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
183
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
184 when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
185 # Constant or class methods
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
186 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
187 message = Regexp.quote($4)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
188 begin
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
189 candidates = eval("#{receiver}.constants | #{receiver}.methods")
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
190 rescue Exception
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
191 candidates = []
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
192 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
193 candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
194
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
195 when /^(:[^:.]+)\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
196 # Symbol
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
197 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
198 message = Regexp.quote($2)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
199
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
200 candidates = Symbol.instance_methods(true)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
201 select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
202
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
203 when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
204 # Numeric
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
205 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
206 message = Regexp.quote($4)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
207
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
208 begin
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
209 candidates = eval(receiver).methods
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
210 rescue Exception
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
211 candidates
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
212 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
213 select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
214
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
215 when /^(\$[^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
216 candidates = global_variables.grep(Regexp.new(Regexp.quote($1)))
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
217
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
218 # when /^(\$?(\.?[^.]+)+)\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
219 when /^((\.?[^.]+)+)\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
220 # variable
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
221 receiver = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
222 message = Regexp.quote($3)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
223
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
224 cv = eval("self.class.constants")
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
225
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
226 vartype = VIM::evaluate("GetRubyVarType('%s')" % receiver)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
227 if vartype != ''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
228 candidates = eval("#{vartype}.instance_methods")
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
229 elsif (cv).include?(receiver)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
230 # foo.func and foo is local var.
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
231 candidates = eval("#{receiver}.methods")
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
232 elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
233 # Foo::Bar.func
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
234 begin
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
235 candidates = eval("#{receiver}.methods")
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
236 rescue Exception
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
237 candidates = []
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
238 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
239 else
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
240 # func1.func2
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
241 candidates = []
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
242 ObjectSpace.each_object(Module){|m|
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
243 next if m.name != "IRB::Context" and
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
244 /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
245 candidates.concat m.instance_methods(false)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
246 }
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
247 candidates.sort!
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
248 candidates.uniq!
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
249 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
250 #identify_type( receiver )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
251 select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
252
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
253 #when /^((\.?[^.]+)+)\.([^.]*)\(\s*\)*$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
254 #function call
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
255 #obj = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
256 #func = $3
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
257
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
258 when /^\.([^.]*)$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
259 # unknown(maybe String)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
260
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
261 receiver = ""
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
262 message = Regexp.quote($1)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
263
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
264 candidates = String.instance_methods(true)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
265 select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
266
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
267 else
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
268 candidates = eval("self.class.constants")
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
269
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
270 (candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
271 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
272
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
273 #print candidates
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
274 if message != nil && message.length > 0
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
275 rexp = '^%s' % message.downcase
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
276 candidates.delete_if do |c|
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
277 c.downcase.match( rexp )
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
278 $~ == nil
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
279 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
280 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
281
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
282 outp = ""
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
283 # tags = VIM::evaluate("taglist('^%s$')" %
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
284 (candidates-Object.instance_methods).each { |c| outp += "{'word':'%s','item':'%s'}," % [ c, c ] }
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
285 outp.sub!(/,$/, '')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
286 VIM::command("let g:rbcomplete_completions = [%s]" % outp)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
287 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
288
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
289
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
290 def select_message(receiver, message, candidates)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
291 candidates.grep(/^#{message}/).collect do |e|
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
292 case e
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
293 when /^[a-zA-Z_]/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
294 receiver + "." + e
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
295 when /^[0-9]/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
296 when *Operators
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
297 #receiver + " " + e
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
298 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
299 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
300 candidates.delete_if { |x| x == nil }
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
301 candidates.uniq!
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
302 candidates.sort!
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
303 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
304 RUBYEOF
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
305 endfunction
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
306
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
307 call s:DefRuby()
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
308 " vim: set et ts=4: