Skip to content

Commit 38a3f58

Browse files
fix(grainlsp): Send empty response if file cannot be formatted (#1386)
1 parent 91d5cdf commit 38a3f58

File tree

3 files changed

+25
-9
lines changed

3 files changed

+25
-9
lines changed

compiler/src/language_server/formatting.re

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,15 +91,9 @@ let process =
9191
)
9292
}
9393
| Error(ParseError(_)) =>
94-
Protocol.error(
95-
~id,
96-
{
97-
code: RequestFailed,
98-
message:
99-
"Unable to parse the document: "
100-
++ Protocol.uri_to_filename(params.text_document.uri),
101-
},
102-
)
94+
// If we can't parse the file we can't format it
95+
// return null to signal a response
96+
Protocol.empty_response(id)
10397
| Error(InvalidCompilationState) =>
10498
Protocol.error(
10599
~id,

compiler/src/language_server/protocol.re

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,26 @@ let response = (~id=?, result) => {
221221
flush(stdout);
222222
};
223223

224+
let empty_response = id => {
225+
let response_message = {
226+
jsonrpc: version,
227+
id: Some(id),
228+
result: None,
229+
error: None,
230+
};
231+
let content =
232+
Yojson.Safe.to_string(
233+
~std=true,
234+
response_message_to_yojson(response_message),
235+
);
236+
let length = String.length(content);
237+
238+
let len = string_of_int(length);
239+
let msg = header_prefix ++ len ++ sep ++ content;
240+
output_string(stdout, msg);
241+
flush(stdout);
242+
};
243+
224244
let error = (~id=?, error) => {
225245
let response_message = {
226246
jsonrpc: version,

compiler/src/language_server/protocol.rei

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ let request: unit => result(request_message, string);
131131

132132
let response: (~id: message_id=?, Yojson.Safe.t) => unit;
133133

134+
let empty_response: message_id => unit;
135+
134136
let error: (~id: message_id=?, response_error) => unit;
135137

136138
let notification: (~method: string, Yojson.Safe.t) => unit;

0 commit comments

Comments
 (0)