diff --git a/autoload/ale/fix.vim b/autoload/ale/fix.vim index 9ecacd12..45855a50 100644 --- a/autoload/ale/fix.vim +++ b/autoload/ale/fix.vim @@ -77,8 +77,6 @@ function! ale#fix#ApplyFixes(buffer, output) abort echoerr 'The file was changed before fixing finished' return endif - - let l:data.done = 1 endif if !bufexists(a:buffer) @@ -86,6 +84,8 @@ function! ale#fix#ApplyFixes(buffer, output) abort call remove(g:ale_fix_buffer_data, a:buffer) endif + let l:data.done = 1 + " We can only change the lines of a buffer which is currently open, " so try and apply the fixes to the current buffer. call ale#fix#ApplyQueuedFixes() diff --git a/test/test_ale_fix.vader b/test/test_ale_fix.vader index f7c6d69f..d7c3fb35 100644 --- a/test/test_ale_fix.vader +++ b/test/test_ale_fix.vader @@ -86,6 +86,8 @@ After: call delete('fix_test_file') endif + call setloclist(0, []) + let g:ale_fix_buffer_data = {} Given testft (A file with three lines): @@ -305,6 +307,38 @@ Expect(The buffer should be the same): b c +Execute(ALEFix should still lint when nothing was fixed on save): + let g:ale_fix_on_save = 1 + let g:ale_lint_on_save = 1 + let g:ale_enabled = 1 + + noautocmd silent file fix_test_file + + let g:ale_fixers.testft = ['DoNothing'] + + call SetUpLinters() + call ale#events#SaveEvent() + + Assert !filereadable('fix_test_file'), 'The file should not have been saved' + + " We have run the linter. + AssertEqual [{ + \ 'bufnr': bufnr('%'), + \ 'lnum': 1, + \ 'vcol': 0, + \ 'col': 1, + \ 'text': 'xxx', + \ 'type': 'E', + \ 'nr': -1, + \ 'pattern': '', + \ 'valid': 1, + \}], getloclist(0) + +Expect(The buffer should be the same): + a + b + c + Given testft (A file with three lines): a b