Skip to content

Commit 6069be5

Browse files
authored
Merge pull request #140 from mholo65/fix/init-capabilities
Fix/init capabilities
2 parents 62cda45 + 649246f commit 6069be5

File tree

6 files changed

+42
-15
lines changed

6 files changed

+42
-15
lines changed

src/Protocol/Models/BooleanOr.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
22
{
3-
public struct BooleanOr<T>
3+
public class BooleanOr<T>
44
{
55
private T _value;
66
private bool? _bool;
@@ -48,7 +48,7 @@ public object RawValue
4848

4949
public static implicit operator BooleanOr<T>(T value)
5050
{
51-
return new BooleanOr<T>(value);
51+
return value != null ? new BooleanOr<T>(value) : null;
5252
}
5353

5454
public static implicit operator BooleanOr<T>(bool value)

src/Protocol/Serialization/Converters/BooleanOrConverter.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using System.Reflection;
33
using Newtonsoft.Json;
44
using Newtonsoft.Json.Linq;
@@ -29,7 +29,7 @@ private static void WriteJsonGeneric<T>(JsonWriter writer, BooleanOr<T> value, J
2929
return;
3030
}
3131

32-
if (value.IsBool && value.Bool)
32+
if (value.IsBool)
3333
{
3434
new JValue(value.Bool).WriteTo(writer);
3535
return;
@@ -57,11 +57,11 @@ private static BooleanOr<T> ReadJsonGeneric<T>(JsonReader reader, object existin
5757
return new BooleanOr<T>(JObject.Load(reader).ToObject<T>(serializer));
5858
}
5959

60-
return new BooleanOr<T>();
60+
return new BooleanOr<T>(default(T));
6161
}
6262

6363
public override bool CanRead => true;
6464

6565
public override bool CanConvert(Type objectType) => objectType.GetTypeInfo().IsGenericType && objectType.GetTypeInfo().GetGenericTypeDefinition() == typeof(BooleanOr<>);
6666
}
67-
}
67+
}

test/Lsp.Tests/Capabilities/Server/ServerCapabilitiesTests.cs

+20
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Newtonsoft.Json.Linq;
66
using OmniSharp.Extensions.LanguageServer.Protocol;
77
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
8+
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
89
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization;
910
using OmniSharp.Extensions.LanguageServer.Protocol.Server.Capabilities;
1011
using Xunit;
@@ -59,6 +60,10 @@ public void SimpleTest(string expected)
5960
WillSaveWaitUntil = true
6061
}),
6162
WorkspaceSymbolProvider = true,
63+
ColorProvider = true,
64+
FoldingRangeProvider = true,
65+
ImplementationProvider = true,
66+
TypeDefinitionProvider = true
6267
};
6368
var result = Fixture.SerializeObject(model);
6469

@@ -67,5 +72,20 @@ public void SimpleTest(string expected)
6772
var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject<ServerCapabilities>(expected);
6873
deresult.Should().BeEquivalentTo(model);
6974
}
75+
76+
[Theory, JsonFixture]
77+
public void Optional(string expected)
78+
{
79+
var model = new ServerCapabilities {
80+
ColorProvider = (ColorOptions)null
81+
};
82+
83+
var result = Fixture.SerializeObject(model);
84+
85+
result.Should().Be(expected);
86+
87+
var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject<ServerCapabilities>(expected);
88+
deresult.Should().BeEquivalentTo(model);
89+
}
7090
}
7191
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"hoverProvider": false,
3+
"definitionProvider": false,
4+
"referencesProvider": false,
5+
"documentHighlightProvider": false,
6+
"documentSymbolProvider": false,
7+
"workspaceSymbolProvider": false,
8+
"documentFormattingProvider": false,
9+
"documentRangeFormattingProvider": false,
10+
"experimental": {}
11+
}

test/Lsp.Tests/Capabilities/Server/ServerCapabilitiesTests_$SimpleTest.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454
"experimental": {
5555
"abc": "123"
5656
},
57-
"typeDefinitionProvider": null,
58-
"implementationProvider": null,
59-
"colorProvider": null,
60-
"foldingRangeProvider": null
57+
"typeDefinitionProvider": true,
58+
"implementationProvider": true,
59+
"colorProvider": true,
60+
"foldingRangeProvider": true
6161
}

test/Lsp.Tests/Models/InitializeResultTests_$SimpleTest.json

+1-5
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,6 @@
5454
},
5555
"experimental": {
5656
"abc": "123"
57-
},
58-
"typeDefinitionProvider": null,
59-
"implementationProvider": null,
60-
"colorProvider": null,
61-
"foldingRangeProvider": null
57+
}
6258
}
6359
}

0 commit comments

Comments
 (0)