annotate runtime/autoload/rubycomplete.vim @ 36533:90545c76016e draft default tip

runtime(tar): Update tar.vim to support permissions Commit: https://github.com/vim/vim/commit/129a8446d23cd9cb4445fcfea259cba5e0487d29 Author: Lennart00 <73488709+Lennart00@users.noreply.github.com> Date: Mon Nov 11 22:39:30 2024 +0100 runtime(tar): Update tar.vim to support permissions These changes enable tar.vim to keep permissions of files that were edited intact instead of replacing them with the default permissions. The major change for this is switching from "tar -OPxf", which reads out the contents of the selected file from an tar archive to stdout to "tar -pPxf" which extracts the selected file to the current directory with permissions intact This requirs the temporary directory to be created earlier. closes: #7379 Signed-off-by: Lennart00 <73488709+Lennart00@users.noreply.github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Mon, 11 Nov 2024 22:45:02 +0100
parents 9a90c2cf96ee
children
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
15512
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
2 " Language: Ruby
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
3 " Maintainer: Mark Guzman <segfault@hasno.info>
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
4 " URL: https://github.com/vim-ruby/vim-ruby
34050
9a90c2cf96ee runtime(ruby): Update ftplugin and omni-complete (#13805)
Christian Brabandt <cb@256bit.org>
parents: 25056
diff changeset
5 " Last Change: 2023 Dec 31
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
6 " ----------------------------------------------------------------------------
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
7 "
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
8 " Ruby IRB/Complete author: Keiju ISHITSUKA(keiju@ishitsuka.com)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
9 " ----------------------------------------------------------------------------
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
10
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
11 " {{{ requirement checks
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
12
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
13 function! s:ErrMsg(msg)
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
14 echohl ErrorMsg
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
15 echo a:msg
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
16 echohl None
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
17 endfunction
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
18
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
19 if !has('ruby')
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
20 call s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
21 call s:ErrMsg( "Error: falling back to syntax completion" )
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
22 " lets fall back to syntax completion
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
23 setlocal omnifunc=syntaxcomplete#Complete
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
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
27 if version < 700
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
28 call s:ErrMsg( "Error: Required vim >= 7.0" )
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
29 finish
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
30 endif
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
31 " }}} requirement checks
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
32
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
33 " {{{ configuration failsafe initialization
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
34 if !exists("g:rubycomplete_rails")
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
35 let g:rubycomplete_rails = 0
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
36 endif
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
37
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
38 if !exists("g:rubycomplete_classes_in_global")
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
39 let g:rubycomplete_classes_in_global = 0
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
40 endif
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
41
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
42 if !exists("g:rubycomplete_buffer_loading")
1619
b9740fb41986 updated for version 7.2a
vimboss
parents: 1121
diff changeset
43 let g:rubycomplete_buffer_loading = 0
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
44 endif
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
45
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
46 if !exists("g:rubycomplete_include_object")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
47 let g:rubycomplete_include_object = 0
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
48 endif
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
49
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
50 if !exists("g:rubycomplete_include_objectspace")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
51 let g:rubycomplete_include_objectspace = 0
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
52 endif
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
53 " }}} configuration failsafe initialization
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
54
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
55 " {{{ regex patterns
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
56
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
57 " Regex that defines the start-match for the 'end' keyword.
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
58 let s:end_start_regex =
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
59 \ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
60 \ '\<\%(module\|class\|if\|for\|while\|until\|case\|unless\|begin' .
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
61 \ '\|\%(\K\k*[!?]\?\s\+\)\=def\):\@!\>' .
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
62 \ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
63
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
64 " Regex that defines the middle-match for the 'end' keyword.
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
65 let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|elsif\):\@!\>'
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
66
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
67 " Regex that defines the end-match for the 'end' keyword.
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
68 let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end:\@!\>'
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
69
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
70 " }}} regex patterns
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
71
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
72 " {{{ vim-side support functions
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
73 let s:rubycomplete_debug = 0
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
74
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
75 function! s:dprint(msg)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
76 if s:rubycomplete_debug == 1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
77 echom a:msg
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
78 endif
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
79 endfunction
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
80
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
81 function! s:GetBufferRubyModule(name, ...)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
82 if a:0 == 1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
83 let [snum,enum] = s:GetBufferRubyEntity(a:name, "module", a:1)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
84 else
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
85 let [snum,enum] = s:GetBufferRubyEntity(a:name, "module")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
86 endif
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
87 return snum . '..' . enum
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
88 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
89
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
90 function! s:GetBufferRubyClass(name, ...)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
91 if a:0 >= 1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
92 let [snum,enum] = s:GetBufferRubyEntity(a:name, "class", a:1)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
93 else
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
94 let [snum,enum] = s:GetBufferRubyEntity(a:name, "class")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
95 endif
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
96 return snum . '..' . enum
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
97 endfunction
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
98
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
99 function! s:GetBufferRubySingletonMethods(name)
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
100 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
101
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
102 function! s:GetBufferRubyEntity( name, type, ... )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
103 let lastpos = getpos(".")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
104 let lastline = lastpos
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
105 if (a:0 >= 1)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
106 let lastline = [ 0, a:1, 0, 0 ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
107 call cursor( a:1, 0 )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
108 endif
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
109
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
110 let stopline = 1
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
111
10048
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
112 let crex = '^\s*\<' . a:type . '\>\s*\<' . escape(a:name, '*') . '\>\s*\(<\s*.*\s*\)\?'
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
113 let [lnum,lcol] = searchpos( crex, 'w' )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
114 "let [lnum,lcol] = searchpairpos( crex . '\zs', '', '\(end\|}\)', 'w' )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
115
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
116 if lnum == 0 && lcol == 0
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
117 call cursor(lastpos[1], lastpos[2])
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
118 return [0,0]
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
119 endif
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
120
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
121 let curpos = getpos(".")
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
122 let [enum,ecol] = searchpairpos( s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'W' )
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
123 call cursor(lastpos[1], lastpos[2])
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
124
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
125 if lnum > enum
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
126 return [0,0]
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
127 endif
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
128 " we found a the class def
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
129 return [lnum,enum]
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
130 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
131
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
132 function! s:IsInClassDef()
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
133 return s:IsPosInClassDef( line('.') )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
134 endfunction
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
135
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
136 function! s:IsPosInClassDef(pos)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
137 let [snum,enum] = s:GetBufferRubyEntity( '.*', "class" )
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
138 let ret = 'nil'
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
139
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
140 if snum < a:pos && a:pos < enum
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
141 let ret = snum . '..' . enum
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
142 endif
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
143
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
144 return ret
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
145 endfunction
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
146
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
147 function! s:IsInComment(pos)
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
148 let stack = synstack(a:pos[0], a:pos[1])
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
149 if !empty(stack)
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
150 return synIDattr(stack[0], 'name') =~ 'ruby\%(.*Comment\|Documentation\)'
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
151 else
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
152 return 0
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
153 endif
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
154 endfunction
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
155
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
156 function! s:GetRubyVarType(v)
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
157 let stopline = 1
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
158 let vtp = ''
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
159 let curpos = getpos('.')
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
160 let sstr = '^\s*#\s*@var\s*'.escape(a:v, '*').'\>\s\+[^ \t]\+\s*$'
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
161 let [lnum,lcol] = searchpos(sstr,'nb',stopline)
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
162 if lnum != 0 && lcol != 0
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
163 call setpos('.',curpos)
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
164 let str = getline(lnum)
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
165 let vtp = substitute(str,sstr,'\1','')
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
166 return vtp
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
167 endif
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
168 call setpos('.',curpos)
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
169 let ctors = '\(now\|new\|open\|get_instance'
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
170 if exists('g:rubycomplete_rails') && g:rubycomplete_rails == 1 && s:rubycomplete_rails_loaded == 1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
171 let ctors = ctors.'\|find\|create'
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
172 else
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
173 endif
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
174 let ctors = ctors.'\)'
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
175
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
176 let fstr = '=\s*\([^ \t]\+.' . ctors .'\>\|[\[{"''/]\|%[xwQqr][(\[{@]\|[A-Za-z0-9@:\-()\.]\+...\?\|lambda\|&\)'
10048
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
177 let sstr = ''.escape(a:v, '*').'\>\s*[+\-*/]*'.fstr
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
178 let pos = searchpos(sstr,'bW')
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
179 while pos != [0,0] && s:IsInComment(pos)
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
180 let pos = searchpos(sstr,'bW')
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
181 endwhile
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
182 if pos != [0,0]
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
183 let [lnum, col] = pos
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
184 let str = matchstr(getline(lnum),fstr,col)
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
185 let str = substitute(str,'^=\s*','','')
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
186
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
187 call setpos('.',pos)
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
188 if str == '"' || str == '''' || stridx(tolower(str), '%q[') != -1
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
189 return 'String'
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
190 elseif str == '[' || stridx(str, '%w[') != -1
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
191 return 'Array'
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
192 elseif str == '{'
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
193 return 'Hash'
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
194 elseif str == '/' || str == '%r{'
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
195 return 'Regexp'
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
196 elseif strlen(str) >= 4 && stridx(str,'..') != -1
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
197 return 'Range'
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
198 elseif stridx(str, 'lambda') != -1 || str == '&'
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
199 return 'Proc'
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
200 elseif strlen(str) > 4
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
201 let l = stridx(str,'.')
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
202 return str[0:l-1]
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
203 end
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
204 return ''
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
205 endif
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
206 call setpos('.',curpos)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
207 return ''
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
208 endfunction
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
209
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
210 "}}} vim-side support functions
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
211
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
212 "{{{ vim-side completion function
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
213 function! rubycomplete#Init()
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
214 execute "ruby VimRubyCompletion.preload_rails"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
215 endfunction
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
216
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
217 function! rubycomplete#Complete(findstart, base)
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
218 "findstart = 1 when we need to get the text length
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
219 if a:findstart
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
220 let line = getline('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
221 let idx = col('.')
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
222 while idx > 0
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
223 let idx -= 1
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
224 let c = line[idx-1]
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
225 if c =~ '\w'
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
226 continue
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
227 elseif ! c =~ '\.'
10272
57b2b8268d3a commit https://github.com/vim/vim/commit/4575876dc865d4160f20d61bd822fbe7cafbec41
Christian Brabandt <cb@256bit.org>
parents: 10048
diff changeset
228 let idx = -1
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
229 break
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
230 else
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
231 break
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
232 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
233 endwhile
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
234
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
235 return idx
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
236 "findstart = 0 when we need to return the list of completions
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
237 else
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
238 let g:rubycomplete_completions = []
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
239 execute "ruby VimRubyCompletion.get_completions('" . a:base . "')"
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
240 return g:rubycomplete_completions
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
241 endif
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
242 endfunction
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
243 "}}} vim-side completion function
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
244
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
245 "{{{ ruby-side code
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
246 function! s:DefRuby()
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
247 ruby << RUBYEOF
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
248 # {{{ ruby completion
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
249
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
250 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
251 require 'rubygems' # let's assume this is safe...?
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
252 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
253 #ignore?
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
254 end
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
255 class VimRubyCompletion
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
256 # {{{ constants
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
257 @@debug = false
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
258 @@ReservedWords = [
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
259 "BEGIN", "END",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
260 "alias", "and",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
261 "begin", "break",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
262 "case", "class",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
263 "def", "defined", "do",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
264 "else", "elsif", "end", "ensure",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
265 "false", "for",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
266 "if", "in",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
267 "module",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
268 "next", "nil", "not",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
269 "or",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
270 "redo", "rescue", "retry", "return",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
271 "self", "super",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
272 "then", "true",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
273 "undef", "unless", "until",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
274 "when", "while",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
275 "yield",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
276 ]
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
277
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
278 @@Operators = [ "%", "&", "*", "**", "+", "-", "/",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
279 "<", "<<", "<=", "<=>", "==", "===", "=~", ">", ">=", ">>",
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
280 "[]", "[]=", "^", ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
281 # }}} constants
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
282
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
283 # {{{ buffer analysis magic
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
284 def load_requires
15512
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
285
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
286 custom_paths = VIM::evaluate("get(g:, 'rubycomplete_load_paths', [])")
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
287
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
288 if !custom_paths.empty?
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
289 $LOAD_PATH.concat(custom_paths).uniq!
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
290 end
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
291
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
292 buf = VIM::Buffer.current
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
293 enum = buf.line_number
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
294 nums = Range.new( 1, enum )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
295 nums.each do |x|
15512
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
296
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
297 ln = buf[x]
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
298 begin
15512
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
299 if /.*require_relative\s*(.*)$/.match( ln )
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
300 eval( "require %s" % File.expand_path($1) )
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
301 elsif /.*require\s*(["'].*?["'])/.match( ln )
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
302 eval( "require %s" % $1 )
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
303 end
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
304 rescue Exception => e
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
305 dprint e.inspect
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
306 end
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
307 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
308 end
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
309
10048
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
310 def load_gems
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
311 fpath = VIM::evaluate("get(g:, 'rubycomplete_gemfile_path', 'Gemfile')")
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
312 return unless File.file?(fpath) && File.readable?(fpath)
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
313 want_bundler = VIM::evaluate("get(g:, 'rubycomplete_use_bundler')")
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
314 parse_file = !want_bundler
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
315 begin
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
316 require 'bundler'
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
317 Bundler.setup
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
318 Bundler.require
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
319 rescue Exception
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
320 parse_file = true
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
321 end
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
322 if parse_file
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
323 File.new(fpath).each_line do |line|
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
324 begin
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
325 require $1 if /\s*gem\s*['"]([^'"]+)/.match(line)
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
326 rescue Exception
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
327 end
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
328 end
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
329 end
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
330 end
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
331
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
332 def load_buffer_class(name)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
333 dprint "load_buffer_class(%s) START" % name
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
334 classdef = get_buffer_entity(name, 's:GetBufferRubyClass("%s")')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
335 return if classdef == nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
336
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
337 pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
338 load_buffer_class( $2 ) if pare != nil && $2 != name # load parent class if needed
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
339
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
340 mixre = /.*\n\s*(include|prepend)\s*(.*)\s*\n/.match( classdef )
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
341 load_buffer_module( $2 ) if mixre != nil && $2 != name # load mixins if needed
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
342
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
343 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
344 eval classdef
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
345 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
346 VIM::evaluate( "s:ErrMsg( 'Problem loading class \"%s\", was it already completed?' )" % name )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
347 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
348 dprint "load_buffer_class(%s) END" % name
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
349 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
350
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
351 def load_buffer_module(name)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
352 dprint "load_buffer_module(%s) START" % name
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
353 classdef = get_buffer_entity(name, 's:GetBufferRubyModule("%s")')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
354 return if classdef == nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
355
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
356 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
357 eval classdef
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
358 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
359 VIM::evaluate( "s:ErrMsg( 'Problem loading module \"%s\", was it already completed?' )" % name )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
360 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
361 dprint "load_buffer_module(%s) END" % name
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
362 end
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
363
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
364 def get_buffer_entity(name, vimfun)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
365 loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1619
diff changeset
366 return nil if loading_allowed.to_i.zero?
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
367 return nil if /(\"|\')+/.match( name )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
368 buf = VIM::Buffer.current
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
369 nums = eval( VIM::evaluate( vimfun % name ) )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
370 return nil if nums == nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
371 return nil if nums.min == nums.max && nums.min == 0
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
372
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
373 dprint "get_buffer_entity START"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
374 visited = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
375 clscnt = 0
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
376 bufname = VIM::Buffer.current.name
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
377 classdef = ""
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
378 cur_line = VIM::Buffer.current.line_number
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
379 while (nums != nil && !(nums.min == 0 && nums.max == 0) )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
380 dprint "visited: %s" % visited.to_s
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
381 break if visited.index( nums )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
382 visited << nums
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
383
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
384 nums.each do |x|
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
385 if x != cur_line
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
386 next if x == 0
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
387 ln = buf[x]
15512
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
388 is_const = false
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
389 if /^\s*(module|class|def|include)\s+/.match(ln) || is_const = /^\s*?[A-Z]([A-z]|[1-9])*\s*?[|]{0,2}=\s*?.+\s*?/.match(ln)
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
390 clscnt += 1 if /class|module/.match($1)
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
391 # We must make sure to load each constant only once to avoid errors
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
392 if is_const
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
393 ln.gsub!(/\s*?[|]{0,2}=\s*?/, '||=')
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
394 end
2225
dd5c1983e355 Runtime file updates.
Bram Moolenaar <bram@vim.org>
parents: 2034
diff changeset
395 #dprint "\$1$1
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
396 classdef += "%s\n" % ln
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
397 classdef += "end\n" if /def\s+/.match(ln)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
398 dprint ln
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
399 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
400 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
401 end
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
402
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
403 nm = "%s(::.*)*\", %s, \"" % [ name, nums.last ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
404 nums = eval( VIM::evaluate( vimfun % nm ) )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
405 dprint "nm: \"%s\"" % nm
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
406 dprint "vimfun: %s" % (vimfun % nm)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
407 dprint "got nums: %s" % nums.to_s
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
408 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
409 if classdef.length > 1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
410 classdef += "end\n"*clscnt
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
411 # classdef = "class %s\n%s\nend\n" % [ bufname.gsub( /\/|\\/, "_" ), classdef ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
412 end
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
413
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
414 dprint "get_buffer_entity END"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
415 dprint "classdef====start"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
416 lns = classdef.split( "\n" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
417 lns.each { |x| dprint x }
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
418 dprint "classdef====end"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
419 return classdef
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
420 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
421
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
422 def get_var_type( receiver )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
423 if /(\"|\')+/.match( receiver )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
424 "String"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
425 else
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
426 VIM::evaluate("s:GetRubyVarType('%s')" % receiver)
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
427 end
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
428 end
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
429
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
430 def dprint( txt )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
431 print txt if @@debug
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
432 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
433
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
434 def escape_vim_singlequote_string(str)
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
435 str.to_s.gsub(/'/,"\\'")
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
436 end
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
437
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
438 def get_buffer_entity_list( type )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
439 # this will be a little expensive.
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
440 loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
441 allow_aggressive_load = VIM::evaluate("exists('g:rubycomplete_classes_in_global') && g:rubycomplete_classes_in_global")
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1619
diff changeset
442 return [] if allow_aggressive_load.to_i.zero? || loading_allowed.to_i.zero?
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
443
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
444 buf = VIM::Buffer.current
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
445 eob = buf.length
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
446 ret = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
447 rg = 1..eob
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
448 re = eval( "/^\s*%s\s*([A-Za-z0-9_:-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*/" % type )
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
449
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
450 rg.each do |x|
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
451 if re.match( buf[x] )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
452 next if type == "def" && eval( VIM::evaluate("s:IsPosInClassDef(%s)" % x) ) != nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
453 ret.push $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
454 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
455 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
456
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
457 return ret
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
458 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
459
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
460 def get_buffer_modules
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
461 return get_buffer_entity_list( "modules" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
462 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
463
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
464 def get_buffer_methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
465 return get_buffer_entity_list( "def" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
466 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
467
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
468 def get_buffer_classes
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
469 return get_buffer_entity_list( "class" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
470 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
471
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
472 def load_rails
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
473 allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1619
diff changeset
474 return if allow_rails.to_i.zero?
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
475
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
476 buf_path = VIM::evaluate('expand("%:p")')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
477 file_name = VIM::evaluate('expand("%:t")')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
478 vim_dir = VIM::evaluate('getcwd()')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
479 file_dir = buf_path.gsub( file_name, '' )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
480 file_dir.gsub!( /\\/, "/" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
481 vim_dir.gsub!( /\\/, "/" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
482 vim_dir << "/"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
483 dirs = [ vim_dir, file_dir ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
484 sdirs = [ "", "./", "../", "../../", "../../../", "../../../../" ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
485 rails_base = nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
486
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
487 dirs.each do |dir|
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
488 sdirs.each do |sub|
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
489 trail = "%s%s" % [ dir, sub ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
490 tcfg = "%sconfig" % trail
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
491
34050
9a90c2cf96ee runtime(ruby): Update ftplugin and omni-complete (#13805)
Christian Brabandt <cb@256bit.org>
parents: 25056
diff changeset
492 if File.exist?( tcfg )
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
493 rails_base = trail
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
494 break
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
495 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
496 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
497 break if rails_base
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
498 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
499
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
500 return if rails_base == nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
501 $:.push rails_base unless $:.index( rails_base )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
502
25056
43593a5d873f Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18857
diff changeset
503 bootfile = rails_base + "config/boot.rb"
43593a5d873f Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 18857
diff changeset
504 envfile = rails_base + "config/environment.rb"
34050
9a90c2cf96ee runtime(ruby): Update ftplugin and omni-complete (#13805)
Christian Brabandt <cb@256bit.org>
parents: 25056
diff changeset
505 if File.exist?( bootfile ) && File.exist?( envfile )
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
506 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
507 require bootfile
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
508 require envfile
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
509 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
510 require 'console_app'
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
511 require 'console_with_helpers'
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
512 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
513 dprint "Rails 1.1+ Error %s" % $!
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
514 # assume 1.0
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
515 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
516 #eval( "Rails::Initializer.run" ) #not necessary?
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
517 VIM::command('let s:rubycomplete_rails_loaded = 1')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
518 dprint "rails loaded"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
519 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
520 dprint "Rails Error %s" % $!
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
521 VIM::evaluate( "s:ErrMsg('Error loading rails environment')" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
522 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
523 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
524 end
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
525
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
526 def get_rails_helpers
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
527 allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
528 rails_loaded = VIM::evaluate('s:rubycomplete_rails_loaded')
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1619
diff changeset
529 return [] if allow_rails.to_i.zero? || rails_loaded.to_i.zero?
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
530
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
531 buf_path = VIM::evaluate('expand("%:p")')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
532 buf_path.gsub!( /\\/, "/" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
533 path_elm = buf_path.split( "/" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
534 dprint "buf_path: %s" % buf_path
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
535 types = [ "app", "db", "lib", "test", "components", "script" ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
536
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
537 i = nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
538 ret = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
539 type = nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
540 types.each do |t|
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
541 i = path_elm.index( t )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
542 break if i
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
543 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
544 type = path_elm[i]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
545 type.downcase!
843
9f279ebda751 updated for version 7.0f01
vimboss
parents: 840
diff changeset
546
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
547 dprint "type: %s" % type
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
548 case type
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
549 when "app"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
550 i += 1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
551 subtype = path_elm[i]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
552 subtype.downcase!
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
553
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
554 dprint "subtype: %s" % subtype
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
555 case subtype
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
556 when "views"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
557 ret += ActionView::Base.instance_methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
558 ret += ActionView::Base.methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
559 when "controllers"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
560 ret += ActionController::Base.instance_methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
561 ret += ActionController::Base.methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
562 when "models"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
563 ret += ActiveRecord::Base.instance_methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
564 ret += ActiveRecord::Base.methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
565 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
566
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
567 when "db"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
568 ret += ActiveRecord::ConnectionAdapters::SchemaStatements.instance_methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
569 ret += ActiveRecord::ConnectionAdapters::SchemaStatements.methods
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
570 end
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
571
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
572 return ret
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
573 end
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
574
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
575 def add_rails_columns( cls )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
576 allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
577 rails_loaded = VIM::evaluate('s:rubycomplete_rails_loaded')
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1619
diff changeset
578 return [] if allow_rails.to_i.zero? || rails_loaded.to_i.zero?
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
579
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
580 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
581 eval( "#{cls}.establish_connection" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
582 return [] unless eval( "#{cls}.ancestors.include?(ActiveRecord::Base).to_s" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
583 col = eval( "#{cls}.column_names" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
584 return col if col
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
585 rescue
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
586 dprint "add_rails_columns err: (cls: %s) %s" % [ cls, $! ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
587 return []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
588 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
589 return []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
590 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
591
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
592 def clean_sel(sel, msg)
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
593 ret = sel.reject{|x|x.nil?}.uniq
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
594 ret = ret.grep(/^#{Regexp.quote(msg)}/) if msg != nil
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
595 ret
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
596 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
597
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
598 def get_rails_view_methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
599 allow_rails = VIM::evaluate("exists('g:rubycomplete_rails') && g:rubycomplete_rails")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
600 rails_loaded = VIM::evaluate('s:rubycomplete_rails_loaded')
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1619
diff changeset
601 return [] if allow_rails.to_i.zero? || rails_loaded.to_i.zero?
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
602
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
603 buf_path = VIM::evaluate('expand("%:p")')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
604 buf_path.gsub!( /\\/, "/" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
605 pelm = buf_path.split( "/" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
606 idx = pelm.index( "views" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
607
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
608 return [] unless idx
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
609 idx += 1
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
610
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
611 clspl = pelm[idx].camelize.pluralize
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
612 cls = clspl.singularize
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
613
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
614 ret = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
615 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
616 ret += eval( "#{cls}.instance_methods" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
617 ret += eval( "#{clspl}Helper.instance_methods" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
618 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
619 dprint "Error: Unable to load rails view helpers for %s: %s" % [ cls, $! ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
620 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
621
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
622 return ret
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
623 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
624 # }}} buffer analysis magic
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
625
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
626 # {{{ main completion code
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
627 def self.preload_rails
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
628 a = VimRubyCompletion.new
15512
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
629 if VIM::evaluate("has('nvim')") == 0
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
630 require 'thread'
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
631 Thread.new(a) do |b|
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
632 begin
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
633 b.load_rails
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
634 rescue
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
635 end
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
636 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
637 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
638 a.load_rails
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
639 rescue
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
640 end
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
641
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
642 def self.get_completions(base)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
643 b = VimRubyCompletion.new
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
644 b.get_completions base
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
645 end
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
646
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
647 def get_completions(base)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
648 loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
1668
0b796e045c42 updated for version 7.2b-000
vimboss
parents: 1619
diff changeset
649 if loading_allowed.to_i == 1
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
650 load_requires
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
651 load_rails
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
652 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
653
10048
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
654 want_gems = VIM::evaluate("get(g:, 'rubycomplete_load_gemfile')")
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
655 load_gems unless want_gems.to_i.zero?
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
656
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
657 input = VIM::Buffer.current.line
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
658 cpos = VIM::Window.current.cursor[1] - 1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
659 input = input[0..cpos]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
660 input += base
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
661 input.sub!(/.*[ \t\n\"\\'`><=;|&{(]/, '') # Readline.basic_word_break_characters
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
662 input.sub!(/self\./, '')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
663 input.sub!(/.*((\.\.[\[(]?)|([\[(]))/, '')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
664
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
665 dprint 'input %s' % input
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
666 message = nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
667 receiver = nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
668 methods = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
669 variables = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
670 classes = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
671 constants = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
672
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
673 case input
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
674 when /^(\/[^\/]*\/)\.([^.]*)$/ # Regexp
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
675 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
676 message = Regexp.quote($2)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
677 methods = Regexp.instance_methods(true)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
678
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
679 when /^([^\]]*\])\.([^.]*)$/ # Array
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
680 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
681 message = Regexp.quote($2)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
682 methods = Array.instance_methods(true)
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
683
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
684 when /^([^\}]*\})\.([^.]*)$/ # Proc or Hash
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
685 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
686 message = Regexp.quote($2)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
687 methods = Proc.instance_methods(true) | Hash.instance_methods(true)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
688
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
689 when /^(:[^:.]*)$/ # Symbol
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
690 dprint "symbol"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
691 if Symbol.respond_to?(:all_symbols)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
692 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
693 message = $1.sub( /:/, '' )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
694 methods = Symbol.all_symbols.collect{|s| s.id2name}
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
695 methods.delete_if { |c| c.match( /'/ ) }
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
696 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
697
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
698 when /^::([A-Z][^:\.\(]*)?$/ # Absolute Constant or class methods
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
699 dprint "const or cls"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
700 receiver = $1
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
701 methods = Object.constants.collect{ |c| c.to_s }.grep(/^#{receiver}/)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
702
2225
dd5c1983e355 Runtime file updates.
Bram Moolenaar <bram@vim.org>
parents: 2034
diff changeset
703 when /^(((::)?[A-Z][^:.\(]*)+?)::?([^:.]*)$/ # Constant or class methods
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
704 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
705 message = Regexp.quote($4)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
706 dprint "const or cls 2 [recv: \'%s\', msg: \'%s\']" % [ receiver, message ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
707 load_buffer_class( receiver )
15512
f0f06837a699 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 10272
diff changeset
708 load_buffer_module( receiver )
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
709 begin
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
710 constants = eval("#{receiver}.constants").collect{ |c| c.to_s }.grep(/^#{message}/)
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
711 methods = eval("#{receiver}.methods").collect{ |m| m.to_s }.grep(/^#{message}/)
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
712 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
713 dprint "exception: %s" % $!
18857
70ce979e76bc Update a few runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 15512
diff changeset
714 constants = []
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
715 methods = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
716 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
717
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
718 when /^(:[^:.]+)\.([^.]*)$/ # Symbol
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
719 dprint "symbol"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
720 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
721 message = Regexp.quote($2)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
722 methods = Symbol.instance_methods(true)
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
723
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
724 when /^([0-9_]+(\.[0-9_]+)?(e[0-9]+)?)\.([^.]*)$/ # Numeric
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
725 dprint "numeric"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
726 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
727 message = Regexp.quote($4)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
728 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
729 methods = eval(receiver).methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
730 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
731 methods = []
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
732 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
733
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
734 when /^(\$[^.]*)$/ #global
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
735 dprint "global"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
736 methods = global_variables.grep(Regexp.new(Regexp.quote($1)))
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
737
2225
dd5c1983e355 Runtime file updates.
Bram Moolenaar <bram@vim.org>
parents: 2034
diff changeset
738 when /^((\.?[^.]+)+?)\.([^.]*)$/ # variable
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
739 dprint "variable"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
740 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
741 message = Regexp.quote($3)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
742 load_buffer_class( receiver )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
743
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
744 cv = eval("self.class.constants")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
745 vartype = get_var_type( receiver )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
746 dprint "vartype: %s" % vartype
10048
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
747
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
748 invalid_vartype = ['', "gets"]
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
749 if !invalid_vartype.include?(vartype)
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
750 load_buffer_class( vartype )
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
751
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
752 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
753 methods = eval("#{vartype}.instance_methods")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
754 variables = eval("#{vartype}.instance_variables")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
755 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
756 dprint "load_buffer_class err: %s" % $!
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
757 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
758 elsif (cv).include?(receiver)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
759 # foo.func and foo is local var.
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
760 methods = eval("#{receiver}.methods")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
761 vartype = receiver
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
762 elsif /^[A-Z]/ =~ receiver and /\./ !~ receiver
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
763 vartype = receiver
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
764 # Foo::Bar.func
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
765 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
766 methods = eval("#{receiver}.methods")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
767 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
768 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
769 else
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
770 # func1.func2
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
771 ObjectSpace.each_object(Module){|m|
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
772 next if m.name != "IRB::Context" and
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
773 /^(IRB|SLex|RubyLex|RubyToken)/ =~ m.name
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
774 methods.concat m.instance_methods(false)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
775 }
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
776 end
10048
43efa4f5a8ea commit https://github.com/vim/vim/commit/89bcfda6834aba724d12554a34b9ed49f5789fd5
Christian Brabandt <cb@256bit.org>
parents: 4869
diff changeset
777 variables += add_rails_columns( "#{vartype}" ) if vartype && !invalid_vartype.include?(vartype)
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
778
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
779 when /^\(?\s*[A-Za-z0-9:^@.%\/+*\(\)]+\.\.\.?[A-Za-z0-9:^@.%\/+*\(\)]+\s*\)?\.([^.]*)/
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
780 message = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
781 methods = Range.instance_methods(true)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
782
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
783 when /^\.([^.]*)$/ # unknown(maybe String)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
784 message = Regexp.quote($1)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
785 methods = String.instance_methods(true)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
786
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
787 else
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
788 dprint "default/other"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
789 inclass = eval( VIM::evaluate("s:IsInClassDef()") )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
790
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
791 if inclass != nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
792 dprint "inclass"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
793 classdef = "%s\n" % VIM::Buffer.current[ inclass.min ]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
794 found = /^\s*class\s*([A-Za-z0-9_-]*)(\s*<\s*([A-Za-z0-9_:-]*))?\s*\n$/.match( classdef )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
795
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
796 if found != nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
797 receiver = $1
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
798 message = input
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
799 load_buffer_class( receiver )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
800 begin
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
801 methods = eval( "#{receiver}.instance_methods" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
802 variables += add_rails_columns( "#{receiver}" )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
803 rescue Exception
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
804 found = nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
805 end
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
806 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
807 end
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
808
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
809 if inclass == nil || found == nil
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
810 dprint "inclass == nil"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
811 methods = get_buffer_methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
812 methods += get_rails_view_methods
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
813
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
814 cls_const = Class.constants
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
815 constants = cls_const.select { |c| /^[A-Z_-]+$/.match( c ) }
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
816 classes = eval("self.class.constants") - constants
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
817 classes += get_buffer_classes
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
818 classes += get_buffer_modules
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
819
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
820 include_objectspace = VIM::evaluate("exists('g:rubycomplete_include_objectspace') && g:rubycomplete_include_objectspace")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
821 ObjectSpace.each_object(Class) { |cls| classes << cls.to_s } if include_objectspace == "1"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
822 message = receiver = input
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
823 end
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
824
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
825 methods += get_rails_helpers
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
826 methods += Kernel.public_methods
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
827 end
852
d58e3db4a7d1 updated for version 7.0f05
vimboss
parents: 843
diff changeset
828
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
829 include_object = VIM::evaluate("exists('g:rubycomplete_include_object') && g:rubycomplete_include_object")
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
830 methods = clean_sel( methods, message )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
831 methods = (methods-Object.instance_methods) if include_object == "0"
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
832 rbcmeth = (VimRubyCompletion.instance_methods-Object.instance_methods) # lets remove those rubycomplete methods
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
833 methods = (methods-rbcmeth)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
834
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
835 variables = clean_sel( variables, message )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
836 classes = clean_sel( classes, message ) - ["VimRubyCompletion"]
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
837 constants = clean_sel( constants, message )
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
838
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
839 valid = []
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
840 valid += methods.collect { |m| { :name => m.to_s, :type => 'm' } }
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
841 valid += variables.collect { |v| { :name => v.to_s, :type => 'v' } }
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
842 valid += classes.collect { |c| { :name => c.to_s, :type => 't' } }
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
843 valid += constants.collect { |d| { :name => d.to_s, :type => 'd' } }
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
844 valid.sort! { |x,y| x[:name] <=> y[:name] }
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
845
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
846 outp = ""
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
847
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
848 rg = 0..valid.length
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
849 rg.step(150) do |x|
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
850 stpos = 0+x
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
851 enpos = 150+x
4869
a5352e73dc00 Update runtime files.
Bram Moolenaar <bram@vim.org>
parents: 2225
diff changeset
852 valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ].map{|x|escape_vim_singlequote_string(x)} }
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
853 outp.sub!(/,$/, '')
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
854
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
855 VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
856 outp = ""
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
857 end
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
858 end
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
859 # }}} main completion code
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
860
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
861 end # VimRubyCompletion
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 838
diff changeset
862 # }}} ruby completion
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
863 RUBYEOF
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
864 endfunction
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
865
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
866 let s:rubycomplete_rails_loaded = 0
838
8e5830943bff updated for version 7.0e04
vimboss
parents: 831
diff changeset
867
831
f24a95dae8ee updated for version 7.0d05
vimboss
parents:
diff changeset
868 call s:DefRuby()
1121
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
869 "}}} ruby-side code
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
870
e63691e7c504 updated for version 7.1a
vimboss
parents: 852
diff changeset
871 " vim:tw=78:sw=4:ts=8:et:fdm=marker:ft=vim:norl: