Skip to content

Added JsonConverter attributes where appropriate to allow for more ad… #271

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 2, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/Protocol/DocumentUri.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol
{
Expand All @@ -25,6 +27,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol
/// This class describes a document uri as defined by https://microsoft.github.io/language-server-protocol/specifications/specification-current/#uri
/// </summary>
/// <remarks>This exists because of some non-standard serialization in vscode around uris and .NET's behavior when deserializing those uris</remarks>
[JsonConverter(typeof(DocumentUriConverter))]
public partial class DocumentUri : IEquatable<DocumentUri>
{
/// <summary>
Expand Down
4 changes: 4 additions & 0 deletions src/Protocol/Models/BooleanNumberString.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(BooleanNumberStringConverter))]
public struct BooleanNumberString
{
private long? _long;
Expand Down
4 changes: 4 additions & 0 deletions src/Protocol/Models/BooleanString.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(BooleanStringConverter))]
public struct BooleanString
{
private string _string;
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/CommandOrCodeAction.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
using System.Diagnostics;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(CommandOrCodeActionConverter))]
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
public struct CommandOrCodeAction
{
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/CompletionList.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
/// <summary>
/// Represents a collection of [completion items](#CompletionItem) to be presented
/// in the editor.
/// </summary>
[JsonConverter(typeof(CompletionListConverter))]
public class CompletionList : Container<CompletionItem>
{
public CompletionList() : base(Enumerable.Empty<CompletionItem>()) { }
Expand Down
4 changes: 4 additions & 0 deletions src/Protocol/Models/DiagnosticCode.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(DiagnosticCodeConverter))]
public struct DiagnosticCode
{
public DiagnosticCode(long value)
Expand Down
4 changes: 4 additions & 0 deletions src/Protocol/Models/LocationOrLocationLink.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(LocationOrLocationLinkConverter))]
public struct LocationOrLocationLink {

public LocationOrLocationLink(Location location)
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/LocationOrLocationLinks.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(LocationOrLocationLinksConverter))]
public class LocationOrLocationLinks : Container<LocationOrLocationLink>
{
public LocationOrLocationLinks() : this(Enumerable.Empty<LocationOrLocationLink>())
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/MarkedString.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
using System.Diagnostics;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
Expand All @@ -16,6 +18,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
///
/// Note that markdown strings will be sanitized - that means html will be escaped.
/// </summary>
[JsonConverter(typeof(MarkedStringConverter))]
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
public class MarkedString
{
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/MarkedStringsOrMarkupContent.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(MarkedStringsOrMarkupContentConverter))]
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
public class MarkedStringsOrMarkupContent
{
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/ParameterInformationLabel.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
using System.Diagnostics;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(ParameterInformationLabelConverter))]
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
public class ParameterInformationLabel
{
Expand Down
2 changes: 2 additions & 0 deletions src/Protocol/Models/ProgressToken.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
using System.Collections.Generic;
using System.Diagnostics;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(ProgressTokenConverter))]
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
public class ProgressToken : IEquatable<ProgressToken>, IEquatable<long>, IEquatable<string>
{
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/Proposals/SemanticTokensFullOrDelta.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
using System;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals
{
[Obsolete(Constants.Proposal)]
[JsonConverter(typeof(SemanticTokensFullOrDeltaConverter))]
public struct SemanticTokensFullOrDelta
{
public SemanticTokensFullOrDelta(SemanticTokensDelta delta)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
using System;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models.Proposals
{
[Obsolete(Constants.Proposal)]
[JsonConverter(typeof(SemanticTokensFullOrDeltaPartialResultConverter))]
public struct SemanticTokensFullOrDeltaPartialResult
{
public SemanticTokensFullOrDeltaPartialResult(
Expand Down
4 changes: 4 additions & 0 deletions src/Protocol/Models/RangeOrPlaceholderRange.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(RangeOrPlaceholderRangeConverter))]
public class RangeOrPlaceholderRange
{

Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/StringOrMarkupContent.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
using System.Diagnostics;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(StringOrMarkupContentConverter))]
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
public class StringOrMarkupContent
{
Expand Down
3 changes: 3 additions & 0 deletions src/Protocol/Models/SymbolInformationOrDocumentSymbol.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
using System.Diagnostics;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(SymbolInformationOrDocumentSymbolConverter))]
[DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")]
public struct SymbolInformationOrDocumentSymbol
{
Expand Down
4 changes: 4 additions & 0 deletions src/Protocol/Models/WorkspaceEditDocumentChange.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
{
[JsonConverter(typeof(WorkspaceEditDocumentChangeConverter))]
public struct WorkspaceEditDocumentChange
{
public WorkspaceEditDocumentChange(TextDocumentEdit textDocumentEdit)
Expand Down
34 changes: 0 additions & 34 deletions src/Protocol/Serialization/Converters/DiagnosticCodeConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,38 +30,4 @@ public override DiagnosticCode ReadJson(JsonReader reader, Type objectType, Diag

public override bool CanRead => true;
}

class NullableDiagnosticCodeConverter : JsonConverter<DiagnosticCode?>
{
public override void WriteJson(JsonWriter writer, DiagnosticCode? value, JsonSerializer serializer)
{
if (!value.HasValue)
{
writer.WriteNull();
}
else
{
if (value.Value.IsLong) serializer.Serialize(writer, value.Value.Long);
if (value.Value.IsString) serializer.Serialize(writer, value.Value.String);
}
}

public override DiagnosticCode? ReadJson(JsonReader reader, Type objectType, DiagnosticCode? existingValue,
bool hasExistingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String)
{
return new DiagnosticCode((string) reader.Value);
}

if (reader.TokenType == JsonToken.Integer)
{
return new DiagnosticCode((long) reader.Value);
}

return null;
}

public override bool CanRead => true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
using System;
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Models;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters
{
class NullableDiagnosticCodeConverter : JsonConverter<DiagnosticCode?>
{
public override void WriteJson(JsonWriter writer, DiagnosticCode? value, JsonSerializer serializer)
{
if (!value.HasValue)
{
writer.WriteNull();
}
else
{
if (value.Value.IsLong) serializer.Serialize(writer, value.Value.Long);
if (value.Value.IsString) serializer.Serialize(writer, value.Value.String);
}
}

public override DiagnosticCode? ReadJson(JsonReader reader, Type objectType, DiagnosticCode? existingValue,
bool hasExistingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.String)
{
return new DiagnosticCode((string) reader.Value);
}

if (reader.TokenType == JsonToken.Integer)
{
return new DiagnosticCode((long) reader.Value);
}

return null;
}

public override bool CanRead => true;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters
{
class ValueTupleContractResolver<T1, T2> : JsonConverter<(T1, T2)>
{
public override void WriteJson(JsonWriter writer, (T1, T2) value, JsonSerializer serializer)
{
serializer.Serialize(writer, new object[] { value.Item1, value.Item2 });
}

public override (T1, T2) ReadJson(JsonReader reader, Type objectType, (T1, T2) existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var a = JArray.Load(reader);
return (a.ToObject<T1>(), a.ToObject<T2>());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,4 @@ public override WorkspaceEditDocumentChange ReadJson(JsonReader reader, Type obj

public override bool CanRead => true;
}

class ValueTupleContractResolver<T1, T2> : JsonConverter<ValueTuple<T1, T2>>
{
public override void WriteJson(JsonWriter writer, (T1, T2) value, JsonSerializer serializer)
{
serializer.Serialize(writer, new object[] { value.Item1, value.Item2 });
}

public override (T1, T2) ReadJson(JsonReader reader, Type objectType, (T1, T2) existingValue, bool hasExistingValue, JsonSerializer serializer)
{
var a = JArray.Load(reader);
return (a.ToObject<T1>(), a.ToObject<T2>());
}
}
}
4 changes: 4 additions & 0 deletions src/Protocol/Server/Capabilities/TextDocumentSync.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
using Newtonsoft.Json;
using OmniSharp.Extensions.LanguageServer.Protocol.Serialization.Converters;

namespace OmniSharp.Extensions.LanguageServer.Protocol.Server.Capabilities
{
[JsonConverter(typeof(TextDocumentSyncConverter))]
public class TextDocumentSync
{
public TextDocumentSync(TextDocumentSyncKind kind)
Expand Down