diff --git a/.vscode/csharp.code-snippets b/.vscode/csharp.code-snippets new file mode 100644 index 000000000..826f269b5 --- /dev/null +++ b/.vscode/csharp.code-snippets @@ -0,0 +1,36 @@ +{ + // Place your csharp-language-server-protocol workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and + // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope + // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is + // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: + // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. + // Placeholders with the same ids are connected. + // Example: + // "Print to console": { + // "scope": "javascript,typescript", + // "prefix": "log", + // "body": [ + // "console.log('$1');", + // "$2" + // ], + // "description": "Log output to console" + // } + "Debugger Display Attribute": { + "prefix": "dda", + "scope": "csharp", + "description": "Adds debugger display attribute", + "body": [ + "[DebuggerDisplay(\"{\" + nameof(DebuggerDisplay) + \",nq}\")]" + ] + }, + "Debugger Display Property": { + "prefix": "ddc", + "scope": "csharp", + "description": "Adds debugger display property", + "body": [ + "private string DebuggerDisplay => $1;", + "/// ", + "public override string ToString() => DebuggerDisplay;" + ] + } +} diff --git a/src/Dap.Protocol/Events/BreakpointEvent.cs b/src/Dap.Protocol/Events/BreakpointEvent.cs index 546a68818..e2c57568c 100644 --- a/src/Dap.Protocol/Events/BreakpointEvent.cs +++ b/src/Dap.Protocol/Events/BreakpointEvent.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.DebugAdapter.Protocol.Models; using MediatR; using OmniSharp.Extensions.JsonRpc; diff --git a/src/Dap.Protocol/Models/Breakpoint.cs b/src/Dap.Protocol/Models/Breakpoint.cs index c669e21b2..eb70fe9bf 100644 --- a/src/Dap.Protocol/Models/Breakpoint.cs +++ b/src/Dap.Protocol/Models/Breakpoint.cs @@ -5,6 +5,7 @@ namespace OmniSharp.Extensions.DebugAdapter.Protocol.Models /// /// Information about a Breakpoint created in setBreakpoints or setFunctionBreakpoints. /// + public class Breakpoint { /// diff --git a/src/Protocol/Models/ClientInfo.cs b/src/Protocol/Models/ClientInfo.cs index 347f4481b..ead6e27b6 100644 --- a/src/Protocol/Models/ClientInfo.cs +++ b/src/Protocol/Models/ClientInfo.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -7,6 +8,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// @since 3.15.0 /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class ClientInfo { @@ -20,5 +22,9 @@ public class ClientInfo /// [Optional] public string Version { get; set; } + + private string DebuggerDisplay => string.IsNullOrWhiteSpace(Version) ? Name : $"{Name} ({Version})"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/CodeAction.cs b/src/Protocol/Models/CodeAction.cs index 1c91d1239..935e8a579 100644 --- a/src/Protocol/Models/CodeAction.cs +++ b/src/Protocol/Models/CodeAction.cs @@ -1,7 +1,9 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class CodeAction { /// @@ -48,5 +50,9 @@ public class CodeAction /// [Optional] public Command Command { get; set; } + + private string DebuggerDisplay => $"[{Kind}] {Title}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/CodeActionKind.cs b/src/Protocol/Models/CodeActionKind.cs index c07cede23..b372e1780 100644 --- a/src/Protocol/Models/CodeActionKind.cs +++ b/src/Protocol/Models/CodeActionKind.cs @@ -8,7 +8,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// A set of predefined code action kinds /// - [DebuggerDisplay("{_value}")] + [DebuggerDisplay("{" + nameof(_value) + "}")] [JsonConverter(typeof(EnumLikeStringConverter))] public readonly struct CodeActionKind : IEquatable, IEnumLikeString { @@ -95,6 +95,7 @@ public static implicit operator string(CodeActionKind kind) return kind._value; } + /// public override string ToString() => _value; public bool Equals(CodeActionKind other) => _value == other._value; diff --git a/src/Protocol/Models/CodeLens.cs b/src/Protocol/Models/CodeLens.cs index 8308189fd..f51396934 100644 --- a/src/Protocol/Models/CodeLens.cs +++ b/src/Protocol/Models/CodeLens.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using MediatR; using Newtonsoft.Json.Linq; using OmniSharp.Extensions.JsonRpc; @@ -12,6 +13,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// A code lens is _unresolved_ when no command is associated to it. For performance /// reasons the creation of a code lens and resolving should be done in two stages. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] [Method(TextDocumentNames.CodeLensResolve, Direction.ClientToServer)] public class CodeLens : ICanBeResolved, IRequest { @@ -32,5 +34,9 @@ public class CodeLens : ICanBeResolved, IRequest /// [Optional] public JToken Data { get; set; } + + private string DebuggerDisplay => $"{Range}{(Command != null ? $" Command" : "")}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/Command.cs b/src/Protocol/Models/Command.cs index fffd837c6..af2043877 100644 --- a/src/Protocol/Models/Command.cs +++ b/src/Protocol/Models/Command.cs @@ -1,9 +1,12 @@ +using System.Diagnostics; +using System.Linq; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Command { /// @@ -23,5 +26,10 @@ public class Command /// [Optional] public JArray Arguments { get; set; } + + private string DebuggerDisplay => + $"{Title}{(string.IsNullOrWhiteSpace(Name) ? "" : $" {Name}")}{(Arguments == null ? "" : string.Join(", ", Arguments.Select(z => z.ToString().Trim('"'))))}"; + + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/CommandOrCodeAction.cs b/src/Protocol/Models/CommandOrCodeAction.cs index a015722e6..435901924 100644 --- a/src/Protocol/Models/CommandOrCodeAction.cs +++ b/src/Protocol/Models/CommandOrCodeAction.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public struct CommandOrCodeAction { private CodeAction _codeAction; @@ -19,8 +22,7 @@ public CommandOrCodeAction(Command value) public Command Command { get { return this._command; } - set - { + set { this._command = value; this._codeAction = null; } @@ -30,16 +32,14 @@ public Command Command public CodeAction CodeAction { get { return this._codeAction; } - set - { + set { this._command = default; this._codeAction = value; } } public object RawValue { - get - { + get { if (IsCommand) return Command; if (IsCodeAction) return CodeAction; return default; @@ -55,5 +55,9 @@ public static implicit operator CommandOrCodeAction(CodeAction value) { return new CommandOrCodeAction(value); } + + private string DebuggerDisplay => $"{(IsCommand ? $"command: {Command}" : IsCodeAction ? $"code action: {CodeAction}" : "...")}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/CompletionItem.cs b/src/Protocol/Models/CompletionItem.cs index ec17f41c5..551bb6c35 100644 --- a/src/Protocol/Models/CompletionItem.cs +++ b/src/Protocol/Models/CompletionItem.cs @@ -1,3 +1,5 @@ +using System.Diagnostics; +using System.Linq; using MediatR; using Newtonsoft.Json.Linq; using OmniSharp.Extensions.JsonRpc; @@ -5,6 +7,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] [Method(TextDocumentNames.CompletionResolve, Direction.ClientToServer)] public class CompletionItem : ICanBeResolved, IRequest { @@ -129,5 +132,9 @@ public class CompletionItem : ICanBeResolved, IRequest /// [Optional] public JToken Data { get; set; } + + private string DebuggerDisplay => $"[{Kind}] {Label}{(Tags?.Any() == true ? $" tags: {string.Join(", ", Tags.Select(z => z.ToString()))}" : "")}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/Diagnostic.cs b/src/Protocol/Models/Diagnostic.cs index 50bc828ea..2b7fb8749 100644 --- a/src/Protocol/Models/Diagnostic.cs +++ b/src/Protocol/Models/Diagnostic.cs @@ -1,7 +1,10 @@ +using System.Diagnostics; +using System.Linq; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Diagnostic { /// @@ -48,5 +51,12 @@ public class Diagnostic /// [Optional] public Container RelatedInformation { get; set; } + + private string DebuggerDisplay => + $"{(Code.HasValue ? $"[{Code.Value.ToString()}]" : "")}" + + $"{Range}" + + $"{(string.IsNullOrWhiteSpace(Source) ? "" : $" ({Source})")}" + + $"{(Tags?.Any() == true ? $" [tags: {string.Join(", ", Tags.Select(z => z.ToString()))}]" : "")}" + + $" {(Message?.Length > 20 ? Message.Substring(0, 20) : Message)}"; } } diff --git a/src/Protocol/Models/DocumentColor.cs b/src/Protocol/Models/DocumentColor.cs index c36ddfdec..70ca4d36f 100644 --- a/src/Protocol/Models/DocumentColor.cs +++ b/src/Protocol/Models/DocumentColor.cs @@ -1,8 +1,12 @@ +using System.Diagnostics; +using System.Reflection.Emit; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { /// /// Represents a color in RGBA space. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class DocumentColor { /// @@ -24,5 +28,9 @@ public class DocumentColor /// The alpha component of this color in the range [0-1]. /// public double Alpha { get; set; } + + private string DebuggerDisplay => $"R:{Red} G:{Green} B:{Blue} A:{Alpha}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/DocumentFilter.cs b/src/Protocol/Models/DocumentFilter.cs index f7f8ff5dd..cd4e86df7 100644 --- a/src/Protocol/Models/DocumentFilter.cs +++ b/src/Protocol/Models/DocumentFilter.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using Minimatch; using Newtonsoft.Json; using OmniSharp.Extensions.LanguageServer.Protocol.Document; @@ -7,6 +8,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class DocumentFilter : IEquatable { public static DocumentFilter ForPattern(string wildcard) @@ -55,8 +57,7 @@ public static DocumentFilter ForScheme(string scheme) public string Pattern { get => _pattern; - set - { + set { _pattern = value; _minimatcher = new Minimatcher(value, new Options() { MatchBase = true }); } @@ -78,14 +79,17 @@ public static explicit operator string(DocumentFilter documentFilter) { items.Add(documentFilter.Language); } + if (documentFilter.HasScheme) { items.Add(documentFilter.Scheme); } + if (documentFilter.HasPattern) { items.Add(documentFilter.Pattern); } + return $"[{string.Join(", ", items)}]"; } @@ -95,26 +99,32 @@ public bool IsMatch(TextDocumentAttributes attributes) { return Language == attributes.LanguageId && Scheme == attributes.Scheme && _minimatcher.IsMatch(attributes.Uri.ToString()); } + if (HasLanguage && HasPattern) { return Language == attributes.LanguageId && _minimatcher.IsMatch(attributes.Uri.ToString()); } + if (HasLanguage && HasScheme) { return Language == attributes.LanguageId && Scheme == attributes.Scheme; } + if (HasPattern && HasScheme) { return Scheme == attributes.Scheme && _minimatcher.IsMatch(attributes.Uri.ToString()); } + if (HasLanguage) { return Language == attributes.LanguageId; } + if (HasScheme) { return Scheme == attributes.Scheme; } + if (HasPattern) { return _minimatcher.IsMatch(attributes.Uri.ToString()); @@ -122,6 +132,7 @@ public bool IsMatch(TextDocumentAttributes attributes) return false; } + public bool Equals(DocumentFilter other) { if (ReferenceEquals(null, other)) return false; @@ -134,7 +145,7 @@ public override bool Equals(object obj) if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; - return Equals((DocumentFilter) obj); + return Equals((DocumentFilter)obj); } public override int GetHashCode() @@ -151,5 +162,9 @@ public override int GetHashCode() public static bool operator ==(DocumentFilter left, DocumentFilter right) => Equals(left, right); public static bool operator !=(DocumentFilter left, DocumentFilter right) => !Equals(left, right); + + private string DebuggerDisplay => (string)this; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/DocumentLink.cs b/src/Protocol/Models/DocumentLink.cs index cbc2c1d5f..e613a93e1 100644 --- a/src/Protocol/Models/DocumentLink.cs +++ b/src/Protocol/Models/DocumentLink.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using MediatR; using Newtonsoft.Json.Linq; using OmniSharp.Extensions.JsonRpc; @@ -10,6 +11,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// text document or a web site. /// [Method(TextDocumentNames.DocumentLinkResolve, Direction.ClientToServer)] + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class DocumentLink : ICanBeResolved, IRequest { /// @@ -41,5 +43,9 @@ public class DocumentLink : ICanBeResolved, IRequest /// [Optional] public string Tooltip { get; set; } + + private string DebuggerDisplay => $"{Range}{(Target != null ? $" {Target}" : "")}{(string.IsNullOrWhiteSpace(Tooltip) ? $" {Tooltip}" : "")}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/DocumentSelector.cs b/src/Protocol/Models/DocumentSelector.cs index 2739857ab..5114767ea 100644 --- a/src/Protocol/Models/DocumentSelector.cs +++ b/src/Protocol/Models/DocumentSelector.cs @@ -1,6 +1,8 @@ using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics; using System.Linq; +using System.Reactive.Joins; using OmniSharp.Extensions.LanguageServer.Protocol.Document; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -8,6 +10,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// A collection of document filters used to identify valid documents /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class DocumentSelector : ContainerBase { public DocumentSelector() : this(Enumerable.Empty()) @@ -68,5 +71,7 @@ public static DocumentSelector ForScheme(params string[] schemes) { return new DocumentSelector(schemes.Select(DocumentFilter.ForScheme)); } + + private string DebuggerDisplay => this; } } diff --git a/src/Protocol/Models/DocumentSymbol.cs b/src/Protocol/Models/DocumentSymbol.cs index 01954d64b..0eb9f33f1 100644 --- a/src/Protocol/Models/DocumentSymbol.cs +++ b/src/Protocol/Models/DocumentSymbol.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -8,6 +9,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// hierarchical and they have two ranges: one that encloses its definition and one that points to its most interesting range, /// e.g. the range of an identifier. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class DocumentSymbol { /// @@ -60,5 +62,9 @@ public class DocumentSymbol /// [Optional] public Container Children { get; set; } + + private string DebuggerDisplay => $"[{Kind}] {Name} {{ range: {Range}, selection: {SelectionRange}, detail: {Detail ?? string.Empty} }}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/FileEvent.cs b/src/Protocol/Models/FileEvent.cs index f29e0f242..4841f400a 100644 --- a/src/Protocol/Models/FileEvent.cs +++ b/src/Protocol/Models/FileEvent.cs @@ -1,8 +1,11 @@ -namespace OmniSharp.Extensions.LanguageServer.Protocol.Models +using System.Diagnostics; + +namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { /// /// An event describing a file change. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class FileEvent { /// @@ -14,5 +17,9 @@ public class FileEvent /// The change type. /// public FileChangeType Type { get; set; } + + private string DebuggerDisplay => $"[{Type}] {Uri}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/FileSystemWatcher.cs b/src/Protocol/Models/FileSystemWatcher.cs index 13fbf8f25..0ba792913 100644 --- a/src/Protocol/Models/FileSystemWatcher.cs +++ b/src/Protocol/Models/FileSystemWatcher.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class FileSystemWatcher { /// @@ -21,5 +24,9 @@ public class FileSystemWatcher /// which is 7. /// public WatchKind Kind { get; set; } + + private string DebuggerDisplay => $"[{Kind}] {GlobPattern}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/FoldingRange.cs b/src/Protocol/Models/FoldingRange.cs index 36a507da1..978ea99f5 100644 --- a/src/Protocol/Models/FoldingRange.cs +++ b/src/Protocol/Models/FoldingRange.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -5,6 +6,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// Represents a folding range. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class FoldingRange { /// @@ -36,5 +38,9 @@ public class FoldingRange /// [Optional] public FoldingRangeKind? Kind { get; set; } + + private string DebuggerDisplay => $"[start: (line: {StartLine}{(StartCharacter.HasValue ? $", char: {StartCharacter}" : string.Empty)}), end: (line: {EndLine}, char: {(EndCharacter.HasValue ? $", char: {EndCharacter}" : string.Empty)})]"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/Hover.cs b/src/Protocol/Models/Hover.cs index bd5dfa098..5f1ceeef4 100644 --- a/src/Protocol/Models/Hover.cs +++ b/src/Protocol/Models/Hover.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -5,6 +6,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// The result of a hover request. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Hover { /// @@ -18,5 +20,9 @@ public class Hover /// [Optional] public Range Range { get; set; } + + private string DebuggerDisplay => $"{Contents}{(Range != null ? $" {Range}" : string.Empty)}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/Location.cs b/src/Protocol/Models/Location.cs index b8059bebb..51a42db9a 100644 --- a/src/Protocol/Models/Location.cs +++ b/src/Protocol/Models/Location.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Diagnostics; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Location : IEquatable { /// @@ -44,5 +46,9 @@ public override int GetHashCode() { return !(location1 == location2); } + + private string DebuggerDisplay => $"{{{Range} {Uri}}}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/MarkedString.cs b/src/Protocol/Models/MarkedString.cs index d3582803a..23855b972 100644 --- a/src/Protocol/Models/MarkedString.cs +++ b/src/Protocol/Models/MarkedString.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -15,6 +16,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// Note that markdown strings will be sanitized - that means html will be escaped. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class MarkedString { public MarkedString(string value) @@ -36,5 +38,9 @@ public static implicit operator MarkedString(string value) { return new MarkedString(value); } + + private string DebuggerDisplay => $"{(string.IsNullOrWhiteSpace(Language) ? string.Empty : $"[{Language}] ")}{Value}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/MarkedStringsOrMarkupContent.cs b/src/Protocol/Models/MarkedStringsOrMarkupContent.cs index 729ae4fcb..db6aabdc1 100644 --- a/src/Protocol/Models/MarkedStringsOrMarkupContent.cs +++ b/src/Protocol/Models/MarkedStringsOrMarkupContent.cs @@ -1,8 +1,10 @@ using System.Collections.Generic; +using System.Diagnostics; using System.Linq; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class MarkedStringsOrMarkupContent { public MarkedStringsOrMarkupContent(params MarkedString[] markedStrings) @@ -24,5 +26,9 @@ public MarkedStringsOrMarkupContent(MarkupContent markupContent) public bool HasMarkedStrings => MarkupContent == null; public MarkupContent MarkupContent { get; } public bool HasMarkupContent => MarkedStrings == null; + + private string DebuggerDisplay => $"{(HasMarkedStrings ? string.Join(" ", MarkedStrings.Select(z => z.ToString())) : HasMarkupContent ? MarkupContent.ToString() : string.Empty)}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/MarkupContent.cs b/src/Protocol/Models/MarkupContent.cs index c0b19c47d..4d0e72b6b 100644 --- a/src/Protocol/Models/MarkupContent.cs +++ b/src/Protocol/Models/MarkupContent.cs @@ -1,3 +1,5 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { /// @@ -24,6 +26,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// *Please Note* that clients might sanitize the return markdown. A client could decide to /// remove HTML from the markdown to avoid script execution. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class MarkupContent { /// @@ -35,5 +38,9 @@ public class MarkupContent /// The content itself /// public string Value { get; set; } + + private string DebuggerDisplay => $"[{Kind}] {Value}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/MessageActionItem.cs b/src/Protocol/Models/MessageActionItem.cs index 4fdef7e55..daa71f5dc 100644 --- a/src/Protocol/Models/MessageActionItem.cs +++ b/src/Protocol/Models/MessageActionItem.cs @@ -1,10 +1,17 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class MessageActionItem { /// /// A short title like 'Retry', 'Open Log' etc. /// public string Title { get; set; } + + private string DebuggerDisplay => Title; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/ParameterInformation.cs b/src/Protocol/Models/ParameterInformation.cs index 8fa8bf04c..5759ce719 100644 --- a/src/Protocol/Models/ParameterInformation.cs +++ b/src/Protocol/Models/ParameterInformation.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -6,6 +7,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// Represents a parameter of a callable-signature. A parameter can /// have a label and a doc-comment. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class ParameterInformation { /// @@ -20,5 +22,9 @@ public class ParameterInformation /// [Optional] public StringOrMarkupContent Documentation { get; set; } + + private string DebuggerDisplay => $"{Label}{(Documentation != null ? $" {Documentation}" : string.Empty)}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/ParameterInformationLabel.cs b/src/Protocol/Models/ParameterInformationLabel.cs index e04389b62..3530dc53a 100644 --- a/src/Protocol/Models/ParameterInformationLabel.cs +++ b/src/Protocol/Models/ParameterInformationLabel.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class ParameterInformationLabel { public ParameterInformationLabel((int start, int end) range) @@ -17,12 +20,18 @@ public ParameterInformationLabel(string label) public string Label { get; } public bool IsLabel => Label != null; - public static implicit operator ParameterInformationLabel(string label) { + public static implicit operator ParameterInformationLabel(string label) + { return new ParameterInformationLabel(label); } - public static implicit operator ParameterInformationLabel((int start, int end) range) { + public static implicit operator ParameterInformationLabel((int start, int end) range) + { return new ParameterInformationLabel(range); } + + private string DebuggerDisplay => IsRange ? $"(start: {Range.start}, end: {Range.end})" : IsLabel ? Label : string.Empty; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/Position.cs b/src/Protocol/Models/Position.cs index 8da820d4b..90569d6a7 100644 --- a/src/Protocol/Models/Position.cs +++ b/src/Protocol/Models/Position.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Diagnostics; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Position : IEquatable { public Position() @@ -59,5 +61,9 @@ public static implicit operator Position((int line, int character) value) { return new Position(value.line, value.character); } + + private string DebuggerDisplay => $"(line: {Line}, char: {Character})"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/ProgressToken.cs b/src/Protocol/Models/ProgressToken.cs index 49cbbd87e..baec40177 100644 --- a/src/Protocol/Models/ProgressToken.cs +++ b/src/Protocol/Models/ProgressToken.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using Newtonsoft.Json; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class ProgressToken : IEquatable, IEquatable, IEquatable { private long? _long; @@ -24,8 +26,7 @@ public ProgressToken(string value) public long Long { get => _long ?? 0; - set - { + set { String = null; _long = value; } @@ -35,8 +36,7 @@ public long Long public string String { get => _string; - set - { + set { _string = value; _long = null; } @@ -90,5 +90,9 @@ public bool Equals(string other) { return this.IsString && this.String == other; } + + private string DebuggerDisplay => IsString ? String : IsLong ? Long.ToString() : ""; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/Range.cs b/src/Protocol/Models/Range.cs index f0f4ca0a2..7ed2dd2d8 100644 --- a/src/Protocol/Models/Range.cs +++ b/src/Protocol/Models/Range.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Diagnostics; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Range : IEquatable { public Range() { } @@ -57,5 +59,9 @@ public static implicit operator Range((Position start, Position end) value) { return new Range(value.start, value.end); } + + private string DebuggerDisplay => $"[start: {Start}, end: {End}]"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/ReferenceContext.cs b/src/Protocol/Models/ReferenceContext.cs index 1c28399a9..e6b21cf8f 100644 --- a/src/Protocol/Models/ReferenceContext.cs +++ b/src/Protocol/Models/ReferenceContext.cs @@ -1,3 +1,5 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { public class ReferenceContext @@ -6,5 +8,6 @@ public class ReferenceContext /// Include the declaration of the current symbol. /// public bool IncludeDeclaration { get; set; } + } } diff --git a/src/Protocol/Models/Registration.cs b/src/Protocol/Models/Registration.cs index 112c26157..c4cdfa92e 100644 --- a/src/Protocol/Models/Registration.cs +++ b/src/Protocol/Models/Registration.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -5,6 +6,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// General paramters to to regsiter for a capability. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Registration { /// @@ -23,5 +25,9 @@ public class Registration /// [Optional] public object RegisterOptions { get; set; } + + private string DebuggerDisplay => $"[{Id}] {Method}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/SelectionRange.cs b/src/Protocol/Models/SelectionRange.cs index af622ae79..2ff3cf964 100644 --- a/src/Protocol/Models/SelectionRange.cs +++ b/src/Protocol/Models/SelectionRange.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class SelectionRange { /// @@ -11,5 +14,9 @@ public class SelectionRange /// The parent selection range containing this range. Therefore `parent.range` must contain `this.range`. /// public SelectionRange Parent { get; set; } + + private string DebuggerDisplay => $"{Range} {{{Parent}}}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/ServerInfo.cs b/src/Protocol/Models/ServerInfo.cs index c4a26d024..6e53d5885 100644 --- a/src/Protocol/Models/ServerInfo.cs +++ b/src/Protocol/Models/ServerInfo.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models @@ -7,6 +8,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// /// @since 3.15.0 /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class ServerInfo { /// @@ -19,5 +21,9 @@ public class ServerInfo /// [Optional] public string Version { get; set; } + + private string DebuggerDisplay => string.IsNullOrWhiteSpace(Version) ? Name : $"{Name} ({Version})"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/SignatureInformation.cs b/src/Protocol/Models/SignatureInformation.cs index 2e753be3e..dce52bcca 100644 --- a/src/Protocol/Models/SignatureInformation.cs +++ b/src/Protocol/Models/SignatureInformation.cs @@ -1,4 +1,5 @@ -using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; +using System.Diagnostics; +using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { @@ -7,6 +8,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models /// can have a label, like a function-name, a doc-comment, and /// a set of parameters. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class SignatureInformation { /// @@ -27,5 +29,9 @@ public class SignatureInformation /// [Optional] public Container Parameters { get; set; } + + private string DebuggerDisplay => $"{Label}{Documentation?.ToString() ?? ""}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/StringOrMarkupContent.cs b/src/Protocol/Models/StringOrMarkupContent.cs index 4c583557b..2ce8afc3f 100644 --- a/src/Protocol/Models/StringOrMarkupContent.cs +++ b/src/Protocol/Models/StringOrMarkupContent.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class StringOrMarkupContent { public StringOrMarkupContent(string value) @@ -26,5 +29,9 @@ public static implicit operator StringOrMarkupContent(MarkupContent markupConten { return new StringOrMarkupContent(markupContent); } + + private string DebuggerDisplay => $"{(HasString ? String : HasMarkupContent ? MarkupContent.ToString() : string.Empty)}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/SymbolInformation.cs b/src/Protocol/Models/SymbolInformation.cs index 838d116ea..2b8f8c4d4 100644 --- a/src/Protocol/Models/SymbolInformation.cs +++ b/src/Protocol/Models/SymbolInformation.cs @@ -1,8 +1,10 @@ using System; +using System.Diagnostics; using OmniSharp.Extensions.LanguageServer.Protocol.Serialization; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class SymbolInformation { /// @@ -40,5 +42,9 @@ public class SymbolInformation /// [Optional] public string ContainerName { get; set; } + + private string DebuggerDisplay => $"[{Kind}@{Location}] {Name}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/SymbolInformationOrDocumentSymbol.cs b/src/Protocol/Models/SymbolInformationOrDocumentSymbol.cs index 78e73345f..51ec8c4de 100644 --- a/src/Protocol/Models/SymbolInformationOrDocumentSymbol.cs +++ b/src/Protocol/Models/SymbolInformationOrDocumentSymbol.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public struct SymbolInformationOrDocumentSymbol { private DocumentSymbol _documentSymbol; @@ -40,5 +43,9 @@ public static implicit operator SymbolInformationOrDocumentSymbol(DocumentSymbol { return new SymbolInformationOrDocumentSymbol(value); } + + private string DebuggerDisplay => IsDocumentSymbol ? DocumentSymbol.ToString() : IsDocumentSymbolInformation ? SymbolInformation.ToString() : string.Empty; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/TextDocumentIdentifier.cs b/src/Protocol/Models/TextDocumentIdentifier.cs index 9c09ca361..23a8969b5 100644 --- a/src/Protocol/Models/TextDocumentIdentifier.cs +++ b/src/Protocol/Models/TextDocumentIdentifier.cs @@ -1,7 +1,9 @@ using System; +using System.Diagnostics; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class TextDocumentIdentifier : IEquatable { public TextDocumentIdentifier() @@ -31,7 +33,7 @@ public override bool Equals(object obj) if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; - return Equals((TextDocumentIdentifier) obj); + return Equals((TextDocumentIdentifier)obj); } public override int GetHashCode() => Uri.GetHashCode(); @@ -42,12 +44,16 @@ public override bool Equals(object obj) public static implicit operator TextDocumentIdentifier(DocumentUri uri) { - return new TextDocumentIdentifier() {Uri = uri}; + return new TextDocumentIdentifier() { Uri = uri }; } public static implicit operator TextDocumentIdentifier(string uri) { - return new TextDocumentIdentifier() {Uri = uri}; + return new TextDocumentIdentifier() { Uri = uri }; } + + private string DebuggerDisplay => Uri?.ToString(); + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/TextDocumentItem.cs b/src/Protocol/Models/TextDocumentItem.cs index 0bc874435..5316689e0 100644 --- a/src/Protocol/Models/TextDocumentItem.cs +++ b/src/Protocol/Models/TextDocumentItem.cs @@ -1,5 +1,8 @@ -namespace OmniSharp.Extensions.LanguageServer.Protocol.Models +using System.Diagnostics; + +namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class TextDocumentItem : TextDocumentIdentifier { /// @@ -17,5 +20,9 @@ public class TextDocumentItem : TextDocumentIdentifier /// The content of the opened text document. /// public string Text { get; set; } + + private string DebuggerDisplay => $"({LanguageId}@{Version}) {Uri}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/TextEdit.cs b/src/Protocol/Models/TextEdit.cs index 233147746..237acbd6c 100644 --- a/src/Protocol/Models/TextEdit.cs +++ b/src/Protocol/Models/TextEdit.cs @@ -1,5 +1,8 @@ +using System.Diagnostics; + namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class TextEdit { /// @@ -13,5 +16,9 @@ public class TextEdit /// empty string. /// public string NewText { get; set; } + + private string DebuggerDisplay => $"{Range} {(string.IsNullOrWhiteSpace(NewText) ? string.Empty : NewText.Length > 30 ? NewText.Substring(0, 30) : NewText)}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/Unregistration.cs b/src/Protocol/Models/Unregistration.cs index cfd167de3..c6514a969 100644 --- a/src/Protocol/Models/Unregistration.cs +++ b/src/Protocol/Models/Unregistration.cs @@ -1,8 +1,11 @@ -namespace OmniSharp.Extensions.LanguageServer.Protocol.Models +using System.Diagnostics; + +namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { /// /// General parameters to unregister a request or notification. /// + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class Unregistration { /// @@ -23,5 +26,9 @@ public static implicit operator Unregistration(Registration registration) Method = registration.Method }; } + + private string DebuggerDisplay => $"[{Id}] {Method}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/VersionedTextDocumentIdentifier.cs b/src/Protocol/Models/VersionedTextDocumentIdentifier.cs index 8358cd330..eaa38f5e0 100644 --- a/src/Protocol/Models/VersionedTextDocumentIdentifier.cs +++ b/src/Protocol/Models/VersionedTextDocumentIdentifier.cs @@ -1,7 +1,9 @@ using System; +using System.Diagnostics; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class VersionedTextDocumentIdentifier : TextDocumentIdentifier, IEquatable { public bool Equals(VersionedTextDocumentIdentifier other) @@ -16,7 +18,7 @@ public override bool Equals(object obj) if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; - return Equals((VersionedTextDocumentIdentifier) obj); + return Equals((VersionedTextDocumentIdentifier)obj); } public override int GetHashCode() @@ -35,5 +37,9 @@ public override int GetHashCode() /// The version number of this document. /// public long Version { get; set; } + + private string DebuggerDisplay => $"({Version}) {Uri}"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/src/Protocol/Models/WorkspaceFolder.cs b/src/Protocol/Models/WorkspaceFolder.cs index 15b14c7f4..5c4a25caf 100644 --- a/src/Protocol/Models/WorkspaceFolder.cs +++ b/src/Protocol/Models/WorkspaceFolder.cs @@ -1,7 +1,9 @@ using System; +using System.Diagnostics; namespace OmniSharp.Extensions.LanguageServer.Protocol.Models { + [DebuggerDisplay("{" + nameof(DebuggerDisplay) + ",nq}")] public class WorkspaceFolder : IEquatable { /// @@ -26,7 +28,7 @@ public override bool Equals(object obj) if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != this.GetType()) return false; - return Equals((WorkspaceFolder) obj); + return Equals((WorkspaceFolder)obj); } public override int GetHashCode() @@ -40,5 +42,9 @@ public override int GetHashCode() public static bool operator ==(WorkspaceFolder left, WorkspaceFolder right) => Equals(left, right); public static bool operator !=(WorkspaceFolder left, WorkspaceFolder right) => !Equals(left, right); + + private string DebuggerDisplay => $"{Name} ({Uri})"; + /// + public override string ToString() => DebuggerDisplay; } } diff --git a/test/Lsp.Tests/FoundationTests.cs b/test/Lsp.Tests/FoundationTests.cs index 4c5e47129..51804f090 100644 --- a/test/Lsp.Tests/FoundationTests.cs +++ b/test/Lsp.Tests/FoundationTests.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Reflection; using System.Text.RegularExpressions; @@ -33,6 +34,33 @@ public FoundationTests(ITestOutputHelper outputHelper) _logger = new TestLoggerFactory(outputHelper).CreateLogger(typeof(FoundationTests)); } + [Theory(DisplayName = "Should not throw when accessing the debugger properties")] + [ClassData(typeof(DebuggerDisplayTypes))] + public void Debugger_Display_Should_Not_Throw(Type type) + { + var instance = Activator.CreateInstance(type); + var property = type.GetProperty("DebuggerDisplay", BindingFlags.NonPublic | BindingFlags.Instance); + Func a1 = () => property.GetValue(instance) as string; + Func a2 = () => instance.ToString(); + + a1.Should().NotThrow().And.NotBeNull(); + a2.Should().NotThrow().And.NotBeNull(); + } + + class DebuggerDisplayTypes : TheoryData + { + public DebuggerDisplayTypes() + { + foreach (var item in typeof(DocumentSymbol).Assembly.ExportedTypes + .Where(z => z.GetCustomAttributes().Any(z => z.Value.StartsWith("{DebuggerDisplay"))) + .Where(z => z.GetConstructors().Any(z => z.GetParameters().Length == 0)) + ) + { + Add(item); + } + } + } + [Theory(DisplayName = "Params types should have a method attribute")] [ClassData(typeof(ParamsShouldHaveMethodAttributeData))] public void ParamsShouldHaveMethodAttribute(Type type) diff --git a/test/coverage/Client-Tests/coverage.netcoreapp2.1.info b/test/coverage/Client-Tests/coverage.netcoreapp2.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/Client-Tests/coverage.netcoreapp2.1.json b/test/coverage/Client-Tests/coverage.netcoreapp2.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/Client-Tests/coverage.netcoreapp2.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/coverage/Client-Tests/coverage.netcoreapp3.1.info b/test/coverage/Client-Tests/coverage.netcoreapp3.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/Client-Tests/coverage.netcoreapp3.1.json b/test/coverage/Client-Tests/coverage.netcoreapp3.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/Client-Tests/coverage.netcoreapp3.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/coverage/Dap-Tests/coverage.netcoreapp2.1.info b/test/coverage/Dap-Tests/coverage.netcoreapp2.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/Dap-Tests/coverage.netcoreapp2.1.json b/test/coverage/Dap-Tests/coverage.netcoreapp2.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/Dap-Tests/coverage.netcoreapp2.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/coverage/Dap-Tests/coverage.netcoreapp3.1.info b/test/coverage/Dap-Tests/coverage.netcoreapp3.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/Dap-Tests/coverage.netcoreapp3.1.json b/test/coverage/Dap-Tests/coverage.netcoreapp3.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/Dap-Tests/coverage.netcoreapp3.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/coverage/Generation-Tests/coverage.netcoreapp2.1.info b/test/coverage/Generation-Tests/coverage.netcoreapp2.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/Generation-Tests/coverage.netcoreapp2.1.json b/test/coverage/Generation-Tests/coverage.netcoreapp2.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/Generation-Tests/coverage.netcoreapp2.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/coverage/Generation-Tests/coverage.netcoreapp3.1.info b/test/coverage/Generation-Tests/coverage.netcoreapp3.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/Generation-Tests/coverage.netcoreapp3.1.json b/test/coverage/Generation-Tests/coverage.netcoreapp3.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/Generation-Tests/coverage.netcoreapp3.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/coverage/JsonRpc-Tests/coverage.netcoreapp2.1.info b/test/coverage/JsonRpc-Tests/coverage.netcoreapp2.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/JsonRpc-Tests/coverage.netcoreapp2.1.json b/test/coverage/JsonRpc-Tests/coverage.netcoreapp2.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/JsonRpc-Tests/coverage.netcoreapp2.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/coverage/JsonRpc-Tests/coverage.netcoreapp3.1.info b/test/coverage/JsonRpc-Tests/coverage.netcoreapp3.1.info new file mode 100644 index 000000000..e69de29bb diff --git a/test/coverage/JsonRpc-Tests/coverage.netcoreapp3.1.json b/test/coverage/JsonRpc-Tests/coverage.netcoreapp3.1.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/test/coverage/JsonRpc-Tests/coverage.netcoreapp3.1.json @@ -0,0 +1 @@ +{} \ No newline at end of file