Skip to content

Commit 7b988c0

Browse files
committed
Use projectionist trick to chdir
1 parent 7031bf9 commit 7b988c0

File tree

1 file changed

+21
-7
lines changed

1 file changed

+21
-7
lines changed

autoload/rails.vim

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
11401157
function! 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
12431259
endfunction
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

Comments
 (0)