Run DUB in a separate process as well, so it will not cause import lag.

This commit is contained in:
w0rp 2016-09-18 10:38:54 +01:00
parent a32b380b6f
commit 0bc4b4c14c
2 changed files with 26 additions and 39 deletions

View File

@ -7,7 +7,8 @@ let g:loaded_ale_linters_d_dmd = 1
" A function for finding the dmd-wrapper script in the Vim runtime paths " A function for finding the dmd-wrapper script in the Vim runtime paths
function! s:FindWrapperScript() function! s:FindWrapperScript()
for parent in split(&runtimepath, ',') for parent in split(&runtimepath, ',')
let path = parent . '/' . 'dmd-wrapper' " Expand the path to deal with ~ issues.
let path = expand(parent . '/' . 'dmd-wrapper')
if filereadable(path) if filereadable(path)
return path return path
@ -15,48 +16,11 @@ function! s:FindWrapperScript()
endfor endfor
endfunction endfunction
function! ale_linters#d#dmd#GetDubImports(buffer)
if !executable('dub')
" If we don't have dub, then stop here.
return []
endif
" Try to find dub.json
let dub_path = findfile("dub.json", ",;")
if dub_path == ''
" Try to find package.json if that fails
let dub_path = findfile("package.json", ",;")
endif
if dub_path == ''
" We couldn't find the project root directory, so give up.
return
endif
let dub_dir = fnamemodify(dub_path, ':h')
let old_path = getcwd()
try
" Temporarily change to the project directory.
execute 'cd' . fnameescape(dub_dir)
return split(system('dub describe --import-paths'), '\n')
finally
" Change back to the old path.
execute 'cd' . fnameescape(old_path)
endtry
endfunction
function! ale_linters#d#dmd#GetCommand(buffer) function! ale_linters#d#dmd#GetCommand(buffer)
let wrapper_script = s:FindWrapperScript() let wrapper_script = s:FindWrapperScript()
let command = wrapper_script . ' -o- -vcolumns -c' let command = wrapper_script . ' -o- -vcolumns -c'
for path in ale_linters#d#dmd#GetDubImports(a:buffer)
let command .= ' -I' . shellescape(path)
endfor
return command return command
endfunction endfunction

View File

@ -13,4 +13,27 @@ while read line; do
echo "$line" >> "$temp_file" echo "$line" >> "$temp_file"
done done
dmd "$@" "$temp_file" # Read imports from DUB.
original_path="$(readlink -m .)"
path="$original_path"
import_line_options=''
# We need to look for variable configuration files in parent directories.
while [ "$path" != '/' ]; do
if [ -f "$path/dub.sdl" ] || [ -f "$path/dub.json" ] || [ -f "$path/package.json" ]; then
cd "$path"
while read import_line; do
import_line_options="$import_line_options -I$import_line"
done <<< "$(dub describe --import-paths)"
cd "$original_path"
break
fi
path="$(dirname "$path")"
done
dmd $import_line_options "$@" "$temp_file"