@@ -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 )
31583173endfunction
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-
31783175call 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
31813178function ! 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
31843181endfunction
31853182
0 commit comments