annotate runtime/autoload/rubycomplete.vim @ 838:8e5830943bff v7.0e04

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