mirror of https://github.com/dense-analysis/ale
#1095 Cache the sorting of patterns for g:ale_pattern_options
This commit is contained in:
parent
8c1d6eda81
commit
bac02c9d81
|
@ -1,6 +1,10 @@
|
||||||
" Author: w0rp <devw0rp@gmail.com>
|
" Author: w0rp <devw0rp@gmail.com>
|
||||||
" Description: Set options in files based on regex patterns.
|
" Description: Set options in files based on regex patterns.
|
||||||
|
|
||||||
|
" These variables are used to cache the sorting of patterns below.
|
||||||
|
let s:last_pattern_options = {}
|
||||||
|
let s:sorted_items = []
|
||||||
|
|
||||||
function! s:CmpPatterns(left_item, right_item) abort
|
function! s:CmpPatterns(left_item, right_item) abort
|
||||||
if a:left_item[0] < a:right_item[0]
|
if a:left_item[0] < a:right_item[0]
|
||||||
return -1
|
return -1
|
||||||
|
@ -18,13 +22,19 @@ function! ale#pattern_options#SetOptions(buffer) abort
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" The items will only be sorted whenever the patterns change.
|
||||||
|
if g:ale_pattern_options != s:last_pattern_options
|
||||||
|
let s:last_pattern_options = deepcopy(g:ale_pattern_options)
|
||||||
|
" The patterns are sorted, so they are applied consistently.
|
||||||
|
let s:sorted_items = sort(
|
||||||
|
\ items(g:ale_pattern_options),
|
||||||
|
\ function('s:CmpPatterns')
|
||||||
|
\)
|
||||||
|
endif
|
||||||
|
|
||||||
let l:filename = expand('#' . a:buffer . ':p')
|
let l:filename = expand('#' . a:buffer . ':p')
|
||||||
|
|
||||||
" The patterns are sorted, so they are applied consistently.
|
for [l:pattern, l:options] in s:sorted_items
|
||||||
for [l:pattern, l:options] in sort(
|
|
||||||
\ items(g:ale_pattern_options),
|
|
||||||
\ function('s:CmpPatterns')
|
|
||||||
\)
|
|
||||||
if match(l:filename, l:pattern) >= 0
|
if match(l:filename, l:pattern) >= 0
|
||||||
for [l:key, l:value] in items(l:options)
|
for [l:key, l:value] in items(l:options)
|
||||||
call setbufvar(a:buffer, l:key, l:value)
|
call setbufvar(a:buffer, l:key, l:value)
|
||||||
|
|
|
@ -74,3 +74,19 @@ Execute(Patterns should not be applied when the setting is disabled):
|
||||||
call ale#pattern_options#SetOptions(bufnr(''))
|
call ale#pattern_options#SetOptions(bufnr(''))
|
||||||
|
|
||||||
AssertEqual 0, b:some_option
|
AssertEqual 0, b:some_option
|
||||||
|
|
||||||
|
" This test is important for making sure we update the sorted items.
|
||||||
|
Execute(Patterns should be applied after the Dictionary changes):
|
||||||
|
call ale#test#SetFilename('foobar.js')
|
||||||
|
|
||||||
|
let g:ale_pattern_options = {}
|
||||||
|
|
||||||
|
call ale#pattern_options#SetOptions(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual 0, b:some_option
|
||||||
|
|
||||||
|
let g:ale_pattern_options['foo'] = {'some_option': 666}
|
||||||
|
|
||||||
|
call ale#pattern_options#SetOptions(bufnr(''))
|
||||||
|
|
||||||
|
AssertEqual 666, b:some_option
|
||||||
|
|
Loading…
Reference in New Issue