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.
|
||||
"
|
||||
" 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
|
||||
" forward slash, to prevent the paths being treated as special MSYS paths.
|
||||
function! ale#path#Simplify(path) abort
|
||||
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
|
||||
|
||||
let l:win_path = substitute(a:path, '/', '\\', 'g')
|
||||
|
|
|
@ -78,7 +78,7 @@ Execute(The mypy handler should handle Windows names with spaces):
|
|||
\ {
|
||||
\ 'lnum': 4,
|
||||
\ 'col': 0,
|
||||
\ 'filename': 'C:\something\with spaces.py',
|
||||
\ 'filename': ale#path#Simplify('C:\something\with spaces.py'),
|
||||
\ 'type': 'E',
|
||||
\ 'text': 'No library stub file for module ''django.db''',
|
||||
\ },
|
||||
|
|
|
@ -6,6 +6,22 @@ Before:
|
|||
After:
|
||||
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):
|
||||
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')
|
||||
|
||||
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