Skip to content

Commit d2cc94a

Browse files
committed
Decouple rails#ruby_cfile() from buffer object
1 parent df71c01 commit d2cc94a

File tree

1 file changed

+32
-35
lines changed

1 file changed

+32
-35
lines changed

autoload/rails.vim

Lines changed: 32 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2548,19 +2548,23 @@ function! s:ruby_cfile() abort
25482548
let res = s:match_method('render\>\s*\%(:\%(template\|action\)\s\+=>\|template:\|action:\)\s*')
25492549
if len(res)|return s:findview(res)|endif
25502550

2551-
if buffer.type_name('controller', 'mailer')
2551+
let contr = matchstr(expand('%:p'), '.*[\/]app[\/]\%(controllers[\/].*\ze_controller\|mailers[\/].*\ze\|models[\/].*_mailer\ze\)\.rb$')
2552+
if len(contr)
25522553
let res = s:sub(s:match_symbol('layout'),'^/','')
25532554
if len(res)|return s:findlayout(res)|endif
25542555
let raw = s:sub(s:match_method('render\s*(\=\s*\%(:layout\s\+=>\|layout:\)\s*',1),'^/','')
25552556
if len(res)|return s:findview(res)|endif
25562557
let res = s:sub(s:match_method('render'),'^/','')
25572558
if len(res)|return s:findview(res)|endif
25582559

2559-
let contr = s:controller()
2560-
let view = s:match_it('\s*\<def\s\+\(\k\+\)\>(\=','/\1')
2561-
if len(view)
2562-
let res = buffer.resolve_view(contr.view)
2560+
let viewpath = substitute(contr, '\([\/]\)app\zs[\/]\%(controllers\|mailers\|models\)\([\/].*\)', '\1views\2\1', '')
2561+
let view = s:match_it('\s*\<def\s\+\(\k\+\)\>(\=','\1')
2562+
if len(viewpath) && len(view)
2563+
let res = s:glob(viewpath . view . '.html.*')
2564+
if len(res)|return res[0]|endif
2565+
let res = s:glob(viewpath . view . '.*')
25632566
if len(res)|return res|endif
2567+
return substitute(viewpath, '.*[\/]app[\/]views[\/]', '', '') . view . '.html'
25642568
endif
25652569
else
25662570
let res = s:sub(s:match_symbol('layout'),'^/','')
@@ -2589,15 +2593,26 @@ function! s:ruby_cfile() abort
25892593
return s:findasset(res, 'javascripts')
25902594
endif
25912595

2592-
let res = s:match_method('asset_pack_path')
2593-
if len(res)
2594-
return buffer.app().resolve_pack(res)
2595-
endif
2596-
2597-
for [type, suf] in [['javascript', '.js'], ['stylesheet', '.css']]
2598-
let res = s:match_method(type.'_pack_tag')
2599-
if len(res)
2600-
return buffer.app().resolve_pack(res . suf)
2596+
for [type, suf] in [['javascript', '.js'], ['stylesheet', '.css'], ['asset', '']]
2597+
let res = s:match_method(type.'_pack_\%(path\|tag\)')
2598+
let appdir = matchstr(expand('%:p'), '.*[\/]app[\/]\ze\%(views\|helpers\)[\/]')
2599+
if empty(appdir) && s:active()
2600+
let appdir = rails#app().path('app/')
2601+
endif
2602+
if len(res) && len(appdir)
2603+
let name = res . suf
2604+
let suffixes = rails#pack_suffixes(matchstr(name, '\.\zs\w\+$'))
2605+
call extend(suffixes, map(copy(suffixes), '"/index".v:val'))
2606+
let dir = appdir . 'javascript' . appdir[-1:-1] . 'packs' . appdir[-1:-1]
2607+
if len(suffixes)
2608+
let base = dir . substitute(name, '\.\w\+$', '', '')
2609+
for suffix in [''] + suffixes
2610+
if s:filereadable(base . suffix)
2611+
return base . suffix
2612+
endif
2613+
endfor
2614+
return dir . name
2615+
endif
26012616
endif
26022617
endfor
26032618

@@ -2641,7 +2656,7 @@ function! s:ruby_cfile() abort
26412656
let cfile = rails#underscore(cfile, 1) . '.rb'
26422657
elseif cfile =~# '^\w*_\%(path\|url\)$' && synid != hlID('rubyString')
26432658
let route = s:gsub(cfile, '^hash_for_|_%(path|url)$', '')
2644-
let cfile = rails#app().named_route_file(route)
2659+
let cfile = s:active() ? rails#app().named_route_file(route) : ''
26452660
if empty(cfile)
26462661
let cfile = s:sub(route, '^formatted_', '')
26472662
if cfile =~# '^\%(new\|edit\)_'
@@ -3157,29 +3172,11 @@ function! rails#pack_suffixes(type) abort
31573172
return s:uniq(suffixes)
31583173
endfunction
31593174

3160-
function! s:app_resolve_pack(name, ...) dict abort
3161-
let name = s:sub(a:name, '\.erb$', '')
3162-
let suffixes = rails#pack_suffixes(matchstr(name, '\.\zs\w\+$'))
3163-
call extend(suffixes, map(copy(suffixes), '"/index".v:val'))
3164-
let dir = self.path('app/javascript/packs/')
3165-
if len(suffixes)
3166-
let base = dir . substitute(name, '\.\w\+$', '', '')
3167-
for suffix in [''] + suffixes
3168-
if s:filereadable(base . suffix)
3169-
return base . suffix
3170-
endif
3171-
endfor
3172-
elseif !a:0 || s:filereadable(dir . name)
3173-
return dir . name
3174-
endif
3175-
return a:0 ? a:1 : dir . name
3176-
endfunction
3177-
31783175
call s:add_methods('readable', ['resolve_view', 'resolve_layout'])
3179-
call s:add_methods('app', ['asset_path', 'resolve_pack'])
3176+
call s:add_methods('app', ['asset_path'])
31803177

31813178
function! s:findview(name) abort
3182-
let view = rails#buffer().resolve_view(a:name, line('.'))
3179+
let view = s:active() ? rails#buffer().resolve_view(a:name, line('.')) : ''
31833180
return empty(view) ? (a:name =~# '\.' ? a:name : a:name . '.' . s:format()) : view
31843181
endfunction
31853182

0 commit comments

Comments
 (0)