From cf599f4470a7421b01dfd01976274f244894d7e1 Mon Sep 17 00:00:00 2001 From: w0rp Date: Mon, 20 Nov 2017 00:02:33 +0000 Subject: [PATCH] #1149 Fix conversion from URIs to filenames on Windows --- autoload/ale/path.vim | 9 ++++++++- test/test_path_uri.vader | 3 +++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/autoload/ale/path.vim b/autoload/ale/path.vim index 83f6e85df5..bca0fe817c 100644 --- a/autoload/ale/path.vim +++ b/autoload/ale/path.vim @@ -185,5 +185,12 @@ function! ale#path#FromURI(uri) abort let l:i = len('file://') let l:encoded_path = a:uri[: l:i - 1] is# 'file://' ? a:uri[l:i :] : a:uri - return ale#uri#Decode(l:encoded_path) + let l:path = ale#uri#Decode(l:encoded_path) + + " If the path is like /C:/foo/bar, it should be C:\foo\bar instead. + if l:path =~# '^/[a-zA-Z]:' + let l:path = substitute(l:path[1:], '/', '\\', 'g') + endif + + return l:path endfunction diff --git a/test/test_path_uri.vader b/test/test_path_uri.vader index dbceac3ab1..a3e68d984e 100644 --- a/test/test_path_uri.vader +++ b/test/test_path_uri.vader @@ -2,6 +2,9 @@ Execute(ale#path#ToURI should work for Windows paths): AssertEqual 'file:///C:/foo/bar/baz.tst', ale#path#ToURI('C:\foo\bar\baz.tst') AssertEqual 'foo/bar/baz.tst', ale#path#ToURI('foo\bar\baz.tst') +Execute(ale#path#FromURI should work for Windows paths): + AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromURI('file:///C:/foo/bar/baz.tst') + Execute(ale#path#ToURI should work for Unix paths): AssertEqual 'file:///foo/bar/baz.tst', ale#path#ToURI('/foo/bar/baz.tst') AssertEqual 'foo/bar/baz.tst', ale#path#ToURI('foo/bar/baz.tst')