Skip to content

Commit 4131f00

Browse files
couple more updates
1 parent 1ad4da1 commit 4131f00

File tree

5 files changed

+62
-23
lines changed

5 files changed

+62
-23
lines changed

src/Protocol/Client/Capabilities/CompletionCapability.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ public class CompletionCapability : DynamicCapability, ConnectedCapability<IComp
88
/// The client supports the following `CompletionItem` specific
99
/// capabilities.
1010
/// </summary>
11+
[Optional]
1112
public CompletionItemCapability CompletionItem { get; set; }
1213

1314
/// <summary>

src/Protocol/Models/CodeLens.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Newtonsoft.Json;
1+
using Newtonsoft.Json;
2+
using Newtonsoft.Json.Linq;
23
using Newtonsoft.Json.Serialization;
34

45
namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
@@ -28,6 +29,6 @@ public class CodeLens
2829
/// a code lens and a code lens resolve request.
2930
/// </summary>
3031
[Optional]
31-
public object Data { get; set; }
32+
public JObject Data { get; set; }
3233
}
3334
}

src/Protocol/Serialization/Converters/StringOrMarkupContentConverter.cs

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
1616
}
1717
else
1818
{
19-
writer.WriteStartObject();
20-
writer.WritePropertyName("kind");
21-
writer.WriteValue(v.MarkupContent.Kind);
22-
writer.WritePropertyName("value");
23-
writer.WriteValue(v.MarkupContent.Value);
24-
writer.WriteEndObject();
19+
serializer.Serialize(writer, v.MarkupContent);
2520
}
2621
}
2722

@@ -49,4 +44,44 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
4944

5045
public override bool CanConvert(Type objectType) => objectType == typeof(StringOrMarkupContent);
5146
}
47+
48+
public class MarkedStringsOrMarkupContentConverter : JsonConverter
49+
{
50+
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
51+
{
52+
var v = value as MarkedStringsOrMarkupContent;
53+
if (v.HasMarkupContent)
54+
{
55+
serializer.Serialize(writer, v.MarkupContent);
56+
}
57+
else
58+
{
59+
serializer.Serialize(writer, v.MarkedStrings);
60+
}
61+
}
62+
63+
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
64+
{
65+
if (reader.TokenType == JsonToken.StartObject)
66+
{
67+
var result = JObject.Load(reader);
68+
return new MarkedStringsOrMarkupContent(result.ToObject<MarkupContent>(serializer));
69+
}
70+
if (reader.TokenType == JsonToken.StartArray)
71+
{
72+
var result = JArray.Load(reader);
73+
return new MarkedStringsOrMarkupContent(result.ToObject<MarkedStringContainer>(serializer));
74+
}
75+
if (reader.TokenType == JsonToken.String)
76+
{
77+
return new MarkedStringsOrMarkupContent(reader.Value as string);
78+
}
79+
80+
return "";
81+
}
82+
83+
public override bool CanRead => true;
84+
85+
public override bool CanConvert(Type objectType) => objectType == typeof(MarkedStringsOrMarkupContent);
86+
}
5287
}

src/Protocol/Serialization/Serializer.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,21 @@ public static class Serializer
1313
{
1414
public static JsonSerializer CreateSerializer(ClientVersion version)
1515
{
16-
var serialzier = JsonSerializer.CreateDefault();
17-
serialzier.ContractResolver = new ContractResolver();
16+
var serializer = JsonSerializer.CreateDefault();
17+
serializer.ContractResolver = new ContractResolver();
1818

19-
serialzier.Converters.Add(new SupportsConverter());
20-
serialzier.Converters.Add(new CompletionListConverter());
21-
serialzier.Converters.Add(new DiagnosticCodeConverter());
22-
serialzier.Converters.Add(new LocationOrLocationsConverter());
23-
serialzier.Converters.Add(new MarkedStringCollectionConverter());
24-
serialzier.Converters.Add(new MarkedStringConverter());
25-
serialzier.Converters.Add(new StringOrMarkupContentConverter());
26-
serialzier.Converters.Add(new TextDocumentSyncConverter());
27-
serialzier.Converters.Add(new BooleanNumberStringConverter());
19+
serializer.Converters.Add(new SupportsConverter());
20+
serializer.Converters.Add(new CompletionListConverter());
21+
serializer.Converters.Add(new DiagnosticCodeConverter());
22+
serializer.Converters.Add(new LocationOrLocationsConverter());
23+
serializer.Converters.Add(new MarkedStringCollectionConverter());
24+
serializer.Converters.Add(new MarkedStringConverter());
25+
serializer.Converters.Add(new StringOrMarkupContentConverter());
26+
serializer.Converters.Add(new TextDocumentSyncConverter());
27+
serializer.Converters.Add(new BooleanNumberStringConverter());
28+
serializer.Converters.Add(new MarkedStringsOrMarkupContentConverter());
2829

29-
return serialzier;
30+
return serializer;
3031
}
3132

3233
public static JsonSerializerSettings CreateSerializerSettings(ClientVersion version)
@@ -44,6 +45,7 @@ public static JsonSerializerSettings CreateSerializerSettings(ClientVersion vers
4445
settings.Converters.Add(new StringOrMarkupContentConverter());
4546
settings.Converters.Add(new TextDocumentSyncConverter());
4647
settings.Converters.Add(new BooleanNumberStringConverter());
48+
settings.Converters.Add(new MarkedStringsOrMarkupContentConverter());
4749

4850
return settings;
4951
}
@@ -83,7 +85,7 @@ protected override JsonObjectContract CreateObjectContract(Type objectType)
8385
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
8486
{
8587
var property = base.CreateProperty(member, memberSerialization);
86-
if (property.DeclaringType.Name.EndsWith("Capability")) return property;
88+
//if (property.DeclaringType.Name.EndsWith("Capability")) return property;
8789
// if (property.PropertyType.GetTypeInfo().IsGenericType)
8890
if (
8991
member.GetCustomAttributes<OptionalAttribute>().Any()

test/Lsp.Tests/Models/CodeLensTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ public void SimpleTest(string expected)
2121
Name = "abc",
2222
Title = "Cool story bro"
2323
},
24-
Data = new Dictionary<string, object>()
24+
Data = JObject.FromObject(new Dictionary<string, object>()
2525
{
2626
{ "somethingCool" , 1 }
27-
},
27+
}),
2828
Range = new Range(new Position(1, 2), new Position(2, 3)),
2929
};
3030
var result = Fixture.SerializeObject(model);

0 commit comments

Comments
 (0)