fix: don't append newline when buffer is noeol and nofixeol

This commit is contained in:
James C. Davis 2020-04-30 03:43:17 -04:00
parent 36e5337e30
commit 15d590ee5e
No known key found for this signature in database
GPG key ID: DEFA5E85034543BC
2 changed files with 50 additions and 1 deletions

View file

@ -418,7 +418,10 @@ function! ale#util#Writefile(buffer, lines, filename) abort
\ ? map(copy(a:lines), 'substitute(v:val, ''\r*$'', ''\r'', '''')') \ ? map(copy(a:lines), 'substitute(v:val, ''\r*$'', ''\r'', '''')')
\ : a:lines \ : a:lines
call writefile(l:corrected_lines, a:filename, 'S') " no-custom-checks " Set binary flag if buffer doesn't have eol and nofixeol to avoid appending newline
let l:flags = !getbufvar(a:buffer, '&eol') && exists('+fixeol') && !&fixeol ? 'bS' : 'S'
call writefile(l:corrected_lines, a:filename, l:flags) " no-custom-checks
endfunction endfunction
if !exists('s:patial_timers') if !exists('s:patial_timers')

View file

@ -69,3 +69,49 @@ Execute(Unix file lines should be written as normal):
AssertEqual AssertEqual
\ ['first', 'second', 'third', ''], \ ['first', 'second', 'third', ''],
\ readfile(g:new_line_test_file, 'b') \ readfile(g:new_line_test_file, 'b')
Execute(Newline at end of file should be preserved even when nofixeol):
call ale#test#SetFilename(g:new_line_test_file)
setlocal buftype=
noautocmd :w
noautocmd :e! ++ff=unix
set eol
set nofixeol
call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file)
AssertEqual
\ ['first', 'second', 'third', ''],
\ readfile(g:new_line_test_file, 'b')
Execute(Newline should not be appended on write when noeol and nofixeol):
call ale#test#SetFilename(g:new_line_test_file)
setlocal buftype=
noautocmd :w
noautocmd :e! ++ff=unix
set noeol
set nofixeol
call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file)
AssertEqual
\ ['first', 'second', 'third'],
\ readfile(g:new_line_test_file, 'b')
Execute(Newline should be appended on write when noeol and fixeol):
call ale#test#SetFilename(g:new_line_test_file)
setlocal buftype=
noautocmd :w
noautocmd :e! ++ff=unix
set noeol
set fixeol
call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file)
AssertEqual
\ ['first', 'second', 'third', ''],
\ readfile(g:new_line_test_file, 'b')