Add a has() wrapper we can override for tests, and add a function for generating paths up to the root directory to search through
This commit is contained in:
parent
6b15c7c9fd
commit
ab9afaa2bf
@ -105,6 +105,14 @@ function! ale#ResetLintFileMarkers() abort
|
||||
let s:should_lint_file_for_buffer = {}
|
||||
endfunction
|
||||
|
||||
let g:ale_has_override = get(g:, 'ale_has_override', {})
|
||||
|
||||
" Call has(), but check a global Dictionary so we can force flags on or off
|
||||
" for testing purposes.
|
||||
function! ale#Has(feature) abort
|
||||
return get(g:ale_has_override, a:feature, has(a:feature))
|
||||
endfunction
|
||||
|
||||
" Given a buffer number and a variable name, look for that variable in the
|
||||
" buffer scope, then in global scope. If the name does not exist in the global
|
||||
" scope, an exception will be thrown.
|
||||
|
@ -92,3 +92,27 @@ function! ale#path#IsBufferPath(buffer, filename) abort
|
||||
|
||||
return resolve(l:buffer_filename) ==# l:resolved_filename
|
||||
endfunction
|
||||
|
||||
" Given a path, return every component of the path, moving upwards.
|
||||
function! ale#path#Upwards(path) abort
|
||||
let l:pattern = ale#Has('win32') ? '\v/+|\\+' : '\v/+'
|
||||
let l:sep = ale#Has('win32') ? '\' : '/'
|
||||
let l:parts = split(simplify(a:path), l:pattern)
|
||||
let l:path_list = []
|
||||
|
||||
while !empty(l:parts)
|
||||
call add(l:path_list, join(l:parts, l:sep))
|
||||
let l:parts = l:parts[:-2]
|
||||
endwhile
|
||||
|
||||
if ale#Has('win32') && a:path =~# '^[a-zA-z]:\'
|
||||
" Add \ to C: for C:\, etc.
|
||||
let l:path_list[-1] .= '\'
|
||||
elseif a:path[0] ==# '/'
|
||||
" If the path starts with /, even on Windows, add / and / to all paths.
|
||||
call add(l:path_list, '')
|
||||
call map(l:path_list, '''/'' . v:val')
|
||||
endif
|
||||
|
||||
return l:path_list
|
||||
endfunction
|
||||
|
2
autoload/ale/python.vim
Normal file
2
autoload/ale/python.vim
Normal file
@ -0,0 +1,2 @@
|
||||
" Author: w0rp <devw0rp@gmail.com>
|
||||
" Description: Functions for integrating with Python linters.
|
46
test/test_path_upwards.vader
Normal file
46
test/test_path_upwards.vader
Normal file
@ -0,0 +1,46 @@
|
||||
After:
|
||||
let g:ale_has_override = {}
|
||||
|
||||
Execute(ale#path#Upwards should return the correct path components for Unix):
|
||||
" Absolute paths should include / on the end.
|
||||
AssertEqual
|
||||
\ ['/foo/bar/baz', '/foo/bar', '/foo', '/'],
|
||||
\ ale#path#Upwards('/foo/bar/baz')
|
||||
AssertEqual
|
||||
\ ['/foo/bar/baz', '/foo/bar', '/foo', '/'],
|
||||
\ ale#path#Upwards('/foo/bar/baz///')
|
||||
" Relative paths do not.
|
||||
AssertEqual
|
||||
\ ['foo/bar/baz', 'foo/bar', 'foo'],
|
||||
\ ale#path#Upwards('foo/bar/baz')
|
||||
AssertEqual
|
||||
\ ['foo2/bar', 'foo2'],
|
||||
\ ale#path#Upwards('foo//..////foo2////bar')
|
||||
" Expect an empty List for empty strings.
|
||||
AssertEqual [], ale#path#Upwards('')
|
||||
|
||||
Execute(ale#path#Upwards should return the correct path components for Windows):
|
||||
let g:ale_has_override = {'win32': 1}
|
||||
|
||||
AssertEqual
|
||||
\ ['C:\foo\bar\baz', 'C:\foo\bar', 'C:\foo', 'C:\'],
|
||||
\ ale#path#Upwards('C:\foo\bar\baz')
|
||||
AssertEqual
|
||||
\ ['C:\foo\bar\baz', 'C:\foo\bar', 'C:\foo', 'C:\'],
|
||||
\ ale#path#Upwards('C:\foo\bar\baz\\\')
|
||||
AssertEqual
|
||||
\ ['/foo\bar\baz', '/foo\bar', '/foo', '/'],
|
||||
\ ale#path#Upwards('/foo/bar/baz')
|
||||
AssertEqual
|
||||
\ ['foo\bar\baz', 'foo\bar', 'foo'],
|
||||
\ ale#path#Upwards('foo/bar/baz')
|
||||
AssertEqual
|
||||
\ ['foo\bar\baz', 'foo\bar', 'foo'],
|
||||
\ ale#path#Upwards('foo\bar\baz')
|
||||
" simplify() is used internally, and should sort out \ paths when actually
|
||||
" running Windows, which we can't test here.
|
||||
AssertEqual
|
||||
\ ['foo2\bar', 'foo2'],
|
||||
\ ale#path#Upwards('foo//..///foo2////bar')
|
||||
" Expect an empty List for empty strings.
|
||||
AssertEqual [], ale#path#Upwards('')
|
Loading…
Reference in New Issue
Block a user