Skip to content

Commit 6bf47e5

Browse files
Merge pull request #160 from OmniSharp/bug/GH-159
GH159: Fixes BooleanOrConverter
2 parents 2c88d7c + d25cc20 commit 6bf47e5

File tree

3 files changed

+113
-1
lines changed

3 files changed

+113
-1
lines changed

src/Protocol/Serialization/Converters/BooleanOrConverter.cs

+9-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,15 @@ private static void WriteJsonGeneric<T>(JsonWriter writer, BooleanOr<T> value, J
2525
{
2626
if (value.IsValue)
2727
{
28-
new JValue(value.Value).WriteTo(writer);
28+
if (typeof(T).IsValueType)
29+
{
30+
new JValue(value.Value).WriteTo(writer);
31+
}
32+
else
33+
{
34+
serializer.Serialize(writer, value.Value);
35+
}
36+
2937
return;
3038
}
3139

test/Lsp.Tests/Models/InitializeResultTests.cs

+43
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,48 @@ public void SimpleTest(string expected)
7070
var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject<InitializeResult>(expected);
7171
deresult.Should().BeEquivalentTo(model);
7272
}
73+
74+
[Theory, JsonFixture]
75+
public void BooleanOrTest(string expected)
76+
{
77+
var model = new InitializeResult() {
78+
Capabilities = new ServerCapabilities {
79+
CodeActionProvider = new CodeActionOptions {
80+
CodeActionKinds = new [] {
81+
CodeActionKind.QuickFix
82+
}
83+
},
84+
ColorProvider = new ColorOptions {
85+
DocumentSelector = DocumentSelector.ForPattern("**/*.foo"),
86+
Id = "foo"
87+
},
88+
DeclarationProvider = new DeclarationOptions {
89+
DocumentSelector = DocumentSelector.ForPattern("**/*.foo"),
90+
Id = "foo"
91+
},
92+
FoldingRangeProvider = new FoldingRangeOptions {
93+
DocumentSelector = DocumentSelector.ForPattern("**/*.foo"),
94+
Id = "foo"
95+
},
96+
ImplementationProvider = new ImplementationOptions {
97+
DocumentSelector = DocumentSelector.ForPattern("**/*.foo"),
98+
Id = "foo"
99+
},
100+
RenameProvider = new RenameOptions {
101+
PrepareProvider = true
102+
},
103+
TypeDefinitionProvider = new TypeDefinitionOptions {
104+
DocumentSelector = DocumentSelector.ForPattern("**/*.foo"),
105+
Id = "foo"
106+
}
107+
}
108+
};
109+
var result = Fixture.SerializeObject(model);
110+
111+
result.Should().Be(expected);
112+
113+
var deresult = new Serializer(ClientVersion.Lsp3).DeserializeObject<InitializeResult>(expected);
114+
deresult.Should().BeEquivalentTo(model);
115+
}
73116
}
74117
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
{
2+
"capabilities": {
3+
"hoverProvider": false,
4+
"definitionProvider": false,
5+
"referencesProvider": false,
6+
"documentHighlightProvider": false,
7+
"documentSymbolProvider": false,
8+
"workspaceSymbolProvider": false,
9+
"codeActionProvider": {
10+
"codeActionKinds": [
11+
"quickfix"
12+
]
13+
},
14+
"documentFormattingProvider": false,
15+
"documentRangeFormattingProvider": false,
16+
"renameProvider": {
17+
"prepareProvider": true
18+
},
19+
"experimental": {},
20+
"typeDefinitionProvider": {
21+
"id": "foo",
22+
"documentSelector": [
23+
{
24+
"pattern": "**/*.foo"
25+
}
26+
]
27+
},
28+
"implementationProvider": {
29+
"id": "foo",
30+
"documentSelector": [
31+
{
32+
"pattern": "**/*.foo"
33+
}
34+
]
35+
},
36+
"colorProvider": {
37+
"id": "foo",
38+
"documentSelector": [
39+
{
40+
"pattern": "**/*.foo"
41+
}
42+
]
43+
},
44+
"foldingRangeProvider": {
45+
"id": "foo",
46+
"documentSelector": [
47+
{
48+
"pattern": "**/*.foo"
49+
}
50+
]
51+
},
52+
"declarationProvider": {
53+
"id": "foo",
54+
"documentSelector": [
55+
{
56+
"pattern": "**/*.foo"
57+
}
58+
]
59+
}
60+
}
61+
}

0 commit comments

Comments
 (0)