summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale.vim11
-rw-r--r--autoload/ale/fix.vim1
-rw-r--r--test/test_ale_fix.vader24
-rw-r--r--test/test_ale_var.vader20
4 files changed, 55 insertions, 1 deletions
diff --git a/autoload/ale.vim b/autoload/ale.vim
index 4286e4af..9751225b 100644
--- a/autoload/ale.vim
+++ b/autoload/ale.vim
@@ -128,9 +128,18 @@ endfunction
"
" Every variable name will be prefixed with 'ale_'.
function! ale#Var(buffer, variable_name) abort
+ let l:nr = str2nr(a:buffer)
let l:full_name = 'ale_' . a:variable_name
- return getbufvar(str2nr(a:buffer), l:full_name, g:[l:full_name])
+ if bufexists(l:nr)
+ let l:vars = getbufvar(l:nr, '')
+ elseif has_key(g:, 'ale_fix_buffer_data')
+ let l:vars = get(g:ale_fix_buffer_data, l:nr, {'vars': {}}).vars
+ else
+ let l:vars = {}
+ endif
+
+ return get(l:vars, l:full_name, g:[l:full_name])
endfunction
" Initialize a variable with a default value, if it isn't already set.
diff --git a/autoload/ale/fix.vim b/autoload/ale/fix.vim
index 33f97ce4..d8a50a2d 100644
--- a/autoload/ale/fix.vim
+++ b/autoload/ale/fix.vim
@@ -305,6 +305,7 @@ function! ale#fix#InitBufferData(buffer, fixing_flag) abort
" The 'done' flag tells the function for applying changes when fixing
" is complete.
let g:ale_fix_buffer_data[a:buffer] = {
+ \ 'vars': getbufvar(a:buffer, ''),
\ 'lines_before': getbufline(a:buffer, 1, '$'),
\ 'filename': expand('#' . a:buffer . ':p'),
\ 'done': 0,
diff --git a/test/test_ale_fix.vader b/test/test_ale_fix.vader
index b4ffc062..5421dcfc 100644
--- a/test/test_ale_fix.vader
+++ b/test/test_ale_fix.vader
@@ -11,6 +11,7 @@ Before:
let g:ale_enabled = 0
let g:ale_echo_cursor = 0
let g:ale_run_synchronously = 1
+ let g:ale_fix_buffer_data = {}
let g:ale_fixers = {
\ 'testft': [],
\}
@@ -75,6 +76,8 @@ After:
call delete('fix_test_file')
endif
+ let g:ale_fix_buffer_data = {}
+
Given testft (A file with three lines):
a
b
@@ -291,3 +294,24 @@ Expect(The buffer should be the same):
a
b
c
+
+Given testft (A file with three lines):
+ a
+ b
+ c
+
+Execute(ale#fix#InitBufferData() should set up the correct data):
+ noautocmd silent file fix_test_file
+
+ call ale#fix#InitBufferData(bufnr(''), 'save_file')
+
+ AssertEqual {
+ \ bufnr(''): {
+ \ 'temporary_directory_list': [],
+ \ 'vars': b:,
+ \ 'filename': simplify(getcwd() . '/fix_test_file'),
+ \ 'done': 0,
+ \ 'lines_before': ['a', 'b', 'c'],
+ \ 'should_save': 1,
+ \ },
+ \}, g:ale_fix_buffer_data
diff --git a/test/test_ale_var.vader b/test/test_ale_var.vader
index 576b403f..fb674d93 100644
--- a/test/test_ale_var.vader
+++ b/test/test_ale_var.vader
@@ -3,6 +3,9 @@ Before:
After:
unlet! g:ale_some_variable
+ unlet! b:undefined_variable_name
+
+ let g:ale_fix_buffer_data = {}
Execute(ale#Var should return global variables):
AssertEqual 'abc', ale#Var(bufnr(''), 'some_variable')
@@ -18,4 +21,21 @@ Execute(ale#Var should return buffer overrides for buffer numbers as strings):
AssertEqual 'def', ale#Var(string(bufnr('')), 'some_variable')
Execute(ale#Var should throw exceptions for undefined variables):
+ let b:undefined_variable_name = 'def'
+
AssertThrows call ale#Var(bufnr(''), 'undefined_variable_name')
+
+Execute(ale#Var return variables from deleted buffers, saved for fixing things):
+ let g:ale_fix_buffer_data[1347347] = {'vars': {'ale_some_variable': 'def'}}
+
+ AssertEqual 'def', ale#Var(1347347, 'some_variable')
+
+Execute(ale#Var should return the global variable for unknown variables):
+ let g:ale_fix_buffer_data = {}
+
+ AssertEqual 'abc', ale#Var(1347347, 'some_variable')
+
+Execute(ale#Var should return the global variables when the ALE fix variable is undefined):
+ unlet! g:ale_fix_buffer_data
+
+ AssertEqual 'abc', ale#Var(1347347, 'some_variable')