mirror of
https://github.com/dense-analysis/ale.git
synced 2025-12-08 21:44:47 +08:00
#3319 - Try to modify buffers later for ALEFix
This commit is contained in:
@@ -15,22 +15,29 @@ function! ale#fix#ApplyQueuedFixes(buffer) abort
|
|||||||
|
|
||||||
call remove(g:ale_fix_buffer_data, a:buffer)
|
call remove(g:ale_fix_buffer_data, a:buffer)
|
||||||
|
|
||||||
if l:data.changes_made
|
try
|
||||||
let l:new_lines = ale#util#SetBufferContents(a:buffer, l:data.output)
|
if l:data.changes_made
|
||||||
|
let l:new_lines = ale#util#SetBufferContents(a:buffer, l:data.output)
|
||||||
|
|
||||||
if l:data.should_save
|
if l:data.should_save
|
||||||
if a:buffer is bufnr('')
|
if a:buffer is bufnr('')
|
||||||
if empty(&buftype)
|
if empty(&buftype)
|
||||||
noautocmd :w!
|
noautocmd :w!
|
||||||
|
else
|
||||||
|
set nomodified
|
||||||
|
endif
|
||||||
else
|
else
|
||||||
set nomodified
|
call writefile(l:new_lines, expand('#' . a:buffer . ':p')) " no-custom-checks
|
||||||
|
call setbufvar(a:buffer, '&modified', 0)
|
||||||
endif
|
endif
|
||||||
else
|
|
||||||
call writefile(l:new_lines, expand('#' . a:buffer . ':p')) " no-custom-checks
|
|
||||||
call setbufvar(a:buffer, '&modified', 0)
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
catch /E21/
|
||||||
|
" If we cannot modify the buffer now, try again later.
|
||||||
|
let g:ale_fix_buffer_data[a:buffer] = l:data
|
||||||
|
|
||||||
|
return
|
||||||
|
endtry
|
||||||
|
|
||||||
if l:data.should_save
|
if l:data.should_save
|
||||||
let l:should_lint = ale#Var(a:buffer, 'fix_on_save')
|
let l:should_lint = ale#Var(a:buffer, 'fix_on_save')
|
||||||
|
|||||||
@@ -505,13 +505,6 @@ function! ale#util#SetBufferContents(buffer, lines) abort
|
|||||||
\ : a:lines
|
\ : a:lines
|
||||||
let l:first_line_to_remove = len(l:new_lines) + 1
|
let l:first_line_to_remove = len(l:new_lines) + 1
|
||||||
|
|
||||||
" We'll temporarily make a buffer modifiable, to force edits.
|
|
||||||
let l:modifiable = getbufvar(a:buffer, '&modifiable')
|
|
||||||
|
|
||||||
if !l:modifiable
|
|
||||||
call setbufvar(a:buffer, '&modifiable', 1)
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Use a Vim API for setting lines in other buffers, if available.
|
" Use a Vim API for setting lines in other buffers, if available.
|
||||||
if l:has_bufline_api
|
if l:has_bufline_api
|
||||||
call setbufline(a:buffer, 1, l:new_lines)
|
call setbufline(a:buffer, 1, l:new_lines)
|
||||||
@@ -530,9 +523,5 @@ function! ale#util#SetBufferContents(buffer, lines) abort
|
|||||||
call setline(1, l:new_lines)
|
call setline(1, l:new_lines)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !l:modifiable
|
|
||||||
call setbufvar(a:buffer, '&modifiable', 0)
|
|
||||||
endif
|
|
||||||
|
|
||||||
return l:new_lines
|
return l:new_lines
|
||||||
endfunction
|
endfunction
|
||||||
|
|||||||
@@ -727,6 +727,19 @@ Expect(There should be only two lines):
|
|||||||
a
|
a
|
||||||
b
|
b
|
||||||
|
|
||||||
|
Execute(ALEFix should modify a buffer that is not modifiable, if it becomes modifable later):
|
||||||
|
let g:ale_fixers.testft = ['RemoveLastLineOneArg']
|
||||||
|
|
||||||
|
set nomodifiable
|
||||||
|
ALEFix
|
||||||
|
call ale#test#FlushJobs()
|
||||||
|
set modifiable
|
||||||
|
call ale#fix#ApplyQueuedFixes(bufnr(''))
|
||||||
|
|
||||||
|
Expect(There should be only two lines):
|
||||||
|
a
|
||||||
|
b
|
||||||
|
|
||||||
Execute(b:ale_fix_on_save = 1 should override g:ale_fix_on_save = 0):
|
Execute(b:ale_fix_on_save = 1 should override g:ale_fix_on_save = 0):
|
||||||
let g:ale_fix_on_save = 0
|
let g:ale_fix_on_save = 0
|
||||||
let b:ale_fix_on_save = 1
|
let b:ale_fix_on_save = 1
|
||||||
|
|||||||
Reference in New Issue
Block a user