diff --git a/autoload/ale/engine.vim b/autoload/ale/engine.vim index 0ce5b84..4f15c93 100644 --- a/autoload/ale/engine.vim +++ b/autoload/ale/engine.vim @@ -103,7 +103,7 @@ function! s:HandleExit(job) abort " Sort the loclist again. " We need a sorted list so we can run a binary search against it " for efficient lookup of the messages in the cursor handler. - call sort(g:ale_buffer_loclist_map[l:buffer], 's:LocItemCompare') + call sort(g:ale_buffer_loclist_map[l:buffer], 'ale#util#LocItemCompare') if g:ale_set_loclist call setloclist(0, g:ale_buffer_loclist_map[l:buffer]) @@ -149,26 +149,6 @@ function! s:FixLocList(buffer, loclist) abort endfor endfunction -function! s:LocItemCompare(left, right) abort - if a:left['lnum'] < a:right['lnum'] - return -1 - endif - - if a:left['lnum'] > a:right['lnum'] - return 1 - endif - - if a:left['col'] < a:right['col'] - return -1 - endif - - if a:left['col'] > a:right['col'] - return 1 - endif - - return 0 -endfunction - function! ale#engine#Invoke(buffer, linter) abort if has_key(a:linter, 'job') " Stop previous jobs for the same linter. diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim index 4217ac4..17ce7c4 100644 --- a/autoload/ale/util.vim +++ b/autoload/ale/util.vim @@ -43,3 +43,23 @@ function! ale#util#GetFunction(string_or_ref) abort return a:string_or_ref endfunction + +function! ale#util#LocItemCompare(left, right) abort + if a:left['lnum'] < a:right['lnum'] + return -1 + endif + + if a:left['lnum'] > a:right['lnum'] + return 1 + endif + + if a:left['col'] < a:right['col'] + return -1 + endif + + if a:left['col'] > a:right['col'] + return 1 + endif + + return 0 +endfunction diff --git a/test/test_loclist_sorting.vader b/test/test_loclist_sorting.vader new file mode 100644 index 0000000..fe4bc68 --- /dev/null +++ b/test/test_loclist_sorting.vader @@ -0,0 +1,21 @@ +Before: + let g:loclist = [ + \ {'lnum': 5, 'col': 5}, + \ {'lnum': 5, 'col': 4}, + \ {'lnum': 2, 'col': 10}, + \ {'lnum': 3, 'col': 2}, + \] + +Execute (Sort loclist with comparison function): + call sort(g:loclist, 'ale#util#LocItemCompare') + +Then (loclist item should be sorted): + AssertEqual g:loclist, [ + \ {'lnum': 2, 'col': 10}, + \ {'lnum': 3, 'col': 2}, + \ {'lnum': 5, 'col': 4}, + \ {'lnum': 5, 'col': 5}, + \] + +After: + unlet g:loclist