mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-04-02 01:30:28 +08:00
93 lines
2.9 KiB
VimL
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
|