Before: Save g:ale_buffer_info call ale#test#SetDirectory('/testplugin/test') After: Restore call ale#test#RestoreDirectory() call ale#linter#Reset() Execute(tsserver syntax error responses should be handled correctly): runtime ale_linters/typescript/tsserver.vim call ale#test#SetFilename('filename.ts') call ale#engine#InitBufferInfo(bufnr('')) " When we get syntax errors and no semantic errors, we should keep the " syntax errors. call ale#engine#HandleLSPResponse(1, { \ 'seq': 0, \ 'type': 'event', \ 'event': 'syntaxDiag', \ 'body': { \ 'file': g:dir . '/filename.ts', \ 'diagnostics':[ \ { \ 'start': { \ 'line':2, \ 'offset':14, \ }, \ 'end': { \ 'line':2, \ 'offset':15, \ }, \ 'text': ''','' expected.', \ "code":1005 \ }, \ ], \ }, \}) call ale#engine#HandleLSPResponse(1, { \ 'seq': 0, \ 'type': 'event', \ 'event': 'semanticDiag', \ 'body': { \ 'file': g:dir . '/filename.ts', \ 'diagnostics':[ \ ], \ }, \}) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 14, \ 'vcol': 0, \ 'nr': 1005, \ 'type': 'E', \ 'text': ''','' expected.', \ 'valid': 1, \ 'pattern': '', \ }, \ ], \ getloclist(0) " After we get empty syntax errors, we should clear them. call ale#engine#HandleLSPResponse(1, { \ 'seq': 0, \ 'type': 'event', \ 'event': 'syntaxDiag', \ 'body': { \ 'file': g:dir . '/filename.ts', \ 'diagnostics':[ \ ], \ }, \}) AssertEqual \ [ \ ], \ getloclist(0) Execute(tsserver semantic error responses should be handled correctly): runtime ale_linters/typescript/tsserver.vim call ale#test#SetFilename('filename.ts') call ale#engine#InitBufferInfo(bufnr('')) " When we get syntax errors and no semantic errors, we should keep the " syntax errors. call ale#engine#HandleLSPResponse(1, { \ 'seq': 0, \ 'type': 'event', \ 'event': 'syntaxDiag', \ 'body': { \ 'file': g:dir . '/filename.ts', \ 'diagnostics':[ \ ], \ }, \}) call ale#engine#HandleLSPResponse(1, { \ 'seq': 0, \ 'type': 'event', \ 'event': 'semanticDiag', \ 'body': { \ 'file': g:dir . '/filename.ts', \ 'diagnostics':[ \ { \ 'start': { \ 'line':2, \ 'offset':14, \ }, \ 'end': { \ 'line':2, \ 'offset':15, \ }, \ 'text': 'Some semantic error', \ "code":1005 \ }, \ ], \ }, \}) AssertEqual \ [ \ { \ 'lnum': 1, \ 'bufnr': bufnr(''), \ 'col': 14, \ 'vcol': 0, \ 'nr': 1005, \ 'type': 'E', \ 'text': 'Some semantic error', \ 'valid': 1, \ 'pattern': '', \ }, \ ], \ getloclist(0) " After we get empty syntax errors, we should clear them. call ale#engine#HandleLSPResponse(1, { \ 'seq': 0, \ 'type': 'event', \ 'event': 'semanticDiag', \ 'body': { \ 'file': g:dir . '/filename.ts', \ 'diagnostics':[ \ ], \ }, \}) AssertEqual \ [ \ ], \ getloclist(0)