Before: let b:tmp = has('win32') ? substitute($TMP, '\\', '\\\\', 'g') : $TMPDIR runtime ale_linters/elm/make.vim After: unlet! b:tmp unlet! g:config_error_lines call ale#linter#Reset() Execute(The elm make handler should parse general problems correctly): AssertEqual \ [ \ { \ 'lnum': 1, \ 'type': 'E', \ 'text': 'UNKNOWN IMPORT', \ 'detail': "error details 1\n\nstyled details" \ } \ ], \ ale_linters#elm#make#Handle(347, [ \ '{ \ "type": "error", \ "path": "' . b:tmp . '/Module.elm", \ "title": "UNKNOWN IMPORT", \ "message": ["error details 1\n\n", { "string": "styled details" }] \ }' \ ]) Execute(The elm make handler should parse compilation errors correctly): AssertEqual \ [ \ { \ 'lnum': 404, \ 'col': 1, \ 'end_lnum': 408, \ 'end_col': 18, \ 'type': 'E', \ 'text': 'TYPE MISMATCH', \ 'detail': "error details 1\n\nstyled details" \ }, \ { \ 'lnum': 406, \ 'col': 5, \ 'end_lnum': 407, \ 'end_col': 17, \ 'type': 'E', \ 'text': 'TYPE MISMATCH', \ 'detail': "error details 2", \ }, \ { \ 'lnum': 406, \ 'col': 5, \ 'end_lnum': 406, \ 'end_col': 93, \ 'type': 'E', \ 'text': 'TYPE MISMATCH', \ 'detail': "error details 3", \ }, \ ], \ ale_linters#elm#make#Handle(347, [ \ '{ \ "type": "compile-errors", \ "errors": [ \ { \ "path": "' . b:tmp . '/Module.elm", \ "problems": [ \ { \ "title": "TYPE MISMATCH", \ "message": ["error details 1\n\n", { "string": "styled details" }], \ "region": { "start": { "line": 404, "column": 1 }, "end": { "line": 408, "column": 18 } } \ }, \ { \ "title": "TYPE MISMATCH", \ "message": ["error details 2"], \ "region": { "start": {"line": 406, "column": 5}, "end": {"line": 407, "column": 17 } } \ }, \ { \ "title": "TYPE MISMATCH", \ "message": ["error details 3"], \ "region": { "start": { "line": 406, "column": 5}, "end": {"line": 406, "column": 93 } } \ } \ ] \ } \ ] \ }' \ ]) Execute(The elm make handler should put an error on the first line for compilation errors in imported modules): AssertEqual \ [ \ { \ 'lnum': 1, \ 'type': 'E', \ 'text': 'src/Module.elm:404 - TYPE MISMATCH', \ 'detail': "src/Module.elm:404 -------\n\nerror details\n\nstyled details" \ }, \ ], \ ale_linters#elm#make#Handle(347, [ \ '{ \ "type": "compile-errors", \ "errors": [ \ { \ "path": "src/Module.elm", \ "problems": [ \ { \ "title": "TYPE MISMATCH", \ "message": ["error details\n\n", { "string": "styled details" }], \ "region": { "start": { "line": 404, "column": 1 }, "end": { "line": 408, "column": 18 } } \ } \ ] \ } \ ] \ }' \ ]) Execute(The elm make handler should put an error on the first line if a line cannot be parsed): AssertEqual \ [ \ { \ 'lnum': 404, \ 'col': 1, \ 'end_lnum': 408, \ 'end_col': 18, \ 'type': 'E', \ 'text': 'TYPE MISMATCH', \ 'detail': "error details 1 styled details" \ }, \ { \ 'lnum': 1, \ 'type': 'E', \ 'text': 'Not JSON', \ 'detail': "Not JSON\nAlso not JSON", \ }, \ ], \ ale_linters#elm#make#Handle(347, [ \ '{ \ "type": "compile-errors", \ "errors": [ \ { \ "path": "' . b:tmp . '/Module.elm", \ "problems": [ \ { \ "title": "TYPE MISMATCH", \ "message": ["error details 1 ", { "string": "styled details" }], \ "region": { "start": { "line": 404, "column": 1 }, "end": { "line": 408, "column": 18 } } \ } \ ] \ } \ ] \ }', \ "Not JSON", \ "Also not JSON", \ ])