diff --git a/autoload/ale/util.vim b/autoload/ale/util.vim index 98fe53e8..8eda8a98 100644 --- a/autoload/ale/util.vim +++ b/autoload/ale/util.vim @@ -22,19 +22,27 @@ function! ale#util#GetFunction(string_or_ref) abort endfunction function! ale#util#LocItemCompare(left, right) abort - if a:left['lnum'] < a:right['lnum'] + if a:left.bufnr < a:right.bufnr return -1 endif - if a:left['lnum'] > a:right['lnum'] + if a:left.bufnr > a:right.bufnr return 1 endif - if a:left['col'] < a:right['col'] + if a:left.lnum < a:right.lnum return -1 endif - if a:left['col'] > a:right['col'] + 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 diff --git a/test/test_loclist_sorting.vader b/test/test_loclist_sorting.vader index 6e52be6f..c095bdda 100644 --- a/test/test_loclist_sorting.vader +++ b/test/test_loclist_sorting.vader @@ -1,9 +1,14 @@ Before: let g:loclist = [ - \ {'lnum': 5, 'col': 5}, - \ {'lnum': 5, 'col': 4}, - \ {'lnum': 2, 'col': 10}, - \ {'lnum': 3, 'col': 2}, + \ {'bufnr': 3, 'lnum': 1, 'col': 1}, + \ {'bufnr': 1, 'lnum': 5, 'col': 5}, + \ {'bufnr': 2, 'lnum': 5, 'col': 5}, + \ {'bufnr': 1, 'lnum': 5, 'col': 4}, + \ {'bufnr': 1, 'lnum': 2, 'col': 10}, + \ {'bufnr': 2, 'lnum': 1, 'col': 5}, + \ {'bufnr': 1, 'lnum': 3, 'col': 2}, + \ {'bufnr': 2, 'lnum': 1, 'col': 2}, + \ {'bufnr': -1, 'lnum': 3, 'col': 2}, \] Execute (Sort loclist with comparison function): @@ -11,10 +16,15 @@ Execute (Sort loclist with comparison function): Then (loclist item should be sorted): AssertEqual [ - \ {'lnum': 2, 'col': 10}, - \ {'lnum': 3, 'col': 2}, - \ {'lnum': 5, 'col': 4}, - \ {'lnum': 5, 'col': 5}, + \ {'bufnr': -1, 'lnum': 3, 'col': 2}, + \ {'bufnr': 1, 'lnum': 2, 'col': 10}, + \ {'bufnr': 1, 'lnum': 3, 'col': 2}, + \ {'bufnr': 1, 'lnum': 5, 'col': 4}, + \ {'bufnr': 1, 'lnum': 5, 'col': 5}, + \ {'bufnr': 2, 'lnum': 1, 'col': 2}, + \ {'bufnr': 2, 'lnum': 1, 'col': 5}, + \ {'bufnr': 2, 'lnum': 5, 'col': 5}, + \ {'bufnr': 3, 'lnum': 1, 'col': 1}, \], g:loclist After: