Before: Save g:ale_set_loclist Save g:ale_set_quickfix Save g:ale_loclist_msg_format Save g:ale_open_list Save g:ale_buffer_info Save g:ale_set_lists_synchronously let g:ale_set_lists_synchronously = 1 let g:ale_loclist_msg_format = '%code: %%s' let g:ale_open_list = 0 let g:loclist = [] let g:ale_buffer_info = {bufnr(''): {'loclist': g:loclist}} function! AddItem(data) abort let l:item = { \ 'bufnr': bufnr(''), \ 'lnum': 1, \ 'col': 1, \ 'type': 'E', \ 'linter_name': 'some_linter', \} call add(g:loclist, extend(l:item, a:data)) endfunction After: Restore unlet! g:loclist unlet! b:ale_loclist_msg_format delfunction AddItem call setloclist(0, []) call setqflist([]) Execute(Formatting with codes should work for the loclist): call AddItem({'text': "nocode\r"}) call ale#list#SetLists(bufnr(''), g:loclist) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 1, \ 'valid': 1, \ 'vcol': 0, \ 'nr': 0, \ 'type': 'E', \ 'pattern': '', \ 'text': 'nocode', \ }, \ ], \ ale#test#GetLoclistWithoutNewerKeys() call remove(g:loclist, 0) call AddItem({'text': 'withcode', 'code': 'E123'}) call ale#list#SetLists(bufnr(''), g:loclist) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 1, \ 'valid': 1, \ 'vcol': 0, \ 'nr': 0, \ 'type': 'E', \ 'pattern': '', \ 'text': 'E123: withcode', \ }, \ ], \ ale#test#GetLoclistWithoutNewerKeys() Execute(Formatting with codes should work for the quickfix list): let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1 call AddItem({'text': "nocode\r"}) call ale#list#SetLists(bufnr(''), g:loclist) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 1, \ 'valid': 1, \ 'vcol': 0, \ 'nr': 0, \ 'type': 'E', \ 'pattern': '', \ 'text': 'nocode', \ }, \ ], \ ale#test#GetQflistWithoutNewerKeys() call remove(g:loclist, 0) call AddItem({'text': 'withcode', 'code': 'E123'}) call ale#list#SetLists(bufnr(''), g:loclist) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 1, \ 'valid': 1, \ 'vcol': 0, \ 'nr': 0, \ 'type': 'E', \ 'pattern': '', \ 'text': 'E123: withcode', \ }, \ ], \ ale#test#GetQflistWithoutNewerKeys() Execute(Formatting with the linter name should work for the loclist): let g:ale_loclist_msg_format = '(%linter%) %s' call AddItem({'text': 'whatever'}) call ale#list#SetLists(bufnr(''), g:loclist) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 1, \ 'valid': 1, \ 'vcol': 0, \ 'nr': 0, \ 'type': 'E', \ 'pattern': '', \ 'text': '(some_linter) whatever', \ }, \ ], \ ale#test#GetLoclistWithoutNewerKeys() Execute(Formatting with the linter name should work for the quickfix list): let g:ale_loclist_msg_format = '(%linter%) %s' let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1 call AddItem({'text': 'whatever'}) call ale#list#SetLists(bufnr(''), g:loclist) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 1, \ 'valid': 1, \ 'vcol': 0, \ 'nr': 0, \ 'type': 'E', \ 'pattern': '', \ 'text': '(some_linter) whatever', \ }, \ ], \ ale#test#GetQflistWithoutNewerKeys() Execute(The buffer loclist format option should take precedence): let g:ale_loclist_msg_format = '(%linter%) %s' let b:ale_loclist_msg_format = 'FOO %s' call AddItem({'text': 'whatever'}) call ale#list#SetLists(bufnr(''), g:loclist) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 1, \ 'valid': 1, \ 'vcol': 0, \ 'nr': 0, \ 'type': 'E', \ 'pattern': '', \ 'text': 'FOO whatever', \ }, \ ], \ ale#test#GetLoclistWithoutNewerKeys()