1
1
" Vim compiler file
2
2
" Compiler: Cargo Compiler
3
3
" Maintainer: Damien Radtke <[email protected] >
4
- " Latest Revision: 2014 Sep 18
4
+ " Latest Revision: 2014 Sep 24
5
5
6
6
if exists (" current_compiler" )
7
7
finish
@@ -12,18 +12,18 @@ if exists(":CompilerSet") != 2
12
12
command -nargs =* CompilerSet setlocal <args>
13
13
endif
14
14
15
- CompilerSet errorformat &
15
+ CompilerSet errorformat = % A % f : % l: % c : \ % m , %- Z % p ^, %- C % . % #
16
16
CompilerSet makeprg = cargo\ $ *
17
17
18
18
" Allow a configurable global Cargo.toml name. This makes it easy to
19
19
" support variations like 'cargo.toml'.
20
- if ! exists (' g:cargo_toml_name ' )
21
- let g: cargo_toml_name = ' Cargo.toml'
20
+ if ! exists (' g:cargo_manifest_name ' )
21
+ let g: cargo_manifest_name = ' Cargo.toml'
22
22
endif
23
23
24
- let s: toml_dir = fnamemodify (findfile (g: cargo_toml_name , ' .;' ), ' :p:h' ).' /'
24
+ let s: local_manifest = fnamemodify (findfile (g: cargo_manifest_name , ' .;' ), ' :p:h' ).' /'
25
25
26
- if s: toml_dir != ' '
26
+ if s: local_manifest != ' '
27
27
augroup cargo
28
28
au !
29
29
au QuickfixCmdPost make call s: FixPaths ()
@@ -33,15 +33,25 @@ if s:toml_dir != ''
33
33
" to be relative to the current directory instead of Cargo.toml.
34
34
function ! s: FixPaths ()
35
35
let qflist = getqflist ()
36
+ let manifest = s: local_manifest
36
37
for qf in qflist
37
38
if ! qf[' valid' ]
39
+ let m = matchlist (qf[' text' ], ' \v.*\(file://(.*)\)$' )
40
+ if len (m ) > 0
41
+ let manifest = m [1 ].' /'
42
+ " Manually strip another slash if needed; usually just an
43
+ " issue on Windows.
44
+ if manifest = ~ ' ^/[A-Z]*:/'
45
+ let manifest = manifest[1 :]
46
+ endif
47
+ endif
38
48
continue
39
49
endif
40
50
let filename = bufname (qf[' bufnr' ])
41
- if stridx (filename, s: toml_dir ) == -1
42
- let filename = s: toml_dir .filename
51
+ if filereadable (filename)
52
+ continue
43
53
endif
44
- let qf[' filename' ] = simplify (s: toml_dir . bufname (qf[ ' bufnr ' ]) )
54
+ let qf[' filename' ] = simplify (manifest.filename )
45
55
call remove (qf, ' bufnr' )
46
56
endfor
47
57
call setqflist (qflist, ' r' )
0 commit comments