summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorw0rp <devw0rp@gmail.com>2018-09-19 19:28:41 +0100
committerw0rp <devw0rp@gmail.com>2018-09-19 19:28:57 +0100
commita6c6e24d61c3d67f46cb9e3d5a8d4c8475b8a8c6 (patch)
tree158a8f25b2b8898bda47675c6791b0f62ccfdd67
parent9d50a06d489ddee8fa60b711f302ae83a25fb4d5 (diff)
downloadale-a6c6e24d61c3d67f46cb9e3d5a8d4c8475b8a8c6.zip
#1872 Remove extra carriage returns when fixing files on Windows
-rw-r--r--autoload/ale/fix.vim9
-rw-r--r--autoload/ale/util.vim2
-rw-r--r--test/test_writefile_function.vader21
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