From ab9afaa2bf446ed9db32f5ab43081e7f28cc1358 Mon Sep 17 00:00:00 2001 From: w0rp Date: Fri, 5 May 2017 23:03:19 +0100 Subject: Add a has() wrapper we can override for tests, and add a function for generating paths up to the root directory to search through --- autoload/ale.vim | 8 ++++++++ autoload/ale/path.vim | 24 ++++++++++++++++++++++++ autoload/ale/python.vim | 2 ++ 3 files changed, 34 insertions(+) create mode 100644 autoload/ale/python.vim (limited to 'autoload') diff --git a/autoload/ale.vim b/autoload/ale.vim index b9cd648f..c8fbfdfc 100644 --- a/autoload/ale.vim +++ b/autoload/ale.vim @@ -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. diff --git a/autoload/ale/path.vim b/autoload/ale/path.vim index 28105b1e..0ea13351 100644 --- a/autoload/ale/path.vim +++ b/autoload/ale/path.vim @@ -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 diff --git a/autoload/ale/python.vim b/autoload/ale/python.vim new file mode 100644 index 00000000..34b35ddb --- /dev/null +++ b/autoload/ale/python.vim @@ -0,0 +1,2 @@ +" Author: w0rp +" Description: Functions for integrating with Python linters. -- cgit v1.2.3