diff options
-rw-r--r-- | autoload/ale/fix.vim | 9 | ||||
-rw-r--r-- | autoload/ale/util.vim | 2 | ||||
-rw-r--r-- | test/test_writefile_function.vader | 21 |
3 files changed, 29 insertions, 3 deletions
diff --git a/autoload/ale/fix.vim b/autoload/ale/fix.vim index 1ae1a4a1..03652ecf 100644 --- a/autoload/ale/fix.vim +++ b/autoload/ale/fix.vim @@ -30,7 +30,14 @@ function! ale#fix#ApplyQueuedFixes() abort call winrestview(l:save) endif - call setline(1, l:data.output) + " If the file is in DOS mode, we have to remove carriage returns from + " the ends of lines before calling setline(), or we will see them + " twice. + let l:lines_to_set = getbufvar(l:buffer, '&fileformat') is# 'dos' + \ ? map(copy(l:data.output), 'substitute(v:val, ''\r\+$'', '''', '''')') + \ : l:data.output + + call setline(1, l:lines_to_set) if l:data.should_save if empty(&buftype) diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim index 58a2065e..e0491653 100644 --- a/autoload/ale/util.vim +++ b/autoload/ale/util.vim @@ -405,7 +405,7 @@ endfunction " the buffer. function! ale#util#Writefile(buffer, lines, filename) abort let l:corrected_lines = getbufvar(a:buffer, '&fileformat') is# 'dos' - \ ? map(copy(a:lines), 'v:val . "\r"') + \ ? map(copy(a:lines), 'substitute(v:val, ''\r*$'', ''\r'', '''')') \ : a:lines call writefile(l:corrected_lines, a:filename) " no-custom-checks diff --git a/test/test_writefile_function.vader b/test/test_writefile_function.vader index 4e4aab53..8c8a6f17 100644 --- a/test/test_writefile_function.vader +++ b/test/test_writefile_function.vader @@ -28,7 +28,26 @@ Execute(Carriage returns should be included for ale#util#Writefile): AssertEqual \ ["first\r", "second\r", "third\r", ''], \ readfile('.newline-test', 'b') - \ + +Given(A file with extra carriage returns): + first
+ second
+ third
+ fourth + +Execute(Carriage returns should be de-depulicated): + call ale#test#SetFilename('.newline-test') + + setlocal buftype= + noautocmd :w + noautocmd :e! ++ff=dos + + call ale#util#Writefile(bufnr(''), getline(1, '$'), '.newline-test') + + AssertEqual + \ ["first\r", "second\r", "third\r", "fourth\r", ''], + \ readfile('.newline-test', 'b') + Given(A file with Unix line ending characters): first second |