Skip to content

Commit a1637c2

Browse files
authored
Merge pull request #20 from r-koubou/fix/invalid-response-when-shutdown-request-from-client
fix: return explicit null result for shutdown response
2 parents 7a916ea + a0c7bbd commit a1637c2

4 files changed

Lines changed: 21 additions & 1 deletion

File tree

LanguageServer.Framework/Protocol/JsonProtocolContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ namespace EmmyLua.LanguageServer.Framework.Protocol;
7777
[JsonSerializable(typeof(MethodMessage))]
7878
[JsonSerializable(typeof(RequestMessage))]
7979
[JsonSerializable(typeof(ResponseMessage))]
80+
[JsonSerializable(typeof(ShutdownResponseMessage))]
8081
[JsonSerializable(typeof(NotificationMessage))]
8182
[JsonSerializable(typeof(ResponseError))]
8283
[JsonSerializable(typeof(InitializeParams))]

LanguageServer.Framework/Protocol/JsonRpc/Message.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,19 @@ public record ResponseMessage(
7474
[JsonPropertyName("error")] public ResponseError? Error { get; } = Error;
7575
}
7676

77+
public record ShutdownResponseMessage(
78+
StringOrInt Id
79+
) : Message("2.0")
80+
{
81+
[JsonPropertyName("id")] public StringOrInt Id { get; } = Id;
82+
83+
[JsonPropertyName("result")]
84+
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
85+
public JsonDocument? Result { get; } = null;
86+
// - When responding to a "shutdown" message, the result must always be null.
87+
// - The JsonIgnoreCondition.Never attribute is explicitly set to serialize the JSON as null
88+
}
89+
7790
public record NotificationMessage(
7891
string Method,
7992
JsonDocument? Params

LanguageServer.Framework/Server/JsonProtocol/JsonProtocolWriter.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@ public void WriteResponse(StringOrInt id, JsonDocument? document, ResponseError?
3232
WriteMessage(response);
3333
}
3434

35+
public void WriteShutdownResponse(StringOrInt id)
36+
{
37+
var response = new ShutdownResponseMessage(id);
38+
WriteMessage(response);
39+
}
40+
3541
public void WriteNotification(NotificationMessage message)
3642
{
3743
WriteMessage(message);

LanguageServer.Framework/Server/LanguageServer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ protected override bool BaseHandle(Message message)
107107
}
108108

109109
ShutdownEventDelegate?.Invoke();
110-
Writer.WriteResponse(requestMessage.Id, null);
110+
Writer.WriteShutdownResponse(requestMessage.Id);
111111
return true;
112112
}
113113
}

0 commit comments

Comments
 (0)