Skip to content

Commit 77ea777

Browse files
authored
Expose currently-silent failure in language server (#4879)
Not sure if I mixed up a merge somewhere, but this is what `parse_error.carbon` was supposed to test. Note `unexpected_reply.carbon` was basically doing the same test, with a minor issue of `change` vs `result` to get better output.
1 parent 65180a7 commit 77ea777

File tree

4 files changed

+12
-11
lines changed

4 files changed

+12
-11
lines changed

toolchain/diagnostics/diagnostic_kind.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ CARBON_DIAGNOSTIC_KIND(CompileInputNotRegularFile)
2929
CARBON_DIAGNOSTIC_KIND(CompileOutputFileOpenError)
3030
CARBON_DIAGNOSTIC_KIND(FormatMultipleFilesToOneOutput)
3131
CARBON_DIAGNOSTIC_KIND(LanguageServerMissingInputStream)
32+
CARBON_DIAGNOSTIC_KIND(LanguageServerNotificationParseError)
3233
CARBON_DIAGNOSTIC_KIND(LanguageServerTransportError)
3334
CARBON_DIAGNOSTIC_KIND(LanguageServerUnexpectedReply)
3435
CARBON_DIAGNOSTIC_KIND(LanguageServerUnsupportedNotification)

toolchain/language_server/incoming_messages.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,11 @@ auto IncomingMessages::AddNotificationHandler(llvm::StringRef name,
5757
[name, handler](Context& context, llvm::json::Value raw_params) -> void {
5858
auto params = Parse<ParamsT>(name, raw_params);
5959
if (!params) {
60-
// TODO: Maybe we should do something more with this error?
61-
llvm::consumeError(params.takeError());
60+
CARBON_DIAGNOSTIC(LanguageServerNotificationParseError, Warning, "{0}",
61+
std::string);
62+
context.no_loc_emitter().Emit(LanguageServerNotificationParseError,
63+
llvm::toString(params.takeError()));
64+
return;
6265
}
6366
handler(context, *params);
6467
};

toolchain/language_server/testdata/parse_error.carbon renamed to toolchain/language_server/testdata/notify_parse_error.carbon

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,17 @@
44
//
55
// AUTOUPDATE
66
// TIP: To test this file alone, run:
7-
// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/language_server/testdata/parse_error.carbon
7+
// TIP: bazel test //toolchain/testing:file_test --test_arg=--file_tests=toolchain/language_server/testdata/notify_parse_error.carbon
88
// TIP: To dump output, run:
9-
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/language_server/testdata/parse_error.carbon
9+
// TIP: bazel run //toolchain/testing:file_test -- --dump_output --file_tests=toolchain/language_server/testdata/notify_parse_error.carbon
1010

1111

1212
// --- STDIN
13-
[[@LSP-REPLY:1]]
14-
[[@LSP-REPLY:2:"result": 3]]
13+
[[@LSP-NOTIFY:textDocument/didOpen:"nope": "bad"]]
1514
[[@LSP-NOTIFY:exit]]
1615

1716
// --- AUTOUPDATE-SPLIT
1817

19-
// CHECK:STDERR: warning: unexpected reply to request ID "1": null [LanguageServerUnexpectedReply]
20-
// CHECK:STDERR:
21-
// CHECK:STDERR: warning: unexpected reply to request ID "2": 3 [LanguageServerUnexpectedReply]
18+
// CHECK:STDERR: warning: -32602: in call to `textDocument/didOpen`, JSON parse failed: expected object [LanguageServerNotificationParseError]
2219
// CHECK:STDERR:
2320
// CHECK:STDOUT:

toolchain/language_server/testdata/unexpected_reply.carbon

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@
1111

1212
// --- STDIN
1313
[[@LSP-REPLY:1]]
14-
[[@LSP-REPLY:2:"value": 3]]
14+
[[@LSP-REPLY:2:"result": 3]]
1515
[[@LSP-NOTIFY:exit]]
1616

1717
// --- AUTOUPDATE-SPLIT
1818

1919
// CHECK:STDERR: warning: unexpected reply to request ID "1": null [LanguageServerUnexpectedReply]
2020
// CHECK:STDERR:
21-
// CHECK:STDERR: warning: unexpected reply to request ID "2": null [LanguageServerUnexpectedReply]
21+
// CHECK:STDERR: warning: unexpected reply to request ID "2": 3 [LanguageServerUnexpectedReply]
2222
// CHECK:STDERR:
2323
// CHECK:STDOUT:

0 commit comments

Comments
 (0)