Fix #2525 - Convert Windows paths in a Unix environment
This commit is contained in:
parent
381fff0e4c
commit
7b78f2b846
3 changed files with 37 additions and 3 deletions
|
@ -3,13 +3,20 @@
|
||||||
|
|
||||||
" simplify a path, and fix annoying issues with paths on Windows.
|
" simplify a path, and fix annoying issues with paths on Windows.
|
||||||
"
|
"
|
||||||
" Forward slashes are changed to back slashes so path equality works better.
|
" Forward slashes are changed to back slashes so path equality works better
|
||||||
|
" on Windows. Back slashes are changed to forward slashes on Unix.
|
||||||
|
"
|
||||||
|
" Unix paths can technically contain back slashes, but in practice no path
|
||||||
|
" should, and replacing back slashes with forward slashes makes linters work
|
||||||
|
" in environments like MSYS.
|
||||||
"
|
"
|
||||||
" Paths starting with more than one forward slash are changed to only one
|
" Paths starting with more than one forward slash are changed to only one
|
||||||
" forward slash, to prevent the paths being treated as special MSYS paths.
|
" forward slash, to prevent the paths being treated as special MSYS paths.
|
||||||
function! ale#path#Simplify(path) abort
|
function! ale#path#Simplify(path) abort
|
||||||
if has('unix')
|
if has('unix')
|
||||||
return substitute(simplify(a:path), '^//\+', '/', 'g') " no-custom-checks
|
let l:unix_path = substitute(a:path, '\\', '/', 'g')
|
||||||
|
|
||||||
|
return substitute(simplify(l:unix_path), '^//\+', '/', 'g') " no-custom-checks
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let l:win_path = substitute(a:path, '/', '\\', 'g')
|
let l:win_path = substitute(a:path, '/', '\\', 'g')
|
||||||
|
|
|
@ -78,7 +78,7 @@ Execute(The mypy handler should handle Windows names with spaces):
|
||||||
\ {
|
\ {
|
||||||
\ 'lnum': 4,
|
\ 'lnum': 4,
|
||||||
\ 'col': 0,
|
\ 'col': 0,
|
||||||
\ 'filename': 'C:\something\with spaces.py',
|
\ 'filename': ale#path#Simplify('C:\something\with spaces.py'),
|
||||||
\ 'type': 'E',
|
\ 'type': 'E',
|
||||||
\ 'text': 'No library stub file for module ''django.db''',
|
\ 'text': 'No library stub file for module ''django.db''',
|
||||||
\ },
|
\ },
|
||||||
|
|
|
@ -6,6 +6,22 @@ Before:
|
||||||
After:
|
After:
|
||||||
delfunction CheckPath
|
delfunction CheckPath
|
||||||
|
|
||||||
|
Execute(ale#path#Simplify should adjust paths correctly):
|
||||||
|
if has('unix')
|
||||||
|
" Multiple slashes should be removed correctly.
|
||||||
|
AssertEqual '/foo/bar/baz', ale#path#Simplify('////foo///bar///baz')
|
||||||
|
" Back slashes should be converted to forward slashes.
|
||||||
|
" This means some valid filenames are adjusted incorrectly, but in practice
|
||||||
|
" no filenames for code should contain back slashes, and adjusting slashes
|
||||||
|
" like this makes ALE work in MSYS.
|
||||||
|
AssertEqual 'foo/bar/baz', ale#path#Simplify('foo\bar\baz')
|
||||||
|
else
|
||||||
|
" Multiple slashes should be removed correctly.
|
||||||
|
AssertEqual '\foo\bar\baz', ale#path#Simplify('\\\foo\bar\baz')
|
||||||
|
" Forward slashes should be replaced with back slashes.
|
||||||
|
AssertEqual 'foo\bar\baz', ale#path#Simplify('foo/bar/baz')
|
||||||
|
endif
|
||||||
|
|
||||||
Execute(ale#path#IsBufferPath should match simple relative paths):
|
Execute(ale#path#IsBufferPath should match simple relative paths):
|
||||||
call ale#test#SetFilename('app/foo.txt')
|
call ale#test#SetFilename('app/foo.txt')
|
||||||
|
|
||||||
|
@ -53,3 +69,14 @@ Execute(ale#path#IsBufferPath should match files in /tmp):
|
||||||
call ale#test#SetFilename('app/test.ts')
|
call ale#test#SetFilename('app/test.ts')
|
||||||
|
|
||||||
Assert ale#path#IsBufferPath(bufnr(''), tempname() . '/test.ts')
|
Assert ale#path#IsBufferPath(bufnr(''), tempname() . '/test.ts')
|
||||||
|
|
||||||
|
Execute(ale#path#IsBufferPath should match Windows paths on Unix):
|
||||||
|
" This test should pass Unix.
|
||||||
|
"
|
||||||
|
" Back slashes in paths should be replaced with forward slashes, even though
|
||||||
|
" back slashes are valid in filenames on Unix.
|
||||||
|
if has('unix')
|
||||||
|
call ale#test#SetFilename('app/foo/test.ts')
|
||||||
|
|
||||||
|
Assert ale#path#IsBufferPath(bufnr(''), 'foo\test.ts')
|
||||||
|
endif
|
||||||
|
|
Reference in a new issue