annotate runtime/autoload/rubycomplete.vim @ 843:9f279ebda751 v7.0f01

updated for version 7.0f01
author vimboss
date Tue, 25 Apr 2006 22:13:59 +0000
parents 2c885fab04e3
children d58e3db4a7d1
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
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
3 " Maintainer: Mark Guzman <segfault@hasno.info>
831
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
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
13 " {{{ requirement checks
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
14 if !has('ruby')
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
15 echohl ErrorMsg
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
16 echo "Error: Required vim compiled with +ruby"
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
17 echohl None
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
18 finish
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
19 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
20
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
21 if version < 700
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
22 echohl ErrorMsg
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
23 echo "Error: Required vim >= 7.0"
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
24 echohl None
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
25 finish
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
26 endif
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
27 " }}} requirement checks
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
28
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
29 if !exists("g:rubycomplete_rails")
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
30 let g:rubycomplete_rails = 0
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
31 endif
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
32
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
33 if !exists("g:rubycomplete_classes_in_global")
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
34 let g:rubycomplete_classes_in_global = 0
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
35 endif
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
36
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
37 " {{{ vim-side support functions
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
38 function! GetBufferRubyModule(name)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
39 let [snum,enum] = GetBufferRubyEntity(a:name, "module")
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
40 return snum . '..' . enum
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
41 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
42
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
43 function! GetBufferRubyClass(name)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
44 let [snum,enum] = GetBufferRubyEntity(a:name, "class")
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
45 return snum . '..' . enum
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
46 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
47
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
48 function! GetBufferRubySingletonMethods(name)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
49 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
50
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
51 function! GetBufferRubyEntity( name, type )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
52 let stopline = 1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
53 let crex = '^\s*' . a:type . '\s*' . a:name . '\s*\(<\s*.*\s*\)\?\n*\(\(\s\|#\).*\n*\)*\n*\s*end$'
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
54 let [lnum,lcol] = searchpos( crex, 'nbw')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
55 if lnum == 0 && lcol == 0
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
56 return [0,0]
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
57 endif
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
58
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
59 let [enum,ecol] = searchpos( crex, 'nebw')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
60 if lnum > enum
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
61 let realdef = getline( lnum )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
62 let crexb = '^' . realdef . '\n*\(\(\s\|#\).*\n*\)*\n*\s*end$'
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
63 let [enum,ecol] = searchpos( crexb, 'necw' )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
64 endif
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
65 " we found a the class def
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
66 return [lnum,enum]
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
67 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
68
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
69 function! IsInClassDef()
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
70 let [snum,enum] = GetBufferRubyEntity( '.*', "class" )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
71 let ret = 'nil'
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
72 let pos = line('.')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
73
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
74 if snum < pos && pos < enum
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
75 let ret = snum . '..' . enum
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
76 endif
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
77
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
78 return ret
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
79 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
80
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
81 function! GetRubyVarType(v)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
82 let stopline = 1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
83 let vtp = ''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
84 let pos = getpos('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
85 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
86 if lnum != 0 && lcol != 0
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
87 call setpos('.',pos)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
88 let str = getline(lnum)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
89 let vtp = substitute(str,'^\s*#\s*@var\s*'.a:v.'\>\s\+\([^ \t]\+\)\s*$','\1','')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
90 return vtp
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
91 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
92 call setpos('.',pos)
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
93 if g:rubycomplete_rails == 1 && g:rubycomplete_rails_loaded == 1
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
94 let ctors = '\(now\|new\|open\|get_instance\|find\|create\)'
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
95 else
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
96 let ctors = '\(now\|new\|open\|get_instance\)'
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
97 endif
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
98
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
99 let [lnum,lcol] = searchpos(''.a:v.'\>\s*[+\-*/]*=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%r{\)','nb',stopline)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
100 if lnum != 0 && lcol != 0
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
101 let str = matchstr(getline(lnum),'=\s*\([^ \t]\+.' . ctors . '\>\|[\[{"''/]\|%r{\)',lcol)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
102 let str = substitute(str,'^=\s*','','')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
103 call setpos('.',pos)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
104 if str == '"' || str == ''''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
105 return 'String'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
106 elseif str == '['
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
107 return 'Array'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
108 elseif str == '{'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
109 return 'Hash'
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
110 elseif str == '/' || str == '%r{'
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
111 return 'Regexp'
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
112 elseif strlen(str) > 4
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
113 let l = stridx(str,'.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
114 return str[0:l-1]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
115 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
116 return ''
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
117 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
118 call setpos('.',pos)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
119 return ''
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
120 endfunction
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
121
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
122 "}}} vim-side support functions
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
123
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
124 function! rubycomplete#Complete(findstart, base)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
125 "findstart = 1 when we need to get the text length
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
126 if a:findstart
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
127 let line = getline('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
128 let idx = col('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
129 while idx > 0
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
130 let idx -= 1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
131 let c = line[idx-1]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
132 if c =~ '\w'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
133 continue
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
134 elseif ! c =~ '\.'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
135 idx = -1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
136 break
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
137 else
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
138 break
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
139 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
140 endwhile
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
141
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
142 return idx
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
143 "findstart = 0 when we need to return the list of completions
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
144 else
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
145 let g:rubycomplete_completions = []
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
146 execute "ruby get_completions('" . a:base . "')"
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
147 return g:rubycomplete_completions
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
148 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
149 endfunction
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
150
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
151
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
152 function! s:DefRuby()
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
153 ruby << RUBYEOF
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
154 # {{{ ruby completion
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
155 RailsWords = [
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
156 "has_many", "has_one",
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
157 "belongs_to",
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
158 ]
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
159
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
160 ReservedWords = [
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
161 "BEGIN", "END",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
162 "alias", "and",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
163 "begin", "break",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
164 "case", "class",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
165 "def", "defined", "do",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
166 "else", "elsif", "end", "ensure",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
167 "false", "for",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
168 "if", "in",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
169 "module",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
170 "next", "nil", "not",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
171 "or",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
172 "redo", "rescue", "retry", "return",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
173 "self", "super",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
174 "then", "true",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
175 "undef", "unless", "until",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
176 "when", "while",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
177 "yield",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
178 ]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
179
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
180 Operators = [ "%", "&", "*", "**", "+", "-", "/",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
181 "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
182 "[]", "[]=", "^", ]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
183
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
184
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
185 def load_requires
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
186 buf = VIM::Buffer.current
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
187 enum = buf.line_number
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
188 nums = Range.new( 1, enum )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
189 nums.each do |x|
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
190 ln = buf[x]
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
191 begin
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
192 eval( "require %s" % $1 ) if /.*require\s*(.*)$/.match( ln )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
193 rescue Exception
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
194 #ignore?
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
195 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
196 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
197 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
198
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
199 def load_buffer_class(name)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
200 classdef = get_buffer_entity(name, 'GetBufferRubyClass("%s")')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
201 return if classdef == nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
202
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
203 pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
204 load_buffer_class( $2 ) if pare != nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
205
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
206 mixre = /.*\n\s*include\s*(.*)\s*\n/.match( classdef )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
207 load_buffer_module( $2 ) if mixre != nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
208
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
209 eval classdef
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
210 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
211
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
212 def load_buffer_module(name)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
213 classdef = get_buffer_entity(name, 'GetBufferRubyModule("%s")')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
214 return if classdef == nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
215
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
216 eval classdef
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
217 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
218
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
219 def get_buffer_entity(name, vimfun)
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
220 buf = VIM::Buffer.current
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
221 nums = eval( VIM::evaluate( vimfun % name ) )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
222 return nil if nums == nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
223 return nil if nums.min == nums.max && nums.min == 0
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
224
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
225 cur_line = VIM::Buffer.current.line_number
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
226 classdef = ""
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
227 nums.each do |x|
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
228 if x != cur_line
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
229 ln = buf[x]
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
230 classdef += "%s\n" % ln
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
231 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
232 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
233
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
234 return classdef
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
235 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
236
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
237 def get_buffer_classes()
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
238 # this will be a little expensive.
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
239 allow_aggressive_load = VIM::evaluate('g:rubycomplete_classes_in_global')
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
240 return [] if allow_aggressive_load != '1'
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
241
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
242 buf = VIM::Buffer.current
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
243 eob = buf.length
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
244 ret = []
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
245 rg = 1..eob
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
246
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
247 rg.each do |x|
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
248 if /^\s*class\s*([A-Za-z0-9_-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*/.match( buf[x] )
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
249 ret.push $1
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
250 end
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
251 end
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
252
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
253 return ret
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
254 end
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
255
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
256 def load_rails()
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
257 allow_rails = VIM::evaluate('g:rubycomplete_rails')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
258 return if allow_rails != '1'
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
259
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
260 buf_path = VIM::evaluate('expand("%:p")')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
261 file_name = VIM::evaluate('expand("%:t")')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
262 path = buf_path.gsub( file_name, '' )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
263 path.gsub!( /\\/, "/" )
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
264 pup = [ "./", "../", "../../", "../../../", "../../../../" ]
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
265 pok = nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
266
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
267 pup.each do |sup|
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
268 tpok = "%s%sconfig" % [ path, sup ]
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
269 if File.exists?( tpok )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
270 pok = tpok
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
271 break
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
272 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
273 end
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
274
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
275 return if pok == nil
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
276
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
277 bootfile = pok + "/boot.rb"
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
278 envfile = pok + "/environment.rb"
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
279 if File.exists?( bootfile ) && File.exists?( envfile )
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
280 begin
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
281 require bootfile
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
282 require envfile
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
283 require 'console_app'
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
284 require 'console_with_helpers'
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
285 VIM::command('let g:rubycomplete_rails_loaded = 1')
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
286 rescue
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
287 print "Error loading rails environment"
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
288 end
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
289 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
290 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
291
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
292 def get_rails_helpers
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
293 allow_rails = VIM::evaluate('g:rubycomplete_rails')
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
294 rails_loaded = VIM::evaluate('g:rubycomplete_rails_loaded')
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
295 return [] if allow_rails != '1' || rails_loaded != '1'
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
296 return RailsWords
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
297 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
298
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
299 def get_completions(base)
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
300 load_requires
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
301 load_rails
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
302
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
303 input = VIM::evaluate('expand("<cWORD>")')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
304 input += base
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
305 input.lstrip!
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
306 if input.length == 0
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
307 input = VIM::Buffer.current.line
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
308 input.strip!
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
309 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
310 message = nil
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
311
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
312
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
313 case input
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
314 when /^(\/[^\/]*\/)\.([^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
315 # Regexp
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
316 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
317 message = Regexp.quote($2)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
318
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
319 candidates = Regexp.instance_methods(true)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
320 select_message(receiver, message, candidates)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
321
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
322 when /^([^\]]*\])\.([^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
323 # Array
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
324 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
325 message = Regexp.quote($2)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
326
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
327 candidates = Array.instance_methods(true)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
328 select_message(receiver, message, candidates)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
329
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
330 when /^([^\}]*\})\.([^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
331 # Proc or Hash
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
332 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
333 message = Regexp.quote($2)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
334
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
335 candidates = Proc.instance_methods(true) | Hash.instance_methods(true)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
336 select_message(receiver, message, candidates)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
337
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
338 when /^(:[^:.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
339 # Symbol
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
340 if Symbol.respond_to?(:all_symbols)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
341 sym = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
342 candidates = Symbol.all_symbols.collect{|s| ":" + s.id2name}
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
343 candidates.grep(/^#{sym}/)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
344 candidates.delete_if do |c|
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
345 c.match( /'/ )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
346 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
347 candidates.uniq!
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
348 candidates.sort!
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
349 else
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
350 []
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
351 end
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
352
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
353 when /^::([A-Z][^:\.\(]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
354 # Absolute Constant or class methods
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
355 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
356 candidates = Object.constants
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
357 candidates.grep(/^#{receiver}/).collect{|e| "::" + e}
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
358
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
359 when /^(((::)?[A-Z][^:.\(]*)+)::?([^:.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
360 # Constant or class methods
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
361 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
362 message = Regexp.quote($4)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
363 begin
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
364 candidates = eval("#{receiver}.constants | #{receiver}.methods")
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
365 rescue Exception
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
366 candidates = []
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
367 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
368 candidates.grep(/^#{message}/).collect{|e| receiver + "::" + e}
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
369
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
370 when /^(:[^:.]+)\.([^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
371 # Symbol
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
372 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
373 message = Regexp.quote($2)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
374
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
375 candidates = Symbol.instance_methods(true)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
376 select_message(receiver, message, candidates)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
377
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
378 when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
379 # Numeric
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
380 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
381 message = Regexp.quote($4)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
382
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
383 begin
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
384 candidates = eval(receiver).methods
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
385 rescue Exception
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
386 candidates
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
387 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
388 select_message(receiver, message, candidates)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
389
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
390 when /^(\$[^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
391 candidates = global_variables.grep(Regexp.new(Regexp.quote($1)))
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
392
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
393 # when /^(\$?(\.?[^.]+)+)\.([^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
394 when /^((\.?[^.]+)+)\.([^.]*)$/
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
395 # variable
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
396 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
397 message = Regexp.quote($3)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
398 load_buffer_class( receiver )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
399
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
400 cv = eval("self.class.constants")
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
401
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
402 vartype = VIM::evaluate("GetRubyVarType('%s')" % receiver)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
403 if vartype != ''
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
404 load_buffer_class( vartype )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
405
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
406 begin
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
407 candidates = eval("#{vartype}.instance_methods")
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
408 rescue Exception
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
409 candidates = []
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
410 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
411 elsif (cv).include?(receiver)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
412 # foo.func and foo is local var.
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
413 candidates = eval("#{receiver}.methods")
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
414 elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
415 # Foo::Bar.func
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
416 begin
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
417 candidates = eval("#{receiver}.methods")
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
418 rescue Exception
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
419 candidates = []
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
420 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
421 else
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
422 # func1.func2
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
423 candidates = []
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
424 ObjectSpace.each_object(Module){|m|
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
425 next if m.name != "IRB::Context" and
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
426 /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
427 candidates.concat m.instance_methods(false)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
428 }
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
429 candidates.sort!
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
430 candidates.uniq!
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
431 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
432 #identify_type( receiver )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
433 select_message(receiver, message, candidates)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
434
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
435 #when /^((\.?[^.]+)+)\.([^.]*)\(\s*\)*$/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
436 #function call
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
437 #obj = $1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
438 #func = $3
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
439
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
440 when /^\.([^.]*)$/
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
441 # unknown(maybe String)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
442
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
443 receiver = ""
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
444 message = Regexp.quote($1)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
445
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
446 candidates = String.instance_methods(true)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
447 select_message(receiver, message, candidates)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
448
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
449 else
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
450 inclass = eval( VIM::evaluate("IsInClassDef()") )
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
451
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
452 if inclass != nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
453 classdef = "%s\n" % VIM::Buffer.current[ inclass.min ]
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
454 found = /^\s*class\s*([A-Za-z0-9_-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*\n$/.match( classdef )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
455
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
456 if found != nil
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
457 receiver = $1
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
458 message = input
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
459 load_buffer_class( receiver )
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
460 begin
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
461 candidates = eval( "#{receiver}.instance_methods" )
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
462 candidates += get_rails_helpers
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
463 select_message(receiver, message, candidates)
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
464 rescue Exception
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
465 found = nil
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
466 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
467 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
468 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
469
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
470 if inclass == nil || found == nil
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
471 candidates = eval("self.class.constants")
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
472 candidates += get_buffer_classes
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
473 candidates.uniq!
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
474 candidates.sort!
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
475 (candidates|ReservedWords).grep(/^#{Regexp.quote(input)}/)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
476 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
477 end
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
478
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
479 #print candidates
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
480 if message != nil && message.length > 0
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
481 rexp = '^%s' % message.downcase
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
482 candidates.delete_if do |c|
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
483 c.downcase.match( rexp )
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
484 $~ == nil
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
485 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
486 end
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
487
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
488 outp = ""
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
489
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
490 # tags = VIM::evaluate("taglist('^%s$')" %
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
491 valid = (candidates-Object.instance_methods)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
492
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
493 rg = 0..valid.length
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
494 rg.step(150) do |x|
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
495 stpos = 0+x
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
496 enpos = 150+x
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
497 valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s'}," % [ c, c ] }
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
498 outp.sub!(/,$/, '')
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
499
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
500 VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
501 outp = ""
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
502 end
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
503 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
504
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
505
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
506 def select_message(receiver, message, candidates)
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
507 #tags = VIM::evaluate("taglist('%s')" % receiver)
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
508 #print tags
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
509 candidates.grep(/^#{message}/).collect do |e|
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
510 case e
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
511 when /^[a-zA-Z_]/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
512 receiver + "." + e
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
513 when /^[0-9]/
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
514 when *Operators
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
515 #receiver + " " + e
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
516 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
517 end
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
518 candidates.delete_if { |x| x == nil }
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
519 candidates.uniq!
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
520 candidates.sort!
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
521 end
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
522
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
523 # }}} ruby completion
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
524 RUBYEOF
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
525 endfunction
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
526
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
527 let g:rubycomplete_rails_loaded = 0
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
528
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
529 call s:DefRuby()
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
530 " vim:tw=78:sw=4:ts=8:ft=vim:norl: