Skip to content

Commit

Permalink
statusline: improve error handling/reporting (neomake#1873)
Browse files Browse the repository at this point in the history
  • Loading branch information
blueyed authored Feb 24, 2018
1 parent 9437f88 commit 653bb1b
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 6 deletions.
13 changes: 10 additions & 3 deletions autoload/neomake/statusline.vim
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,7 @@ function! s:formatter._substitute(m) abort
return self.args[a:m]
endif
if !has_key(self, a:m)
call neomake#utils#ErrorMessage(printf(
\ 'Unknown statusline format: {{%s}}.', a:m))
let self.errors += [printf('Unknown statusline format: {{%s}}.', a:m)]
return '{{'.a:m.'}}'
endif
try
Expand All @@ -168,7 +167,15 @@ function! s:formatter.format(f, args) abort
return a:f
endif
let self.args = a:args
return substitute(a:f, '{{\(.\{-}\)}}', '\=self._substitute(submatch(1))', 'g')
let self.errors = []
let r = substitute(a:f, '{{\(.\{-}\)}}', '\=self._substitute(submatch(1))', 'g')
if !empty(self.errors)
call neomake#utils#ErrorMessage(printf(
\ 'Error%s when formatting %s: %s',
\ len(self.errors) > 1 ? 's' : '',
\ string(a:f), join(self.errors, ', ')))
endif
return r
endfunction


Expand Down
8 changes: 5 additions & 3 deletions tests/statusline.vader
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Execute (neomake#statusline#get_status):
AssertEqual neomake#statusline#get_status(bufnr, {'format_loclist_unknown': '{{running_job_names}}'}), ''
" {{running_jobs}} is only available with 'format_running' (internally).
AssertEqual neomake#statusline#get_status(bufnr, {'format_loclist_unknown': '{{running_jobs}}'}), '{{running_jobs}}'
AssertNeomakeMessage 'Unknown statusline format: {{running_jobs}}.', 0
AssertNeomakeMessage "Error when formatting '{{running_jobs}}': Unknown statusline format: {{running_jobs}}.", 0

call neomake#Make({'enabled_makers': [g:sleep_maker]})
if neomake#has_async_support()
Expand All @@ -80,7 +80,7 @@ Execute (neomake#statusline#get_status):
Assert neomake#statusline#get_status(bufnr, {'format_running': '{{running_jobs}}'}) =~# '\m^{''', '{{running_jobs}} is replaced in format_running'

call neomake#statusline#get_status(bufnr(''), {'format_running': 'Neomake: {{does_not_exist}}'})
AssertNeomakeMessage 'Unknown statusline format: {{does_not_exist}}.', 0
AssertNeomakeMessage "Error when formatting 'Neomake: {{does_not_exist}}': Unknown statusline format: {{does_not_exist}}.", 0
NeomakeTestsWaitForFinishedJobs
else
AssertEqual neomake#statusline#get_status(bufnr, {'format_running': '...'}), '%#NeomakeStatusGood#✓'
Expand All @@ -89,7 +89,9 @@ Execute (neomake#statusline#get_status):
endif

call neomake#statusline#get_status(bufnr(''), {'format_loclist_ok': 'Neomake: {{does_not_exist}}'})
AssertNeomakeMessage 'Unknown statusline format: {{does_not_exist}}.', 0
AssertNeomakeMessage "Error when formatting 'Neomake: {{does_not_exist}}': Unknown statusline format: {{does_not_exist}}.", 0
call neomake#statusline#get_status(bufnr(''), {'format_loclist_ok': '{{foo}} {{bar}}'})
AssertNeomakeMessage "Errors when formatting '{{foo}} {{bar}}': Unknown statusline format: {{foo}}., Unknown statusline format: {{bar}}.", 0

AssertEqual neomake#statusline#get_status(bufnr, {}), '%#NeomakeStatusGood#✓'
AssertEqual neomake#statusline#get(bufnr, {}), '%#NeomakeStatusGood#✓'
Expand Down

0 comments on commit 653bb1b

Please sign in to comment.