diff --git a/autoload/ale.vim b/autoload/ale.vim index 3c15f5d5..80ef3eed 100644 --- a/autoload/ale.vim +++ b/autoload/ale.vim @@ -96,3 +96,14 @@ endfunction function! ale#ResetLintFileMarkers() abort let s:should_lint_file_for_buffer = {} 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. +" +" Every variable name will be prefixed with 'ale_'. +function! ale#Var(buffer, variable_name) abort + let l:full_name = 'ale_' . a:variable_name + + return getbufvar(a:buffer, l:full_name, g:[l:full_name]) +endfunction diff --git a/test/test_ale_var.vader b/test/test_ale_var.vader new file mode 100644 index 00000000..aee8e048 --- /dev/null +++ b/test/test_ale_var.vader @@ -0,0 +1,16 @@ +Before: + let g:ale_some_variable = 'abc' + +After: + unlet! g:ale_some_variable + +Execute(ale#Var should return global variables): + AssertEqual 'abc', ale#Var(bufnr(''), 'some_variable') + +Execute(ale#Var should return buffer overrides): + let b:ale_some_variable = 'def' + + AssertEqual 'def', ale#Var(bufnr(''), 'some_variable') + +Execute(ale#Var should throw exceptions for undefined variables): + AssertThrows call ale#Var(bufnr(''), 'undefined_variable_name')