summaryrefslogtreecommitdiffstats
path: root/autoload/dart.vim
diff options
context:
space:
mode:
Diffstat (limited to 'autoload/dart.vim')
-rw-r--r--autoload/dart.vim52
1 files changed, 33 insertions, 19 deletions
diff --git a/autoload/dart.vim b/autoload/dart.vim
index f524e09d..82859463 100644
--- a/autoload/dart.vim
+++ b/autoload/dart.vim
@@ -9,22 +9,35 @@ function! s:error(text) abort
echohl None
endfunction
-function! s:cexpr(errorformat, joined_lines) abort
- let temp_errorfomat = &errorformat
- try
- let &errorformat = a:errorformat
- cexpr a:joined_lines
- copen
- finally
- let &errorformat = temp_errorfomat
- endtry
+function! s:cexpr(errorformat, lines, reason) abort
+ call setqflist([], ' ', {
+ \ 'lines': a:lines,
+ \ 'efm': a:errorformat,
+ \ 'context': {'reason': a:reason},
+ \})
+ copen
+endfunction
+
+" If the quickfix list has a context matching [reason], clear and close it.
+function! s:clearQfList(reason) abort
+ let context = get(getqflist({'context': 1}), 'context', {})
+ if type(context) == v:t_dict &&
+ \ has_key(context, 'reason') &&
+ \ context.reason == a:reason
+ call setqflist([], 'r')
+ cclose
+ endif
endfunction
function! dart#fmt(q_args) abort
if executable('dartfmt')
let buffer_content = join(getline(1, '$'), "\n")
- let joined_lines = system(printf('dartfmt %s', a:q_args), buffer_content)
- if buffer_content ==# joined_lines[:-2] | return | endif
+ let args = '--stdin-name '.expand('%').' '.a:q_args
+ let joined_lines = system(printf('dartfmt %s', args), buffer_content)
+ if buffer_content ==# joined_lines[:-2]
+ call s:clearQfList('dartfmt')
+ return
+ endif
if 0 == v:shell_error
let win_view = winsaveview()
let lines = split(joined_lines, "\n")
@@ -33,12 +46,11 @@ function! dart#fmt(q_args) abort
silent keepjumps execute string(len(lines)+1).',$ delete'
endif
call winrestview(win_view)
+ call s:clearQfList('dartfmt')
else
let errors = split(joined_lines, "\n")[2:]
- let file_path = expand('%')
- call map(errors, 'file_path.":".v:val')
- let error_format = '%A%f:line %l\, column %c of stdin: %m,%C%.%#'
- call s:cexpr(error_format, join(errors, "\n"))
+ let error_format = '%Aline %l\, column %c of %f: %m,%C%.%#'
+ call s:cexpr(error_format, errors, 'dartfmt')
endif
else
call s:error('cannot execute binary file: dartfmt')
@@ -49,8 +61,9 @@ function! dart#analyzer(q_args) abort
if executable('dartanalyzer')
let path = expand('%:p:gs:\:/:')
if filereadable(path)
- let joined_lines = system(printf('dartanalyzer %s %s', a:q_args, shellescape(path)))
- call s:cexpr('%m (%f\, line %l\, col %c)', joined_lines)
+ let command = printf('dartanalyzer %s %s', a:q_args, shellescape(path))
+ let lines = systemlist(command)
+ call s:cexpr('%m (%f\, line %l\, col %c)', lines, 'dartanalyzer')
else
call s:error(printf('cannot read a file: "%s"', path))
endif
@@ -63,8 +76,9 @@ function! dart#tojs(q_args) abort
if executable('dart2js')
let path = expand('%:p:gs:\:/:')
if filereadable(path)
- let joined_lines = system(printf('dart2js %s %s', a:q_args, shellescape(path)))
- call s:cexpr('%m (%f\, line %l\, col %c)', joined_lines)
+ let command = printf('dart2js %s %s', a:q_args, shellescape(path))
+ let lines = systemlist(command)
+ call s:cexpr('%m (%f\, line %l\, col %c)', lines, 'dart2js')
else
call s:error(printf('cannot read a file: "%s"', path))
endif