#591 Support fixing files on save
This commit is contained in:
@@ -1,6 +1,15 @@
|
||||
Before:
|
||||
Save g:ale_fixers, &shell, g:ale_enabled
|
||||
Save g:ale_fixers
|
||||
Save &shell
|
||||
Save g:ale_enabled
|
||||
Save g:ale_fix_on_save
|
||||
Save g:ale_lint_on_save
|
||||
Save g:ale_echo_cursor
|
||||
|
||||
silent! cd /testplugin/test
|
||||
|
||||
let g:ale_enabled = 0
|
||||
let g:ale_echo_cursor = 0
|
||||
let g:ale_run_synchronously = 1
|
||||
let g:ale_fixers = {
|
||||
\ 'testft': [],
|
||||
@@ -33,6 +42,19 @@ Before:
|
||||
return ['a', 'b']
|
||||
endfunction
|
||||
|
||||
function! TestCallback(buffer, output)
|
||||
return [{'lnum': 1, 'col': 1, 'text': 'xxx'}]
|
||||
endfunction
|
||||
|
||||
function! SetUpLinters()
|
||||
call ale#linter#Define('testft', {
|
||||
\ 'name': 'testlinter',
|
||||
\ 'callback': 'TestCallback',
|
||||
\ 'executable': 'true',
|
||||
\ 'command': 'true',
|
||||
\})
|
||||
endfunction
|
||||
|
||||
After:
|
||||
Restore
|
||||
unlet! g:ale_run_synchronously
|
||||
@@ -44,7 +66,14 @@ After:
|
||||
delfunction CatLine
|
||||
delfunction ReplaceWithTempFile
|
||||
delfunction RemoveLastLine
|
||||
delfunction TestCallback
|
||||
delfunction SetUpLinters
|
||||
call ale#fix#registry#ResetToDefaults()
|
||||
call ale#linter#Reset()
|
||||
|
||||
if filereadable('fix_test_file')
|
||||
call delete('fix_test_file')
|
||||
endif
|
||||
|
||||
Given testft (A file with three lines):
|
||||
a
|
||||
@@ -185,3 +214,80 @@ Execute(ALEFix should user buffer-local fixer settings):
|
||||
Expect(There should be only two lines):
|
||||
a
|
||||
b
|
||||
|
||||
Given testft (A file with three lines):
|
||||
a
|
||||
b
|
||||
c
|
||||
|
||||
Execute(ALEFix should save files on the save event):
|
||||
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 = ['AddDollars']
|
||||
|
||||
call SetUpLinters()
|
||||
call ale#events#SaveEvent()
|
||||
|
||||
" We should save the file.
|
||||
Assert filereadable('fix_test_file'), 'The file cannot be read'
|
||||
AssertEqual ['$a', '$b', '$c'], readfile('fix_test_file')
|
||||
Assert !&modified, 'The was marked as ''modified'''
|
||||
|
||||
" 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 modified):
|
||||
$a
|
||||
$b
|
||||
$c
|
||||
|
||||
Given testft (A file with three lines):
|
||||
a
|
||||
b
|
||||
c
|
||||
|
||||
Execute(ALEFix should still lint with no linters to be applied):
|
||||
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 = []
|
||||
|
||||
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
|
||||
|
||||
@@ -31,6 +31,7 @@ Before:
|
||||
return l:matches
|
||||
endfunction
|
||||
|
||||
Save g:ale_enabled
|
||||
Save g:ale_lint_on_text_changed
|
||||
Save g:ale_lint_on_insert_leave
|
||||
Save g:ale_pattern_options_enabled
|
||||
@@ -38,6 +39,7 @@ Before:
|
||||
Save g:ale_lint_on_filetype_changed
|
||||
Save g:ale_lint_on_save
|
||||
Save g:ale_echo_cursor
|
||||
Save g:ale_fix_on_save
|
||||
|
||||
After:
|
||||
delfunction CheckAutocmd
|
||||
@@ -138,14 +140,33 @@ Execute (g:ale_lint_on_filetype_changed = 1 should bind FileType, and required b
|
||||
|
||||
Execute (g:ale_lint_on_save = 0 should bind no events):
|
||||
let g:ale_lint_on_save = 0
|
||||
let g:ale_fix_on_save = 0
|
||||
|
||||
AssertEqual [], CheckAutocmd('ALERunOnSaveGroup')
|
||||
|
||||
Execute (g:ale_lint_on_save = 1 should bind no events):
|
||||
let g:ale_lint_on_save = 1
|
||||
let g:ale_fix_on_save = 0
|
||||
|
||||
AssertEqual [
|
||||
\ 'BufWritePre * call ale#Queue(0, ''lint_file'')',
|
||||
\ 'BufWritePre * call ale#events#SaveEvent()',
|
||||
\], CheckAutocmd('ALERunOnSaveGroup')
|
||||
|
||||
Execute (g:ale_lint_on_save = 0 and g:ale_fix_on_save = 1 should bind events):
|
||||
let g:ale_lint_on_save = 0
|
||||
let g:ale_fix_on_save = 1
|
||||
|
||||
AssertEqual [
|
||||
\ 'BufWritePre * call ale#events#SaveEvent()',
|
||||
\], CheckAutocmd('ALERunOnSaveGroup')
|
||||
|
||||
Execute (g:ale_fix_on_save = 1 should bind events even when ALE is disabled):
|
||||
let g:ale_enabled = 0
|
||||
let g:ale_lint_on_save = 0
|
||||
let g:ale_fix_on_save = 1
|
||||
|
||||
AssertEqual [
|
||||
\ 'BufWritePre * call ale#events#SaveEvent()',
|
||||
\], CheckAutocmd('ALERunOnSaveGroup')
|
||||
|
||||
Execute (g:ale_echo_cursor = 0 should bind no events):
|
||||
|
||||
Reference in New Issue
Block a user