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