Tell users when a fixer does not exist, and make the no fixers message softer

This commit is contained in:
w0rp 2017-11-07 19:47:20 +00:00
parent e4cd371621
commit d97924b698
2 changed files with 34 additions and 4 deletions

View File

@ -352,11 +352,21 @@ function! ale#fix#Fix(...) abort
throw "fixing_flag must be either '' or 'save_file'" throw "fixing_flag must be either '' or 'save_file'"
endif endif
let l:callback_list = s:GetCallbacks() try
let l:callback_list = s:GetCallbacks()
catch /E700/
let l:function_name = join(split(split(v:exception, ':')[3]))
echom printf(
\ 'There is no fixer named `%s`. Check :ALEFixSuggest',
\ l:function_name,
\)
return 0
endtry
if empty(l:callback_list) if empty(l:callback_list)
if l:fixing_flag is# '' if l:fixing_flag is# ''
echoerr 'No fixers have been defined. Try :ALEFixSuggest' echom 'No fixers have been defined. Try :ALEFixSuggest'
endif endif
return 0 return 0

View File

@ -71,6 +71,16 @@ Before:
\}) \})
endfunction endfunction
function GetLastMessage()
redir => l:output
silent mess
redir END
let l:lines = split(l:output, "\n")
return empty(l:lines) ? '' : l:lines[-1]
endfunction
After: After:
Restore Restore
unlet! g:ale_run_synchronously unlet! g:ale_run_synchronously
@ -88,6 +98,7 @@ After:
delfunction RemoveLastLineOneArg delfunction RemoveLastLineOneArg
delfunction TestCallback delfunction TestCallback
delfunction SetUpLinters delfunction SetUpLinters
delfunction GetLastMessage
call ale#test#RestoreDirectory() call ale#test#RestoreDirectory()
@ -104,14 +115,17 @@ After:
let g:ale_fix_buffer_data = {} let g:ale_fix_buffer_data = {}
" Clear the messages between tests.
echomsg ''
Given testft (A file with three lines): Given testft (A file with three lines):
a a
b b
c c
Execute(ALEFix should complain when there are no functions to call): Execute(ALEFix should complain when there are no functions to call):
AssertThrows ALEFix ALEFix
AssertEqual 'Vim(echoerr):No fixers have been defined. Try :ALEFixSuggest', g:vader_exception AssertEqual 'No fixers have been defined. Try :ALEFixSuggest', GetLastMessage()
Execute(ALEFix should apply simple functions): Execute(ALEFix should apply simple functions):
let g:ale_fixers.testft = ['AddCarets'] let g:ale_fixers.testft = ['AddCarets']
@ -450,3 +464,9 @@ Expect(An extra line should be added):
b b
c c
d d
Execute(ALE should print a message telling you something isn't a valid fixer when you type some nonsense):
let g:ale_fixers.testft = ['CatLine', 'invalidname']
ALEFix
AssertEqual 'There is no fixer named `invalidname`. Check :ALEFixSuggest', GetLastMessage()