Skip to content

Commit bf9a3d8

Browse files
committed
add more lsp protocol
1 parent 01776cb commit bf9a3d8

File tree

9 files changed

+346
-0
lines changed

9 files changed

+346
-0
lines changed

LanguageServer.Framework/Protocol/JsonProtocolContext.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,11 @@
66
using EmmyLua.LanguageServer.Framework.Protocol.Message;
77
using EmmyLua.LanguageServer.Framework.Protocol.Message.CallHierarchy;
88
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.ApplyWorkspaceEdit;
9+
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.LogMessage;
910
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.PublishDiagnostics;
1011
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.Registration;
1112
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.ShowMessage;
13+
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.Telemetry;
1214
using EmmyLua.LanguageServer.Framework.Protocol.Message.CodeAction;
1315
using EmmyLua.LanguageServer.Framework.Protocol.Message.CodeLens;
1416
using EmmyLua.LanguageServer.Framework.Protocol.Message.Completion;
@@ -31,6 +33,7 @@
3133
using EmmyLua.LanguageServer.Framework.Protocol.Message.InlineValue;
3234
using EmmyLua.LanguageServer.Framework.Protocol.Message.LinkedEditingRange;
3335
using EmmyLua.LanguageServer.Framework.Protocol.Message.NotebookDocument;
36+
using EmmyLua.LanguageServer.Framework.Protocol.Message.Progress;
3437
using EmmyLua.LanguageServer.Framework.Protocol.Message.Reference;
3538
using EmmyLua.LanguageServer.Framework.Protocol.Message.Rename;
3639
using EmmyLua.LanguageServer.Framework.Protocol.Message.SelectionRange;
@@ -225,7 +228,15 @@ namespace EmmyLua.LanguageServer.Framework.Protocol;
225228
[JsonSerializable(typeof(ApplyWorkspaceEditParams))]
226229
[JsonSerializable(typeof(ApplyWorkspaceEditResult))]
227230
[JsonSerializable(typeof(ShowMessageParams))]
231+
[JsonSerializable(typeof(ShowMessageRequestParams))]
232+
[JsonSerializable(typeof(MessageActionItem))]
233+
[JsonSerializable(typeof(List<MessageActionItem>))]
234+
[JsonSerializable(typeof(LogMessageParams))]
235+
[JsonSerializable(typeof(TelemetryEventParams))]
228236
[JsonSerializable(typeof(MessageType))]
237+
[JsonSerializable(typeof(ProgressParams))]
238+
[JsonSerializable(typeof(WorkDoneProgressCreateParams))]
239+
[JsonSerializable(typeof(WorkDoneProgressCancelParams))]
229240
[JsonSerializable(typeof(SelectionRangeParams))]
230241
[JsonSerializable(typeof(SelectionRangeResponse))]
231242
[JsonSerializable(typeof(SelectionRange))]
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Text.Json.Serialization;
2+
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.ShowMessage;
3+
4+
namespace EmmyLua.LanguageServer.Framework.Protocol.Message.Client.LogMessage;
5+
6+
/// <summary>
7+
/// The log message parameters.
8+
/// </summary>
9+
public class LogMessageParams
10+
{
11+
/// <summary>
12+
/// The message type. See {@link MessageType}
13+
/// </summary>
14+
[JsonPropertyName("type")]
15+
public MessageType Type { get; set; }
16+
17+
/// <summary>
18+
/// The actual message.
19+
/// </summary>
20+
[JsonPropertyName("message")]
21+
public string Message { get; set; } = null!;
22+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace EmmyLua.LanguageServer.Framework.Protocol.Message.Client.ShowMessage;
4+
5+
/// <summary>
6+
/// Show message request client capabilities.
7+
/// </summary>
8+
public class ShowMessageRequestClientCapabilities
9+
{
10+
/// <summary>
11+
/// Capabilities specific to the `MessageActionItem` type.
12+
/// </summary>
13+
[JsonPropertyName("messageActionItem")]
14+
public MessageActionItemCapabilities? MessageActionItem { get; set; }
15+
}
16+
17+
/// <summary>
18+
/// Capabilities specific to the `MessageActionItem` type.
19+
/// </summary>
20+
public class MessageActionItemCapabilities
21+
{
22+
/// <summary>
23+
/// Whether the client supports additional attributes which
24+
/// are preserved and sent back to the server in the
25+
/// request's response.
26+
/// </summary>
27+
[JsonPropertyName("additionalPropertiesSupport")]
28+
public bool? AdditionalPropertiesSupport { get; set; }
29+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace EmmyLua.LanguageServer.Framework.Protocol.Message.Client.ShowMessage;
4+
5+
/// <summary>
6+
/// Show message request parameters.
7+
/// </summary>
8+
public class ShowMessageRequestParams
9+
{
10+
/// <summary>
11+
/// The message type. See {@link MessageType}
12+
/// </summary>
13+
[JsonPropertyName("type")]
14+
public MessageType Type { get; set; }
15+
16+
/// <summary>
17+
/// The actual message.
18+
/// </summary>
19+
[JsonPropertyName("message")]
20+
public string Message { get; set; } = null!;
21+
22+
/// <summary>
23+
/// The message action items to present.
24+
/// </summary>
25+
[JsonPropertyName("actions")]
26+
public List<MessageActionItem>? Actions { get; set; }
27+
}
28+
29+
/// <summary>
30+
/// A message action item.
31+
/// </summary>
32+
public class MessageActionItem
33+
{
34+
/// <summary>
35+
/// A short title like 'Retry', 'Open Log' etc.
36+
/// </summary>
37+
[JsonPropertyName("title")]
38+
public string Title { get; set; } = null!;
39+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Text.Json.Serialization;
2+
3+
namespace EmmyLua.LanguageServer.Framework.Protocol.Message.Client.Telemetry;
4+
5+
/// <summary>
6+
/// The telemetry event parameters.
7+
/// </summary>
8+
public class TelemetryEventParams
9+
{
10+
/// <summary>
11+
/// The telemetry data.
12+
/// </summary>
13+
[JsonPropertyName("data")]
14+
public object? Data { get; set; }
15+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Text.Json.Serialization;
2+
using EmmyLua.LanguageServer.Framework.Protocol.Model.Union;
3+
4+
namespace EmmyLua.LanguageServer.Framework.Protocol.Message.Progress;
5+
6+
/// <summary>
7+
/// Work done progress cancel parameters.
8+
/// </summary>
9+
public class WorkDoneProgressCancelParams
10+
{
11+
/// <summary>
12+
/// The token to be used to cancel the progress.
13+
/// </summary>
14+
[JsonPropertyName("token")]
15+
public required StringOrInt Token { get; set; }
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System.Text.Json.Serialization;
2+
using EmmyLua.LanguageServer.Framework.Protocol.Model.Union;
3+
4+
namespace EmmyLua.LanguageServer.Framework.Protocol.Message.Progress;
5+
6+
/// <summary>
7+
/// Work done progress create parameters.
8+
/// </summary>
9+
public class WorkDoneProgressCreateParams
10+
{
11+
/// <summary>
12+
/// The token to be used to report progress.
13+
/// </summary>
14+
[JsonPropertyName("token")]
15+
public required StringOrInt Token { get; set; }
16+
}

LanguageServer.Framework/Server/ClientProxy.cs

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
using System.Text.Json;
22
using EmmyLua.LanguageServer.Framework.Protocol.JsonRpc;
33
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.ApplyWorkspaceEdit;
4+
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.LogMessage;
45
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.PublishDiagnostics;
56
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.Registration;
67
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.ShowMessage;
8+
using EmmyLua.LanguageServer.Framework.Protocol.Message.Client.Telemetry;
79
using EmmyLua.LanguageServer.Framework.Protocol.Message.Configuration;
10+
using EmmyLua.LanguageServer.Framework.Protocol.Message.Progress;
811
using EmmyLua.LanguageServer.Framework.Protocol.Model;
12+
using EmmyLua.LanguageServer.Framework.Protocol.Model.Union;
13+
using EmmyLua.LanguageServer.Framework.Protocol.Model.WorkDoneProgress;
914

1015
namespace EmmyLua.LanguageServer.Framework.Server;
1116

@@ -46,6 +51,38 @@ public Task ShowMessage(ShowMessageParams @params)
4651
return server.SendNotification(notification);
4752
}
4853

54+
public async Task<MessageActionItem?> ShowMessageRequest(ShowMessageRequestParams @params, CancellationToken token)
55+
{
56+
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
57+
var response = await server.SendRequest("window/showMessageRequest", document, token);
58+
return response?.Deserialize<MessageActionItem>(server.JsonSerializerOptions);
59+
}
60+
61+
public Task LogMessage(LogMessageParams @params)
62+
{
63+
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
64+
var notification = new NotificationMessage("window/logMessage", document);
65+
return server.SendNotification(notification);
66+
}
67+
68+
public Task LogMessage(MessageType type, string message)
69+
{
70+
return LogMessage(new LogMessageParams { Type = type, Message = message });
71+
}
72+
73+
public Task LogError(string message) => LogMessage(MessageType.Error, message);
74+
public Task LogWarning(string message) => LogMessage(MessageType.Warning, message);
75+
public Task LogInfo(string message) => LogMessage(MessageType.Info, message);
76+
public Task LogDebug(string message) => LogMessage(MessageType.Debug, message);
77+
78+
public Task TelemetryEvent(object? data)
79+
{
80+
var @params = new TelemetryEventParams { Data = data };
81+
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
82+
var notification = new NotificationMessage("telemetry/event", document);
83+
return server.SendNotification(notification);
84+
}
85+
4986
public Task PublishDiagnostics(PublishDiagnosticsParams @params)
5087
{
5188
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
@@ -78,4 +115,62 @@ public async Task RefreshDiagnostics()
78115
var response = server.SendRequest(method, document, token);
79116
return await response;
80117
}
118+
119+
// Work Done Progress Support
120+
121+
/// <summary>
122+
/// Create a work done progress token and request the client to show progress UI.
123+
/// </summary>
124+
public async Task<StringOrInt> CreateWorkDoneProgress(StringOrInt token, CancellationToken cancellationToken = default)
125+
{
126+
var @params = new WorkDoneProgressCreateParams { Token = token };
127+
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
128+
await server.SendRequest("window/workDoneProgress/create", document, cancellationToken);
129+
return token;
130+
}
131+
132+
/// <summary>
133+
/// Report progress begin.
134+
/// </summary>
135+
public Task ReportProgress(StringOrInt token, WorkDoneProgressBegin value)
136+
{
137+
var @params = new ProgressParams
138+
{
139+
Token = token.StringValue ?? token.IntValue.ToString(),
140+
Value = value
141+
};
142+
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
143+
var notification = new NotificationMessage("$/progress", document);
144+
return server.SendNotification(notification);
145+
}
146+
147+
/// <summary>
148+
/// Report progress update.
149+
/// </summary>
150+
public Task ReportProgress(StringOrInt token, WorkDoneProgressReport value)
151+
{
152+
var @params = new ProgressParams
153+
{
154+
Token = token.StringValue ?? token.IntValue.ToString(),
155+
Value = value
156+
};
157+
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
158+
var notification = new NotificationMessage("$/progress", document);
159+
return server.SendNotification(notification);
160+
}
161+
162+
/// <summary>
163+
/// Report progress end.
164+
/// </summary>
165+
public Task ReportProgress(StringOrInt token, WorkDoneProgressEnd value)
166+
{
167+
var @params = new ProgressParams
168+
{
169+
Token = token.StringValue ?? token.IntValue.ToString(),
170+
Value = value
171+
};
172+
var document = JsonSerializer.SerializeToDocument(@params, server.JsonSerializerOptions);
173+
var notification = new NotificationMessage("$/progress", document);
174+
return server.SendNotification(notification);
175+
}
81176
}

0 commit comments

Comments
 (0)