1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-04-02 01:30:28 +08:00
2020-06-13 14:06:35 +08:00

93 lines
2.9 KiB
VimL

" vim: ts=4 sw=4 et
function! neomake#makers#ft#d#EnabledMakers() abort
" dmd, ldmd, and gdmd all share a common CLI.
" Ordered in efficiency of compiler
for m in ['dmd', 'ldmd', 'gdmd']
if executable(m)
return [m]
endif
endfor
return []
endfunction
function! s:findDubRoot() abort
"Look upwards for a dub.json or dub.sdl to find the root
"I did it like this because it's the only cross platform way I know of
let tmp_file = findfile('dub.json', '.;')
if empty(tmp_file)
let tmp_file = findfile('dub.sdl', '.;')
endif
return tmp_file
endfunction
function! s:UpdateDub() abort
"Add dub directories
let s:dubImports = []
let tmp_file = s:findDubRoot()
if executable('dub') && !empty(tmp_file)
let tmp_dir = fnamemodify(tmp_file,':p:h')
let dubCmd = 'dub describe --data=import-paths --annotate '
\ .'--skip-registry=all --vquiet --data-list --root='
let output = system(dubCmd . tmp_dir)
if(v:shell_error == 0 && !empty(output))
" Is \n portable?
let s:dubImports = split(output, '\n')
call map(s:dubImports, "'-I' . v:val")
endif
endif
endfunction
"GDMD does not adhere to dmd's flags or output, but to GCC's.
"This is for LDMD and dmd only.
function! s:DmdStyleMaker(args) abort
"Updating dub paths each make might be slow?
call s:UpdateDub()
let args = ['-w', '-wi', '-c', '-o-', '-vcolumns'] + a:args + s:dubImports
return {
\ 'args': args,
\ 'errorformat':
\ '%f(%l\,%c): %trror: %m,' .
\ '%f(%l): %trror: %m,' .
\ '%f(%l\,%c): %tarning: %m,' .
\ '%f(%l): %tarning: %m,' .
\ '%f(%l\,%c): Deprecation: %m,' .
\ '%f(%l): Deprecation: %m,',
\ }
endfunction
function! neomake#makers#ft#d#dmd() abort
let args = []
if exists('g:neomake_d_dmd_args_conf')
call add(args, '-conf=' . expand(g:neomake_d_dmd_args_conf))
endif
return s:DmdStyleMaker(args)
endfunction
function! neomake#makers#ft#d#ldmd() abort
let args = []
if exists('g:neomake_d_ldmd_args_conf')
call add(args, '-conf=' . expand(g:neomake_d_ldmd_args_conf))
endif
return s:DmdStyleMaker(args)
endfunction
function! neomake#makers#ft#d#gdmd() abort
let args = ['-c', '-o-', '-fsyntax-only', s:UpdateDub()]
return {
\ 'args': args,
\ 'errorformat':
\ '%-G%f:%s:,' .
\ '%-G%f:%l: %#error: %#(Each undeclared identifier is reported only%.%#,' .
\ '%-G%f:%l: %#error: %#for each function it appears%.%#,' .
\ '%-GIn file included%.%#,' .
\ '%-G %#from %f:%l\,,' .
\ '%f:%l:%c: %trror: %m,' .
\ '%f:%l:%c: %tarning: %m,' .
\ '%f:%l:%c: %m,' .
\ '%f:%l: %trror: %m,' .
\ '%f:%l: %tarning: %m,'.
\ '%f:%l: %m',
\ }
endfunction