diff options
-rw-r--r-- | autoload/ale/fix.vim | 14 | ||||
-rw-r--r-- | test/test_ale_fix.vader | 24 |
2 files changed, 34 insertions, 4 deletions
diff --git a/autoload/ale/fix.vim b/autoload/ale/fix.vim index a9bb7d48..677fb3da 100644 --- a/autoload/ale/fix.vim +++ b/autoload/ale/fix.vim @@ -352,11 +352,21 @@ function! ale#fix#Fix(...) abort throw "fixing_flag must be either '' or 'save_file'" 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 l:fixing_flag is# '' - echoerr 'No fixers have been defined. Try :ALEFixSuggest' + echom 'No fixers have been defined. Try :ALEFixSuggest' endif return 0 diff --git a/test/test_ale_fix.vader b/test/test_ale_fix.vader index fac9a25b..fbf4755a 100644 --- a/test/test_ale_fix.vader +++ b/test/test_ale_fix.vader @@ -71,6 +71,16 @@ Before: \}) 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: Restore unlet! g:ale_run_synchronously @@ -88,6 +98,7 @@ After: delfunction RemoveLastLineOneArg delfunction TestCallback delfunction SetUpLinters + delfunction GetLastMessage call ale#test#RestoreDirectory() @@ -104,14 +115,17 @@ After: let g:ale_fix_buffer_data = {} + " Clear the messages between tests. + echomsg '' + Given testft (A file with three lines): a b c Execute(ALEFix should complain when there are no functions to call): - AssertThrows ALEFix - AssertEqual 'Vim(echoerr):No fixers have been defined. Try :ALEFixSuggest', g:vader_exception + ALEFix + AssertEqual 'No fixers have been defined. Try :ALEFixSuggest', GetLastMessage() Execute(ALEFix should apply simple functions): let g:ale_fixers.testft = ['AddCarets'] @@ -450,3 +464,9 @@ Expect(An extra line should be added): b c 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() |