Files
ale/test/lsp/test_read_lsp_diagnostics.vader
Benjamin Block 3d68ec7857
Some checks failed
CI / build_image (push) Has been cancelled
CI / test_ale (--linters-only) (push) Has been cancelled
CI / test_ale (--lua-only) (push) Has been cancelled
CI / test_ale (--neovim-07-only) (push) Has been cancelled
CI / test_ale (--neovim-08-only) (push) Has been cancelled
CI / test_ale (--vim-80-only) (push) Has been cancelled
CI / test_ale (--vim-90-only) (push) Has been cancelled
Only strip newlines for echo, otherwise full messages (#4964)
* Updates `ale#lsp#response#ReadDiagnostics` to always store the full, unaltered diagnostic message from the LSP in question. The current process is to replace all newline characters with whitespace (' '), which then leads to broken formatting when viewing complex output from an LSP with `:ALEDetail` and other commands.
* Updates `ale#cursor#TruncatedEcho` to replace newline characters with a space ' ' instead of an empty string '' to retain the previous style of formatting for echoed messages.

Fixes: #2356
Fixes: #3068
Fixes: #2301
2025-07-20 11:47:26 +01:00

258 lines
7.1 KiB
Plaintext

Before:
function Range(start_line, start_char, end_line, end_char) abort
return {
\ 'start': {'line': a:start_line, 'character': a:start_char},
\ 'end': {'line': a:end_line, 'character': a:end_char},
\}
endfunction
After:
delfunction Range
Execute(ale#lsp#response#ReadDiagnostics() should handle errors):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': 'Something went wrong!',
\ 'lnum': 3,
\ 'col': 11,
\ 'end_lnum': 5,
\ 'end_col': 15,
\ 'code': 'some-error',
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'severity': 1,
\ 'range': Range(2, 10, 4, 15),
\ 'code': 'some-error',
\ 'message': 'Something went wrong!',
\ },
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should handle warnings):
AssertEqual [
\ {
\ 'type': 'W',
\ 'text': 'Something went wrong!',
\ 'lnum': 2,
\ 'col': 4,
\ 'end_lnum': 2,
\ 'end_col': 3,
\ 'code': 'some-warning',
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'severity': 2,
\ 'range': Range(1, 3, 1, 3),
\ 'code': 'some-warning',
\ 'message': 'Something went wrong!',
\ },
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should treat messages with missing severity as errors):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': 'Something went wrong!',
\ 'lnum': 3,
\ 'col': 11,
\ 'end_lnum': 5,
\ 'end_col': 15,
\ 'code': 'some-error',
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'range': Range(2, 10, 4, 15),
\ 'code': 'some-error',
\ 'message': 'Something went wrong!',
\ },
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should handle messages without codes):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': 'Something went wrong!',
\ 'lnum': 3,
\ 'col': 11,
\ 'end_lnum': 5,
\ 'end_col': 15,
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'range': Range(2, 10, 4, 15),
\ 'message': 'Something went wrong!',
\ },
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should include sources in detail):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': 'Something went wrong!',
\ 'detail': '[tslint] Something went wrong!',
\ 'lnum': 10,
\ 'col': 15,
\ 'end_lnum': 12,
\ 'end_col': 22,
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'range': Range(9, 14, 11, 22),
\ 'message': 'Something went wrong!',
\ 'source': 'tslint',
\ }
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should keep line breaks in text):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': "cannot borrow `cap` as mutable\r\nmore than once at a time\n\nmutable borrow starts here\rin previous iteration of loop",
\ 'detail': "[rustc] cannot borrow `cap` as mutable\r\nmore than once at a time\n\nmutable borrow starts here\rin previous iteration of loop",
\ 'lnum': 10,
\ 'col': 15,
\ 'end_lnum': 12,
\ 'end_col': 22,
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'range': Range(9, 14, 11, 22),
\ 'message': "cannot borrow `cap` as mutable\r\nmore than once at a time\n\nmutable borrow starts here\rin previous iteration of loop",
\ 'source': 'rustc',
\ }
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should consider -1 to be a meaningless code):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': 'Something went wrong!',
\ 'lnum': 3,
\ 'col': 11,
\ 'end_lnum': 5,
\ 'end_col': 15,
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'range': Range(2, 10, 4, 15),
\ 'message': 'Something went wrong!',
\ 'code': -1,
\ },
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should handle multiple messages):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': 'Something went wrong!',
\ 'lnum': 1,
\ 'col': 3,
\ 'end_lnum': 1,
\ 'end_col': 2,
\ },
\ {
\ 'type': 'W',
\ 'text': 'A warning',
\ 'lnum': 2,
\ 'col': 5,
\ 'end_lnum': 2,
\ 'end_col': 4,
\ },
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'range': Range(0, 2, 0, 2),
\ 'message': 'Something went wrong!',
\ },
\ {
\ 'severity': 2,
\ 'range': Range(1, 4, 1, 4),
\ 'message': 'A warning',
\ },
\ ])
Execute(ale#lsp#response#ReadDiagnostics() should use relatedInformation for detail):
AssertEqual [
\ {
\ 'type': 'E',
\ 'text': 'Something went wrong!',
\ 'lnum': 1,
\ 'col': 3,
\ 'end_lnum': 1,
\ 'end_col': 2,
\ 'detail': "Something went wrong!\n/tmp/someotherfile.txt:43:80:\n\tmight be this"
\ }
\ ],
\ ale#lsp#response#ReadDiagnostics([
\ {
\ 'range': Range(0, 2, 0, 2),
\ 'message': 'Something went wrong!',
\ 'relatedInformation': [{
\ 'message': 'might be this',
\ 'location': {
\ 'uri': 'file:///tmp/someotherfile.txt',
\ 'range': {
\ 'start': { 'line': 42, 'character': 79 },
\ 'end': { 'line': 142, 'character': 179},
\ }
\ }
\ }]
\ }
\ ])
Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle tsserver responses):
AssertEqual
\ [
\ {
\ 'type': 'E',
\ 'nr': 2365,
\ 'code': '2365',
\ 'text': 'Operator ''''+'''' cannot be applied to types ''''3'''' and ''''{}''''.',
\ 'lnum': 1,
\ 'col': 11,
\ 'end_lnum': 1,
\ 'end_col': 16,
\ },
\ ],
\ ale#lsp#response#ReadTSServerDiagnostics({"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/bar/foo.ts","diagnostics":[{"start":{"line":1,"offset":11},"end":{"line":1,"offset":17},"text":"Operator ''+'' cannot be applied to types ''3'' and ''{}''.","code":2365}]}})
Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle warnings from tsserver):
AssertEqual
\ [
\ {
\ 'lnum': 27,
\ 'col': 3,
\ 'nr': 2515,
\ 'code': '2515',
\ 'end_lnum': 27,
\ 'type': 'W',
\ 'end_col': 13,
\ 'text': 'Calls to ''console.log'' are not allowed. (no-console)',
\ }
\ ],
\ ale#lsp#response#ReadTSServerDiagnostics({"seq":0,"type":"event","event":"semanticDiag","body":{"file":"<removed>","diagnostics":[{"start":{"line":27,"offset":3},"end":{"line":27,"offset":14},"text":"Calls to 'console.log' are not allowed. (no-console)","code":2515,"category":"warning","source":"tslint"}]}})
Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle suggestions from tsserver):
AssertEqual
\ [
\ {
\ 'lnum': 27,
\ 'col': 3,
\ 'nr': 2515,
\ 'code': '2515',
\ 'end_lnum': 27,
\ 'type': 'I',
\ 'end_col': 13,
\ 'text': 'Some info',
\ }
\ ],
\ ale#lsp#response#ReadTSServerDiagnostics({"seq":0,"type":"event","event":"semanticDiag","body":{"file":"<removed>","diagnostics":[{"start":{"line":27,"offset":3},"end":{"line":27,"offset":14},"text":"Some info","code":2515,"category":"suggestion","source":"tslint"}]}})