summaryrefslogtreecommitdiff
path: root/autoload
diff options
context:
space:
mode:
Diffstat (limited to 'autoload')
-rw-r--r--autoload/ale/pattern_options.vim20
1 files changed, 15 insertions, 5 deletions
diff --git a/autoload/ale/pattern_options.vim b/autoload/ale/pattern_options.vim
index a55a27f6..e58b8cf2 100644
--- a/autoload/ale/pattern_options.vim
+++ b/autoload/ale/pattern_options.vim
@@ -1,6 +1,10 @@
" Author: w0rp <devw0rp@gmail.com>
" 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
if a:left_item[0] < a:right_item[0]
return -1
@@ -18,13 +22,19 @@ function! ale#pattern_options#SetOptions(buffer) abort
return
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')
- " The patterns are sorted, so they are applied consistently.
- for [l:pattern, l:options] in sort(
- \ items(g:ale_pattern_options),
- \ function('s:CmpPatterns')
- \)
+ for [l:pattern, l:options] in s:sorted_items
if match(l:filename, l:pattern) >= 0
for [l:key, l:value] in items(l:options)
call setbufvar(a:buffer, l:key, l:value)