Skip to content

Commit 3c64096

Browse files
authored
Merge pull request #1025 from OmniSharp/fix-options-capabilities
Fix RegistrationOptions and Capabilities
2 parents 381075f + 0cba5ef commit 3c64096

31 files changed

+112
-67
lines changed

src/Protocol/Client/Capabilities/ITextDocumentClientCapabilities.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -159,20 +159,20 @@ public interface ITextDocumentClientCapabilities : ICapabilitiesBase
159159
///
160160
/// @since 3.17.0
161161
/// </summary>
162-
Supports<InlineValueWorkspaceClientCapabilities?> InlineValue { get; set; }
162+
Supports<InlineValueClientCapabilities?> InlineValue { get; set; }
163163

164164
/// <summary>
165165
/// Capability specific to the `textDocument/inlayHint` request.
166166
///
167167
/// @since 3.17.0
168168
/// </summary>
169-
Supports<InlayHintWorkspaceClientCapabilities?> InlayHint { get; set; }
169+
Supports<InlayHintClientCapabilities?> InlayHint { get; set; }
170170

171171
/// <summary>
172172
/// Capability specific to the diagnostic pull model.
173173
///
174174
/// @since 3.17.0
175175
/// </summary>
176-
Supports<DiagnosticWorkspaceClientCapabilities?> Diagnostic { get; set; }
176+
Supports<DiagnosticClientCapabilities?> Diagnostic { get; set; }
177177
}
178178
}

src/Protocol/Client/Capabilities/TextDocumentClientCapabilities.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -159,20 +159,20 @@ public class TextDocumentClientCapabilities : CapabilitiesBase, ITextDocumentCli
159159
///
160160
/// @since 3.17.0
161161
/// </summary>
162-
public Supports<InlineValueWorkspaceClientCapabilities?> InlineValue { get; set; }
162+
public Supports<InlineValueClientCapabilities?> InlineValue { get; set; }
163163

164164
/// <summary>
165165
/// Capability specific to the `textDocument/inlayHint` request.
166166
///
167167
/// @since 3.17.0
168168
/// </summary>
169-
public Supports<InlayHintWorkspaceClientCapabilities?> InlayHint { get; set; }
169+
public Supports<InlayHintClientCapabilities?> InlayHint { get; set; }
170170

171171
/// <summary>
172172
/// Capability specific to the diagnostic pull model.
173173
///
174174
/// @since 3.17.0
175175
/// </summary>
176-
public Supports<DiagnosticWorkspaceClientCapabilities?> Diagnostic { get; set; }
176+
public Supports<DiagnosticClientCapabilities?> Diagnostic { get; set; }
177177
}
178178
}

src/Protocol/Client/Capabilities/WorkspaceEditCapability.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities
55
{
6-
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(WorkspaceClientCapabilities.WorkspaceEdit))]
6+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.WorkspaceEdit))]
77
public class WorkspaceEditCapability : ICapability
88
{
99
/// <summary>

src/Protocol/Features/Document/CompletionFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ public override void WriteJson(JsonWriter writer, CompletionList? value, JsonSer
509509
var items = result["items"].ToObject<IEnumerable<CompletionItem>>(serializer);
510510
return new CompletionList(items, result["isIncomplete"]?.Value<bool>() ?? false)
511511
{
512-
ItemDefaults = result["itemDefaults"]?.ToObject<CompletionListItemDefaults>()
512+
ItemDefaults = result["itemDefaults"]?.ToObject<CompletionListItemDefaults>(serializer)
513513
};
514514
}
515515

src/Protocol/Features/Document/DiagnosticsFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ internal WorkspaceDiagnosticReportPartialResult(WorkspaceDiagnosticReport partia
467467

468468
[GenerateRegistrationOptions(nameof(ServerCapabilities.DiagnosticProvider))]
469469
[RegistrationName(TextDocumentNames.Diagnostics)]
470-
public partial class DiagnosticsRegistrationOptions : ITextDocumentRegistrationOptions, IWorkDoneProgressOptions
470+
public partial class DiagnosticsRegistrationOptions : ITextDocumentRegistrationOptions, IWorkDoneProgressOptions, IStaticRegistrationOptions
471471
{
472472
/// <summary>
473473
/// An optional identifier under which the diagnostics are

src/Protocol/Features/Document/InlayHintFeature.cs

+35-5
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
1313
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization;
1414
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;
15+
using OmniSharp.Extensions.LanguageServer.Protocol.Server;
1516
using OmniSharp.Extensions.LanguageServer.Protocol.Server.Capabilities;
1617

1718
// ReSharper disable once CheckNamespace
@@ -26,7 +27,7 @@ namespace Models
2627
GenerateHandlerMethods,
2728
GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))
2829
]
29-
[RegistrationOptions(typeof(InlayHintRegistrationOptions)), Capability(typeof(InlayHintWorkspaceClientCapabilities))]
30+
[RegistrationOptions(typeof(InlayHintRegistrationOptions)), Capability(typeof(InlayHintClientCapabilities))]
3031
[Resolver(typeof(InlayHint))]
3132
public partial record InlayHintParams : ITextDocumentIdentifierParams, IWorkDoneProgressParams,
3233
IRequest<InlayHintContainer?>
@@ -55,7 +56,7 @@ public partial record InlayHintParams : ITextDocumentIdentifierParams, IWorkDone
5556
[GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))]
5657
[GenerateTypedData]
5758
[GenerateContainer]
58-
[Capability(typeof(InlayHintWorkspaceClientCapabilities))]
59+
[Capability(typeof(InlayHintClientCapabilities))]
5960
public partial record InlayHint : ICanBeResolved, IRequest<InlayHint>, IDoesNotParticipateInRegistration
6061
{
6162
/// <summary>
@@ -231,7 +232,7 @@ public override StringOrInlayHintLabelParts ReadJson(
231232
if (reader.TokenType == JsonToken.StartArray)
232233
{
233234
var result = JArray.Load(reader);
234-
return new StringOrInlayHintLabelParts(result.ToObject<Container<InlayHintLabelPart>>());
235+
return new StringOrInlayHintLabelParts(result.ToObject<Container<InlayHintLabelPart>>(serializer));
235236
}
236237

237238
if (reader.TokenType == JsonToken.String)
@@ -265,10 +266,18 @@ public enum InlayHintKind
265266
Parameter = 2
266267
}
267268

269+
[Parallel]
270+
[Method(WorkspaceNames.InlayHintRefresh, Direction.ServerToClient)]
271+
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
272+
[GenerateHandlerMethods]
273+
[GenerateRequestMethods(typeof(IWorkspaceLanguageServer), typeof(ILanguageServer))]
274+
[Capability(typeof(InlayHintWorkspaceClientCapabilities))]
275+
public partial record InlayHintRefreshParams : IRequest;
276+
268277
[GenerateRegistrationOptions(nameof(ServerCapabilities.InlayHintProvider))]
269278
[RegistrationOptionsConverter(typeof(InlayHintRegistrationOptionsConverter))]
270279
[RegistrationName(TextDocumentNames.InlayHint)]
271-
public partial class InlayHintRegistrationOptions : ITextDocumentRegistrationOptions, IWorkDoneProgressOptions
280+
public partial class InlayHintRegistrationOptions : ITextDocumentRegistrationOptions, IWorkDoneProgressOptions, IStaticRegistrationOptions
272281
{
273282
/// <summary>
274283
/// The server provides support to resolve additional
@@ -301,7 +310,7 @@ public override StaticOptions Convert(InlayHintRegistrationOptions source)
301310
namespace Client.Capabilities
302311
{
303312
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(TextDocumentClientCapabilities.InlayHint))]
304-
public partial class InlayHintWorkspaceClientCapabilities : DynamicCapability
313+
public partial class InlayHintClientCapabilities : DynamicCapability
305314
{
306315
/// <summary>
307316
/// Indicates which properties a client can resolve lazily on a inlay
@@ -322,6 +331,27 @@ public class InlayHintCapabilityResolveSupport
322331
/// </summary>
323332
public Container<string> Properties { get; set; }
324333
}
334+
335+
/// <summary>
336+
/// Client workspace capabilities specific to inlay hints.
337+
///
338+
/// @since 3.17.0.
339+
/// </summary>
340+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.SemanticTokens))]
341+
public class InlayHintWorkspaceClientCapabilities : ICapability
342+
{
343+
/// <summary>
344+
/// Whether the client implementation supports a refresh request sent from
345+
/// the server to the client.
346+
///
347+
/// Note that this event is global and will force the client to refresh all
348+
/// inlay hints currently shown. It should be used with absolute care and
349+
/// is useful for situation where a server for example detects a project wide
350+
/// change that requires such a calculation.
351+
/// </summary>
352+
[Optional]
353+
public bool RefreshSupport { get; set; }
354+
}
325355
}
326356

327357
namespace Document

src/Protocol/Features/Document/InlineValueFeature.cs

+12-7
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace Models
2525
GenerateHandlerMethods,
2626
GenerateRequestMethods(typeof(ITextDocumentLanguageClient), typeof(ILanguageClient))
2727
]
28-
[RegistrationOptions(typeof(InlineValueRegistrationOptions)), Capability(typeof(InlineValueWorkspaceClientCapabilities))]
28+
[RegistrationOptions(typeof(InlineValueRegistrationOptions)), Capability(typeof(InlineValueClientCapabilities))]
2929
public partial record InlineValueParams : ITextDocumentIdentifierParams, IWorkDoneProgressParams,
3030
IRequest<Container<InlineValueBase>?>
3131
{
@@ -69,7 +69,7 @@ public partial record InlineValueContext
6969
[GenerateHandler("OmniSharp.Extensions.LanguageServer.Protocol.Workspace")]
7070
[GenerateHandlerMethods]
7171
[GenerateRequestMethods(typeof(IWorkspaceLanguageServer), typeof(ILanguageServer))]
72-
[Capability(typeof(CodeLensWorkspaceClientCapabilities))]
72+
[Capability(typeof(InlineValueWorkspaceClientCapabilities))]
7373
public partial record InlineValueRefreshParams : IRequest;
7474

7575
[JsonConverter(typeof(Converter))]
@@ -98,7 +98,7 @@ public override InlineValueBase ReadJson(
9898
{
9999
return new InlineValueText()
100100
{
101-
Range = result["range"]!.ToObject<Range?>()!,
101+
Range = result["range"]!.ToObject<Range?>(serializer)!,
102102
Text = result["text"]!.Value<string>()!
103103
};
104104
}
@@ -107,15 +107,15 @@ public override InlineValueBase ReadJson(
107107
{
108108
return new InlineValueVariableLookup()
109109
{
110-
Range = result["range"].ToObject<Range>()!,
110+
Range = result["range"].ToObject<Range>(serializer)!,
111111
VariableName = result["variableName"]!.Value<string>()!,
112112
CaseSensitiveLookup = result["caseSensitiveLookup"]?.Value<bool?>() ?? false,
113113
};
114114
}
115115

116116
return new InlineValueEvaluatableExpression()
117117
{
118-
Range = result["range"].ToObject<Range>()!,
118+
Range = result["range"].ToObject<Range>(serializer)!,
119119
Expression = result["expression"]?.Value<string>()
120120
};
121121
}
@@ -179,7 +179,7 @@ public partial record InlineValueEvaluatableExpression : InlineValueBase
179179

180180
[GenerateRegistrationOptions(nameof(ServerCapabilities.InlineValueProvider))]
181181
[RegistrationName(TextDocumentNames.InlineValue)]
182-
public partial class InlineValueRegistrationOptions : ITextDocumentRegistrationOptions, IWorkDoneProgressOptions
182+
public partial class InlineValueRegistrationOptions : ITextDocumentRegistrationOptions, IWorkDoneProgressOptions, IStaticRegistrationOptions
183183
{
184184
}
185185
}
@@ -190,12 +190,17 @@ namespace Server.Capabilities
190190

191191
namespace Client.Capabilities
192192
{
193+
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(TextDocumentClientCapabilities.InlineValue))]
194+
public partial class InlineValueClientCapabilities : DynamicCapability
195+
{
196+
}
197+
193198
/// <summary>
194199
/// Client workspace capabilities specific to inline values.
195200
///
196201
/// @since 3.17.0
197202
/// </summary>
198-
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(TextDocumentClientCapabilities.InlineValue))]
203+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.InlineValue))]
199204
public partial class InlineValueWorkspaceClientCapabilities : ICapability
200205
{
201206
/// <summary>

src/Protocol/Features/Document/SemanticTokensFeature.cs

+8-5
Original file line numberDiff line numberDiff line change
@@ -790,14 +790,17 @@ public partial class SemanticTokensCapabilityRequestFull
790790
///
791791
/// @since 3.16.0.
792792
/// </summary>
793-
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(WorkspaceClientCapabilities.SemanticTokens))]
793+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.SemanticTokens))]
794794
public class SemanticTokensWorkspaceCapability : ICapability
795795
{
796796
/// <summary>
797-
/// Whether the client implementation supports a refresh request send from
798-
/// the server to the client. This is useful if a server detects a project
799-
/// wide configuration change which requires a re-calculation of all semantic
800-
/// tokens provided by the server issuing the request.
797+
/// Whether the client implementation supports a refresh request sent from
798+
/// the server to the client.
799+
///
800+
/// Note that this event is global and will force the client to refresh all
801+
/// semantic tokens currently shown. It should be used with absolute care
802+
/// and is useful for situation where a server for example detect a project
803+
/// wide change that requires such a calculation.
801804
/// </summary>
802805
[Optional]
803806
public bool RefreshSupport { get; set; }

src/Protocol/Features/Workspace/DidChangeConfigurationFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public partial record DidChangeConfigurationParams : IRequest
2626

2727
namespace Client.Capabilities
2828
{
29-
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(WorkspaceClientCapabilities.Configuration))]
29+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.Configuration))]
3030
public partial class DidChangeConfigurationCapability : DynamicCapability
3131
{
3232
}

src/Protocol/Features/Workspace/DidChangeWatchedFilesFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public partial class DidChangeWatchedFilesRegistrationOptions
3636

3737
namespace Client.Capabilities
3838
{
39-
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(WorkspaceClientCapabilities.DidChangeWatchedFiles))]
39+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.DidChangeWatchedFiles))]
4040
public partial class DidChangeWatchedFilesCapability : DynamicCapability
4141
{
4242
/// <summary>

src/Protocol/Features/Workspace/ExecuteCommandFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ public override StaticOptions Convert(ExecuteCommandRegistrationOptions source)
107107

108108
namespace Client.Capabilities
109109
{
110-
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(WorkspaceClientCapabilities.ExecuteCommand))]
110+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.ExecuteCommand))]
111111
public class ExecuteCommandCapability : DynamicCapability
112112
{
113113
}

src/Protocol/Features/Workspace/WorkspaceSymbolsFeature.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ public override StaticOptions Convert(WorkspaceSymbolRegistrationOptions source)
187187

188188
namespace Client.Capabilities
189189
{
190-
[CapabilityKey(nameof(ClientCapabilities.TextDocument), nameof(WorkspaceClientCapabilities.Symbol))]
190+
[CapabilityKey(nameof(ClientCapabilities.Workspace), nameof(WorkspaceClientCapabilities.Symbol))]
191191
public partial class WorkspaceSymbolCapability : DynamicCapability //
192192
{
193193
/// <summary>

src/Protocol/Models/RangeOrEditRange.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ public override RangeOrEditRange ReadJson(
4646
var obj = JObject.Load(reader);
4747
if (obj.ContainsKey("insert"))
4848
{
49-
return new RangeOrEditRange(obj.ToObject<EditRange>());
49+
return new RangeOrEditRange(obj.ToObject<EditRange>(serializer));
5050
}
5151

52-
return new RangeOrEditRange(obj.ToObject<Range>());
52+
return new RangeOrEditRange(obj.ToObject<Range>(serializer));
5353
}
5454

5555
public override bool CanRead => true;

src/Protocol/Serialization/Converters/CommandOrCodeActionConverter.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ public override CommandOrCodeAction ReadJson(JsonReader reader, Type objectType,
3131
var command = result["command"];
3232
if (command?.Type == JTokenType.String)
3333
{
34-
return new CommandOrCodeAction(result.ToObject<Command>());
34+
return new CommandOrCodeAction(result.ToObject<Command>(serializer));
3535
}
3636

37-
return new CommandOrCodeAction(result.ToObject<CodeAction>());
37+
return new CommandOrCodeAction(result.ToObject<CodeAction>(serializer));
3838
}
3939

4040
public override bool CanRead => true;

src/Protocol/Serialization/Converters/GlobPatternConverter.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public override GlobPattern ReadJson(
2929

3030
if (reader.TokenType == JsonToken.StartObject)
3131
{
32-
return new GlobPattern(JObject.Load(reader).ToObject<RelativePattern>());
32+
return new GlobPattern(JObject.Load(reader).ToObject<RelativePattern>(serializer));
3333
}
3434

3535
return new GlobPattern("");

src/Protocol/Serialization/Converters/LocationOrFileLocationConverter.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public override LocationOrFileLocation ReadJson(JsonReader reader, Type objectTy
1919
var obj = JObject.Load(reader);
2020
if (obj.ContainsKey("range"))
2121
{
22-
return new LocationOrFileLocation(obj.ToObject<Location>());
22+
return new LocationOrFileLocation(obj.ToObject<Location>(serializer));
2323
}
2424

25-
return new LocationOrFileLocation(obj.ToObject<FileLocation>());
25+
return new LocationOrFileLocation(obj.ToObject<FileLocation>(serializer));
2626
}
2727

2828
public override bool CanRead => true;

src/Protocol/Serialization/Converters/LocationOrLocationLinkConverter.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ public override LocationOrLocationLink ReadJson(JsonReader reader, Type objectTy
2020
var obj = JObject.Load(reader);
2121
if (obj.ContainsKey("uri"))
2222
{
23-
return new LocationOrLocationLink(obj.ToObject<Location>());
23+
return new LocationOrLocationLink(obj.ToObject<Location>(serializer));
2424
}
2525

26-
return new LocationOrLocationLink(obj.ToObject<LocationLink>());
26+
return new LocationOrLocationLink(obj.ToObject<LocationLink>(serializer));
2727
}
2828

2929
public override bool CanRead => true;

src/Protocol/Serialization/Converters/RangeOrPlaceholderRangeConverter.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ public override void WriteJson(JsonWriter writer, RangeOrPlaceholderRange? value
3636
{
3737
var obj = (JToken.ReadFrom(reader) as JObject)!;
3838
return obj.ContainsKey("placeholder")
39-
? new RangeOrPlaceholderRange(obj.ToObject<PlaceholderRange>())
39+
? new RangeOrPlaceholderRange(obj.ToObject<PlaceholderRange>(serializer))
4040
: obj.ContainsKey("defaultBehavior")
4141
? new RangeOrPlaceholderRange(
42-
obj.ToObject<RenameDefaultBehavior>()
42+
obj.ToObject<RenameDefaultBehavior>(serializer)
4343
)
4444
: new RangeOrPlaceholderRange(
45-
obj.ToObject<Range>()
45+
obj.ToObject<Range>(serializer)
4646
);
4747
}
4848

src/Protocol/Serialization/Converters/SemanticTokensFullOrDeltaConverter.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ public override SemanticTokensFullOrDelta ReadJson(
3030
var obj = JObject.Load(reader);
3131
if (obj.ContainsKey("data"))
3232
{
33-
return new SemanticTokensFullOrDelta(obj.ToObject<SemanticTokens>());
33+
return new SemanticTokensFullOrDelta(obj.ToObject<SemanticTokens>(serializer));
3434
}
3535

36-
return new SemanticTokensFullOrDelta(obj.ToObject<SemanticTokensDelta>());
36+
return new SemanticTokensFullOrDelta(obj.ToObject<SemanticTokensDelta>(serializer));
3737
}
3838

3939
public override bool CanRead => true;

0 commit comments

Comments
 (0)