#857 - Add b:ale_fix_on_save for controlling fixing on save for specific buffers

This commit is contained in:
w0rp 2017-10-30 22:19:57 +00:00
parent 1575b3d7dd
commit 50f7ad3552
7 changed files with 58 additions and 37 deletions

View File

@ -12,11 +12,13 @@ function! ale#events#QuitRecently(buffer) abort
endfunction endfunction
function! ale#events#SaveEvent(buffer) abort function! ale#events#SaveEvent(buffer) abort
call setbufvar(a:buffer, 'ale_save_event_fired', 1) let l:should_lint = ale#Var(a:buffer, 'enabled') && g:ale_lint_on_save
let l:should_lint = ale#Var(a:buffer, 'enabled')
\ && g:ale_lint_on_save
if g:ale_fix_on_save if l:should_lint
call setbufvar(a:buffer, 'ale_save_event_fired', 1)
endif
if ale#Var(a:buffer, 'fix_on_save')
let l:will_fix = ale#fix#Fix('save_file') let l:will_fix = ale#fix#Fix('save_file')
let l:should_lint = l:should_lint && !l:will_fix let l:should_lint = l:should_lint && !l:will_fix
endif endif

View File

@ -49,9 +49,7 @@ function! ale#toggle#InitAuGroups() abort
augroup ALERunOnSaveGroup augroup ALERunOnSaveGroup
autocmd! autocmd!
if (g:ale_enabled && g:ale_lint_on_save) || g:ale_fix_on_save autocmd BufWritePost * call ale#events#SaveEvent(str2nr(expand('<abuf>')))
autocmd BufWritePost * call ale#events#SaveEvent(str2nr(expand('<abuf>')))
endif
augroup END augroup END
augroup ALERunOnInsertLeave augroup ALERunOnInsertLeave
@ -73,10 +71,6 @@ function! ale#toggle#InitAuGroups() abort
augroup END augroup END
if !g:ale_enabled if !g:ale_enabled
if !g:ale_fix_on_save
augroup! ALERunOnSaveGroup
endif
augroup! ALEPatternOptionsGroup augroup! ALEPatternOptionsGroup
augroup! ALERunOnTextChangedGroup augroup! ALERunOnTextChangedGroup
augroup! ALERunOnEnterGroup augroup! ALERunOnEnterGroup

View File

@ -669,6 +669,7 @@ g:ale_fixers *g:ale_fixers*
g:ale_fix_on_save *g:ale_fix_on_save* g:ale_fix_on_save *g:ale_fix_on_save*
b:ale_fix_on_save *b:ale_fix_on_save*
Type: |Number| Type: |Number|
Default: `0` Default: `0`
@ -679,6 +680,9 @@ g:ale_fix_on_save *g:ale_fix_on_save*
after files are fixed, only when the buffer is open, or re-opened. Changes after files are fixed, only when the buffer is open, or re-opened. Changes
to the file will be saved to the file on disk. to the file will be saved to the file on disk.
Fixing files can be disabled or enabled for individual buffers by setting
`b:ale_fix_on_save` to `0` or `1`.
g:ale_history_enabled *g:ale_history_enabled* g:ale_history_enabled *g:ale_history_enabled*

View File

@ -77,6 +77,7 @@ After:
unlet! g:ale_set_lists_synchronously unlet! g:ale_set_lists_synchronously
unlet! g:ale_emulate_job_failure unlet! g:ale_emulate_job_failure
unlet! b:ale_fixers unlet! b:ale_fixers
unlet! b:ale_fix_on_save
delfunction AddCarets delfunction AddCarets
delfunction AddDollars delfunction AddDollars
delfunction DoNothing delfunction DoNothing
@ -412,6 +413,29 @@ Expect(There should be only two lines):
a a
b b
Execute(b:ale_fix_on_save = 1 should override g:ale_fix_on_save = 0):
let g:ale_fix_on_save = 0
let b:ale_fix_on_save = 1
let g:ale_fixers.testft = ['RemoveLastLineOneArg']
call ale#events#SaveEvent(bufnr(''))
Expect(There should be only two lines):
a
b
Execute(b:ale_fix_on_save = 0 should override g:ale_fix_on_save = 1):
let g:ale_fix_on_save = 1
let b:ale_fix_on_save = 0
let g:ale_fixers.testft = ['RemoveLastLineOneArg']
call ale#events#SaveEvent(bufnr(''))
Expect(The lines should be the same):
a
b
c
Execute(ALEFix functions returning jobs should be able to accept one argument): Execute(ALEFix functions returning jobs should be able to accept one argument):
if has('win32') if has('win32')
" Just skip this test on Windows, we can't run it. " Just skip this test on Windows, we can't run it.

View File

@ -131,7 +131,13 @@ Execute(ALEToggle should reset everything and then run again):
AssertEqual [], getloclist(0), 'The loclist was not cleared' AssertEqual [], getloclist(0), 'The loclist was not cleared'
AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared' AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared'
AssertEqual [], getmatches(), 'The highlights were not cleared' AssertEqual [], getmatches(), 'The highlights were not cleared'
AssertEqual ['ALECleanupGroup', 'ALEHighlightBufferGroup'], ParseAuGroups() AssertEqual
\ [
\ 'ALECleanupGroup',
\ 'ALEHighlightBufferGroup',
\ 'ALERunOnSaveGroup',
\ ],
\ ParseAuGroups()
" Toggle ALE on, everything should be set up and run again. " Toggle ALE on, everything should be set up and run again.
ALEToggle ALEToggle

View File

@ -155,32 +155,10 @@ Execute (g:ale_lint_on_filetype_changed = 1 should bind the FileType event):
\ ], \ ],
\ CheckAutocmd('ALERunOnFiletypeChangeGroup') \ CheckAutocmd('ALERunOnFiletypeChangeGroup')
Execute (g:ale_lint_on_save = 0 should bind no events): Execute (The SaveEvent should always be bound):
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 [
\ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
\], 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 [
\ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',
\], 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_enabled = 0
let g:ale_lint_on_save = 0 let g:ale_lint_on_save = 0
let g:ale_fix_on_save = 1 let g:ale_fix_on_save = 0
AssertEqual [ AssertEqual [
\ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))', \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand(''<abuf>'')))',

View File

@ -1,4 +1,6 @@
Before: Before:
Save g:ale_fix_on_save
Save g:ale_enabled
Save g:ale_run_synchronously Save g:ale_run_synchronously
Save g:ale_set_lists_synchronously Save g:ale_set_lists_synchronously
Save g:ale_buffer_info Save g:ale_buffer_info
@ -7,6 +9,7 @@ Before:
let g:ale_buffer_info = {} let g:ale_buffer_info = {}
let g:ale_run_synchronously = 1 let g:ale_run_synchronously = 1
let g:ale_set_lists_synchronously = 1 let g:ale_set_lists_synchronously = 1
let b:ale_save_event_fired = 0
call ale#ResetLintFileMarkers() call ale#ResetLintFileMarkers()
let g:buffer_result = [ let g:buffer_result = [
@ -261,7 +264,10 @@ Execute(The Save event should respect the buffer number):
\], GetSimplerLoclist() \], GetSimplerLoclist()
Execute(The Save event should set b:ale_save_event_fired to 1): Execute(The Save event should set b:ale_save_event_fired to 1):
let b:ale_enabled = 0 let g:ale_lint_on_save = 1
let b:ale_enabled = 1
call ale#linter#Reset()
call ale#events#SaveEvent(bufnr('')) call ale#events#SaveEvent(bufnr(''))
" This flag needs to be set so windows can be opened, etc. " This flag needs to be set so windows can be opened, etc.
@ -289,3 +295,10 @@ Execute(lint_file linters should stay running after checking without them):
AssertEqual 2, len(g:ale_buffer_info[bufnr('')].job_list) AssertEqual 2, len(g:ale_buffer_info[bufnr('')].job_list)
call ale#engine#WaitForJobs(2000) call ale#engine#WaitForJobs(2000)
Execute(The save event should not lint the buffer when ALE is disabled):
let g:ale_enabled = 0
call ale#events#SaveEvent(bufnr(''))
AssertEqual [], GetSimplerLoclist()
AssertEqual 0, b:ale_save_event_fired