@@ -1137,6 +1137,23 @@ endfunction
11371137" }}}1
11381138" Rake {{{1
11391139
1140+ function ! s: qf_pre () abort
1141+ let dir = substitute (matchstr (' ,' .&l: errorformat , ' ,chdir \zs\%(\\.\|[^,]\)*' ), ' \\,' ,' ,' , ' g' )
1142+ let cwd = getcwd ()
1143+ if ! empty (dir ) && dir !=# cwd
1144+ let cd = exists (' *haslocaldir' ) && haslocaldir () ? ' lcd' : ' cd'
1145+ execute ' lcd' fnameescape (dir )
1146+ let s: qf_post = cd . ' ' . fnameescape (cwd)
1147+ endif
1148+ endfunction
1149+
1150+ augroup railsPluginMake
1151+ autocmd !
1152+ autocmd QuickFixCmdPre *make* call s: qf_pre ()
1153+ autocmd QuickFixCmdPost *make*
1154+ \ if exists (' s:qf_post' ) | execute remove (s: , ' qf_post' ) | endif
1155+ augroup END
1156+
11401157function ! s: app_rake_tasks () dict abort
11411158 if self .cache.needs (' rake_tasks' )
11421159 call s: push_chdir ()
@@ -1194,14 +1211,14 @@ function! s:Rake(bang,lnum,arg)
11941211 let old_errorformat = &l: errorformat
11951212 let old_compiler = get (b: , ' current_compiler' , ' ' )
11961213 try
1197- call s: push_chdir (1 )
11981214 if ! empty (findfile (' compiler/rake.vim' , escape (&rtp , ' ' )))
11991215 compiler rake
12001216 else
12011217 let &l: errorformat = g: rails #rake_errorformat
12021218 let b: current_compiler = ' rake'
12031219 endif
12041220 let &l: makeprg = rails#app ().rake_command ()
1221+ let &l: errorformat .= ' ,chdir ' .escape (self .path (), ' ,' )
12051222 let arg = a: arg
12061223 if &filetype = ~# ' ^ruby\>' && arg == ' '
12071224 let mnum = s: lastmethodline (lnum)
@@ -1238,7 +1255,6 @@ function! s:Rake(bang,lnum,arg)
12381255 if empty (b: current_compiler )
12391256 unlet b: current_compiler
12401257 endif
1241- call s: pop_command ()
12421258 endtry
12431259endfunction
12441260
@@ -1665,7 +1681,6 @@ function! s:readable_runner_command(bang, count, arg) dict abort
16651681 let old_makeprg = &l: makeprg
16661682 let old_errorformat = &l: errorformat
16671683 let old_compiler = get (b: , ' current_compiler' , ' ' )
1668- call s: push_chdir (1 )
16691684 try
16701685 if ! empty (a: arg )
16711686 let arg = a: arg
@@ -1724,11 +1739,12 @@ function! s:readable_runner_command(bang, count, arg) dict abort
17241739 let &l: makeprg = ' bundle exec ' . &l: makeprg
17251740 endif
17261741
1742+ let &l: errorformat .= ' ,chdir ' .escape (self .app ().path (), ' ,' )
1743+
17271744 call s: make (a: bang , arg . extra)
17281745 return ' '
17291746
17301747 finally
1731- call s: pop_command ()
17321748 let &l: errorformat = old_errorformat
17331749 let &l: makeprg = old_makeprg
17341750 let b: current_compiler = old_compiler
@@ -1837,11 +1853,9 @@ function! s:app_generator_command(bang,...) dict
18371853 let old_errorformat = &l: errorformat
18381854 try
18391855 let &l: makeprg = self .prepare_rails_command (cmd)
1840- let &l: errorformat = s: efm_generate
1841- call s: push_chdir (1 )
1856+ let &l: errorformat = s: efm_generate . ' ,chdir ' .escape (self .path (), ' ,' )
18421857 noautocmd make !
18431858 finally
1844- call s: pop_command ()
18451859 let &l: errorformat = old_errorformat
18461860 let &l: makeprg = old_makeprg
18471861 endtry
0 commit comments