Skip to content

Commit 419f006

Browse files
committed
Begin combining :R and :A
:0R is now equivalent to :A and :.A to :R.
1 parent 4a53525 commit 419f006

File tree

1 file changed

+109
-129
lines changed

1 file changed

+109
-129
lines changed

autoload/rails.vim

Lines changed: 109 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,12 +1634,12 @@ function! s:BufNavCommands()
16341634
command! -buffer -bar -nargs=* -bang -complete=customlist,s:Complete_edit RVedit :call s:Edit(<count>,'V<bang>',<f-args>)
16351635
command! -buffer -bar -nargs=* -bang -complete=customlist,s:Complete_edit RTedit :call s:Edit(<count>,'T<bang>',<f-args>)
16361636
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_edit RDedit :call s:Edit(<count>,'<line1>D<bang>',<f-args>)
1637-
command! -buffer -bar -nargs=* -complete=customlist,s:Complete_find A :call s:Alternate('<bang>', <f-args>)
1638-
command! -buffer -bar -nargs=* -complete=customlist,s:Complete_find AE :call s:Alternate('E<bang>',<f-args>)
1639-
command! -buffer -bar -nargs=* -complete=customlist,s:Complete_find AS :call s:Alternate('S<bang>',<f-args>)
1640-
command! -buffer -bar -nargs=* -complete=customlist,s:Complete_find AV :call s:Alternate('V<bang>',<f-args>)
1641-
command! -buffer -bar -nargs=* -complete=customlist,s:Complete_find AT :call s:Alternate('T<bang>',<f-args>)
1642-
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_find AD :call s:Alternate('<line1>D<bang>',<f-args>)
1637+
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related A :call s:Alternate('<bang>', <line1>,<line2>,<count>,<f-args>)
1638+
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related AE :call s:Alternate('E<bang>',<line1>,<line2>,<count>,<f-args>)
1639+
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related AS :call s:Alternate('S<bang>',<line1>,<line2>,<count>,<f-args>)
1640+
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related AV :call s:Alternate('V<bang>',<line1>,<line2>,<count>,<f-args>)
1641+
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related AT :call s:Alternate('T<bang>',<line1>,<line2>,<count>,<f-args>)
1642+
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related AD :call s:Alternate('D<bang>',<line1>,<line2>,<count>,<f-args>)
16431643
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related AN :call s:Related('<bang>' ,<line1>,<line2>,<count>,<f-args>)
16441644
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related R :call s:Related('<bang>' ,<line1>,<line2>,<count>,<f-args>)
16451645
command! -buffer -bar -nargs=* -range=0 -complete=customlist,s:Complete_related RE :call s:Related('E<bang>',<line1>,<line2>,<count>,<f-args>)
@@ -2803,26 +2803,104 @@ function! s:edit(cmd,file,...)
28032803
endif
28042804
endfunction
28052805

2806-
function! s:Alternate(cmd,...)
2806+
function! s:Alternate(cmd,line1,line2,count,...)
28072807
if a:0
2808-
return call('s:Find',[1,a:cmd]+a:000)
2808+
if a:count && a:cmd !~# 'D'
2809+
return call('s:Find',[1,a:line1.a:cmd]+a:000)
2810+
elseif a:count
2811+
return call('s:Edit',[1,a:line1.a:cmd]+a:000)
2812+
else
2813+
return call('s:Edit',[1,a:cmd]+a:000)
2814+
endif
28092815
else
2810-
let file = s:AlternateFile()
2811-
if file != ""
2816+
let file = s:getopt(a:count ? 'related' : 'alternate', 'bl')
2817+
if file == ''
2818+
let file = rails#buffer().related(a:count)
2819+
endif
2820+
if file != ''
28122821
call s:findedit(a:cmd,file)
28132822
else
28142823
call s:warn("No alternate file is defined")
28152824
endif
28162825
endif
28172826
endfunction
28182827

2819-
function! s:AlternateFile()
2820-
let f = RailsFilePath()
2821-
let t = RailsFileType()
2822-
let altopt = s:getopt("alternate","bl")
2823-
if altopt != ""
2824-
return altopt
2825-
elseif f =~ '\<config/environments/'
2828+
function! s:Related(cmd,line1,line2,count,...)
2829+
if a:count == 0 && a:0 == 0
2830+
return s:Alternate(a:cmd,a:line1,a:line1,a:line1)
2831+
else
2832+
return call('s:Alternate',[a:cmd,a:line1,a:line2,a:count]+a:000)
2833+
endif
2834+
endfunction
2835+
2836+
function! s:Complete_related(A,L,P)
2837+
if a:L =~# '^[[:alpha:]]'
2838+
return s:Complete_edit(a:A,a:L,a:P)
2839+
else
2840+
return s:Complete_find(a:A,a:L,a:P)
2841+
endif
2842+
endfunction
2843+
2844+
function! s:readable_related(...) dict abort
2845+
let f = self.name()
2846+
let t = self.type_name()
2847+
if a:0 && a:1
2848+
let lastmethod = self.last_method(a:1)
2849+
if t =~ '^\%(controller\|model-mailer\)\>' && lastmethod != ""
2850+
let root = s:sub(s:sub(s:sub(f,'/application\.rb$','/shared_controller.rb'),'/%(controllers|models)/','/views/'),'%(_controller)=\.rb$','/'.lastmethod)
2851+
let format = self.last_format(a:1)
2852+
if format == '' | let format = 'html' | endif
2853+
if glob(self.app().path().'/'.root.'.'.format.'.*[^~]') != ''
2854+
return root . '.' . format
2855+
else
2856+
return root
2857+
endif
2858+
elseif f =~ '\<config/environments/'
2859+
return "config/database.yml#". fnamemodify(f,':t:r')
2860+
elseif f =~ '\<config/database\.yml$'
2861+
if lastmethod != ""
2862+
return "config/environments/".lastmethod.".rb"
2863+
else
2864+
return "config/environment.rb"
2865+
endif
2866+
elseif f =~ '\<config/routes\.rb$' | return "config/database.yml"
2867+
elseif f =~ '\<config/environment\.rb$' | return "config/routes.rb"
2868+
elseif f =~ '\<db/migrate/\d\d\d_'
2869+
let num = matchstr(f,'\<db/migrate/0*\zs\d\+\ze_')+1
2870+
let migr = self.app().migration(num)
2871+
return migr == '' ? "db/schema.rb" : migr
2872+
elseif t =~ '^view-layout\>'
2873+
return s:sub(s:sub(s:sub(f,'/views/','/controllers/'),'/layouts/(\k+)\..*$','/\1_controller.rb'),'<application_controller\.rb$','application.rb')
2874+
elseif t =~ '^view\>'
2875+
let controller = s:sub(s:sub(f,'/views/','/controllers/'),'/(\k+%(\.\k+)=)\..*$','_controller.rb#\1')
2876+
let controller2 = s:sub(s:sub(f,'/views/','/controllers/'),'/(\k+%(\.\k+)=)\..*$','.rb#\1')
2877+
let model = s:sub(s:sub(f,'/views/','/models/'),'/(\k+)\..*$','.rb#\1')
2878+
if self.app().has_file(s:sub(controller,'#.{-}$',''))
2879+
return controller
2880+
elseif self.app().has_file(s:sub(controller2,'#.{-}$',''))
2881+
return controller2
2882+
elseif self.app().has_file(s:sub(model,'#.{-}$','')) || model =~ '_mailer\.rb#'
2883+
return model
2884+
else
2885+
return controller
2886+
endif
2887+
elseif t =~ '^controller\>'
2888+
return s:sub(s:sub(f,'/controllers/','/helpers/'),'%(_controller)=\.rb$','_helper.rb')
2889+
" elseif t=~ '^helper\>'
2890+
" return s:findlayout(s:controller())
2891+
elseif t =~ '^model-arb\>'
2892+
let table_name = matchstr(join(self.getline(1,50),"\n"),'\n\s*set_table_name\s*[:"'']\zs\w\+')
2893+
if table_name == ''
2894+
let table_name = rails#pluralize(s:gsub(s:sub(fnamemodify(f,':r'),'.{-}<app/models/',''),'/','_'))
2895+
endif
2896+
return self.app().migration('0#'.table_name)
2897+
elseif t =~ '^model-aro\>'
2898+
return s:sub(f,'_observer\.rb$','.rb')
2899+
elseif f =~ '\<db/schema\.rb$'
2900+
return self.app().migration(1)
2901+
endif
2902+
endif
2903+
if f =~ '\<config/environments/'
28262904
return "config/environment.rb"
28272905
elseif f == 'README'
28282906
return "config/database.yml"
@@ -2831,24 +2909,24 @@ function! s:AlternateFile()
28312909
elseif f =~ '\<config/environment\.rb$' | return "config/database.yml"
28322910
elseif f =~ '\<db/migrate/\d\d\d_'
28332911
let num = matchstr(f,'\<db/migrate/0*\zs\d\+\ze_')-1
2834-
return rails#app().migration(num)
2912+
return self.app().migration(num)
28352913
elseif f =~ '\<application\.js$'
28362914
return "app/helpers/application_helper.rb"
2837-
elseif t =~ '^js\>'
2915+
elseif t =~ '^javascript\>'
28382916
return "public/javascripts/application.js"
28392917
elseif f =~ '\<db/schema\.rb$'
2840-
return rails#app().migration('')
2918+
return self.app().migration('')
28412919
elseif t =~ '^view\>'
28422920
let spec1 = fnamemodify(f,':s?\<app/?spec/?')."_spec.rb"
28432921
let spec2 = fnamemodify(f,':r:s?\<app/?spec/?')."_spec.rb"
28442922
let spec3 = fnamemodify(f,':r:r:s?\<app/?spec/?')."_spec.rb"
2845-
if rails#app().has_file(spec1)
2923+
if self.app().has_file(spec1)
28462924
return spec1
2847-
elseif rails#app().has_file(spec2)
2925+
elseif self.app().has_file(spec2)
28482926
return spec2
2849-
elseif rails#app().has_file(spec3)
2927+
elseif self.app().has_file(spec3)
28502928
return spec3
2851-
elseif rails#app().has('spec')
2929+
elseif self.app().has('spec')
28522930
return spec2
28532931
else
28542932
if t =~ '\<layout\>'
@@ -2861,20 +2939,22 @@ function! s:AlternateFile()
28612939
elseif t =~ '^controller-api\>'
28622940
let api = s:sub(s:sub(f,'/controllers/','/apis/'),'_controller\.rb$','_api.rb')
28632941
return api
2942+
elseif t =~ '^api\>'
2943+
return s:sub(s:sub(f,'/apis/','/controllers/'),'_api\.rb$','_controller.rb')
28642944
elseif t =~ '^helper\>'
28652945
let controller = s:sub(s:sub(f,'/helpers/','/controllers/'),'_helper\.rb$','_controller.rb')
28662946
let controller = s:sub(controller,'application_controller','application')
28672947
let spec = s:sub(s:sub(f,'<app/','spec/'),'\.rb$','_spec.rb')
2868-
if rails#app().has_file(spec)
2948+
if self.app().has_file(spec)
28692949
return spec
28702950
else
28712951
return controller
28722952
endif
28732953
elseif t =~ '\<fixtures\>' && f =~ '\<spec/'
2874-
let file = rails#singularize(expand("%:t:r")).'_spec.rb'
2954+
let file = rails#singularize(fnamemodify(f,":t:r")).'_spec.rb'
28752955
return file
28762956
elseif t =~ '\<fixtures\>'
2877-
let file = rails#singularize(expand("%:t:r")).'_test.rb' " .expand('%:e')
2957+
let file = rails#singularize(fnamemodify(f,":t:r")).'_test.rb'
28782958
return file
28792959
elseif f == ''
28802960
call s:warn("No filename present")
@@ -2906,7 +2986,7 @@ function! s:AlternateFile()
29062986
elseif t == 'spec-lib'
29072987
return s:sub(file,'<spec/','')
29082988
elseif t == 'lib'
2909-
return s:sub(f, '<lib/(.*)\.rb$', 'test/unit/\1_test\.rb')."\n".s:sub(f, '<lib/(.*)\.rb$', 'spec/lib/\1_spec\.rb')
2989+
return s:sub(f, '<lib/(.*)\.rb$', 'test/unit/\1_test.rb')."\n".s:sub(f, '<lib/(.*)\.rb$', 'spec/lib/\1_spec.rb')
29102990
elseif t =~ '^spec\>'
29112991
return s:sub(file,'<spec/','app/')
29122992
elseif file =~ '\<vendor/.*/lib/'
@@ -2921,107 +3001,7 @@ function! s:AlternateFile()
29213001
endif
29223002
endfunction
29233003

2924-
function! s:Complete_related(A,L,P)
2925-
if a:L =~# '^[[:alpha:]]'
2926-
return s:Complete_edit(a:A,a:L,a:P)
2927-
else
2928-
return s:Complete_find(a:A,a:L,a:P)
2929-
endif
2930-
endfunction
2931-
2932-
function! s:Related(cmd,line1,line2,count,...)
2933-
if a:0
2934-
if a:count && a:cmd !~# 'D'
2935-
return call('s:Find',[1,a:line1.a:cmd]+a:000)
2936-
elseif a:count
2937-
return call('s:Edit',[1,a:line1.a:cmd]+a:000)
2938-
else
2939-
return call('s:Edit',[1,a:cmd]+a:000)
2940-
endif
2941-
else
2942-
let file = s:RelatedFile(a:line1)
2943-
if file != ""
2944-
call s:findedit(a:cmd,file)
2945-
else
2946-
call s:warn("No related file is defined")
2947-
endif
2948-
endif
2949-
endfunction
2950-
2951-
function! s:RelatedFile(line)
2952-
let f = RailsFilePath()
2953-
let t = RailsFileType()
2954-
let lastmethod = a:line ? s:lastmethod(a:line) : ''
2955-
if s:getopt("related","l") != ""
2956-
return s:getopt("related","l")
2957-
elseif t =~ '^\%(controller\|model-mailer\)\>' && lastmethod != ""
2958-
let root = s:sub(s:sub(s:sub(f,'/application\.rb$','/shared_controller.rb'),'/%(controllers|models)/','/views/'),'%(_controller)=\.rb$','/'.lastmethod)
2959-
let format = rails#buffer().last_format(a:line)
2960-
if format == '' | let format = 'html' | endif
2961-
if glob(rails#app().path().'/'.root.'.'.format.'.*[^~]') != ''
2962-
return root . '.' . format
2963-
else
2964-
return root
2965-
endif
2966-
elseif s:getopt("related","b") != ""
2967-
return s:getopt("related","b")
2968-
elseif f =~ '\<config/environments/'
2969-
return "config/database.yml#". expand("%:t:r")
2970-
elseif f == 'README'
2971-
return "config/database.yml"
2972-
elseif f =~ '\<config/database\.yml$'
2973-
if lastmethod != ""
2974-
return "config/environments/".lastmethod.".rb"
2975-
else
2976-
return "config/environment.rb"
2977-
endif
2978-
elseif f =~ '\<config/routes\.rb$' | return "config/database.yml"
2979-
elseif f =~ '\<config/environment\.rb$' | return "config/routes.rb"
2980-
elseif f =~ '\<db/migrate/\d\d\d_'
2981-
let num = matchstr(f,'\<db/migrate/0*\zs\d\+\ze_')+1
2982-
let migr = rails#app().migration(num)
2983-
return migr == '' ? "db/schema.rb" : migr
2984-
elseif t =~ '^test\>' && f =~ '\<test/\w\+/'
2985-
let target = s:sub(f,'.*<test/\w+/','test/mocks/test/')
2986-
let target = s:sub(target,'_test\.rb$','.rb')
2987-
return target
2988-
elseif f =~ '\<application\.js$'
2989-
return "app/helpers/application_helper.rb"
2990-
elseif t =~ '^js\>'
2991-
return "public/javascripts/application.js"
2992-
elseif t =~ '^view-layout\>'
2993-
return s:sub(s:sub(s:sub(f,'/views/','/controllers/'),'/layouts/(\k+)\..*$','/\1_controller.rb'),'<application_controller\.rb$','application.rb')
2994-
elseif t =~ '^view\>'
2995-
let controller = s:sub(s:sub(f,'/views/','/controllers/'),'/(\k+%(\.\k+)=)\..*$','_controller.rb#\1')
2996-
let controller2 = s:sub(s:sub(f,'/views/','/controllers/'),'/(\k+%(\.\k+)=)\..*$','.rb#\1')
2997-
let model = s:sub(s:sub(f,'/views/','/models/'),'/(\k+)\..*$','.rb#\1')
2998-
if filereadable(s:sub(controller,'#.{-}$',''))
2999-
return controller
3000-
elseif filereadable(s:sub(controller2,'#.{-}$',''))
3001-
return controller2
3002-
elseif filereadable(s:sub(model,'#.{-}$','')) || model =~ '_mailer\.rb#'
3003-
return model
3004-
else
3005-
return controller
3006-
endif
3007-
elseif t =~ '^controller-api\>'
3008-
return s:sub(s:sub(f,'/controllers/','/apis/'),'_controller\.rb$','_api.rb')
3009-
elseif t =~ '^controller\>'
3010-
return s:sub(s:sub(f,'/controllers/','/helpers/'),'%(_controller)=\.rb$','_helper.rb')
3011-
elseif t=~ '^helper\>'
3012-
return s:findlayout(s:controller())
3013-
elseif t =~ '^model-arb\>'
3014-
return rails#app().migration('0#'.rails#pluralize(s:gsub(s:model(),'/','_')))
3015-
elseif t =~ '^model-aro\>'
3016-
return s:sub(f,'_observer\.rb$','.rb')
3017-
elseif t =~ '^api\>'
3018-
return s:sub(s:sub(f,'/apis/','/controllers/'),'_api\.rb$','_controller.rb')
3019-
elseif f =~ '\<db/schema\.rb$'
3020-
return rails#app().migration(1)
3021-
else
3022-
return ""
3023-
endif
3024-
endfunction
3004+
call s:add_methods('readable',['related'])
30253005

30263006
" }}}1
30273007
" Partial Extraction {{{1

0 commit comments

Comments
 (0)