Skip to content

Commit 79667a2

Browse files
Merge pull request #70 from OmniSharp/feature/resolve-routing
Route handlers for `*/resolve` endpoints
2 parents 039aa27 + da8d11f commit 79667a2

28 files changed

+826
-32
lines changed

LSP.sln

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
Microsoft Visual Studio Solution File, Format Version 12.00
22
# Visual Studio 15
3-
VisualStudioVersion = 15.0.27004.2009
3+
VisualStudioVersion = 15.0.27130.2003
44
MinimumVisualStudioVersion = 10.0.40219.1
55
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{D764E024-3D3F-4112-B932-2DB722A1BACC}"
6+
ProjectSection(SolutionItems) = preProject
7+
src\Directory.Build.props = src\Directory.Build.props
8+
EndProjectSection
69
EndProject
710
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{2F323ED5-EBF8-45E1-B9D3-C014561B3DDA}"
811
EndProject

src/Protocol/Document/ICodeLensResolveHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ public static partial class DocumentNames
1212
}
1313

1414
[Parallel, Method(CodeLensResolve)]
15-
public interface ICodeLensResolveHandler : IRequestHandler<CodeLens, CodeLens> { }
15+
public interface ICodeLensResolveHandler : ICanBeResolvedHandler<CodeLens> { }
1616
}

src/Protocol/Document/ICompletionResolveHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,5 @@ public static partial class DocumentNames
1212
}
1313

1414
[Serial, Method(CompletionResolve)]
15-
public interface ICompletionResolveHandler : IRequestHandler<CompletionItem, CompletionItem> { }
15+
public interface ICompletionResolveHandler : ICanBeResolvedHandler<CompletionItem> { }
1616
}

src/Protocol/Document/IDocumentLinkHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ public static partial class DocumentNames
1313
}
1414

1515
[Parallel, Method(DocumentLink)]
16-
public interface IDocumentLinkHandler : IRequestHandler<DocumentLinkParams, DocumentLink>, IRegistration<DocumentLinkRegistrationOptions>, ICapability<DocumentLinkCapability> { }
16+
public interface IDocumentLinkHandler : IRequestHandler<DocumentLinkParams, DocumentLinkContainer>, IRegistration<DocumentLinkRegistrationOptions>, ICapability<DocumentLinkCapability> { }
1717
}

src/Protocol/Models/CodeLens.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
1212
/// A code lens is _unresolved_ when no command is associated to it. For performance
1313
/// reasons the creation of a code lens and resolving should be done in two stages.
1414
/// </summary>
15-
public class CodeLens
15+
public class CodeLens : ICanBeResolved
1616
{
1717
/// <summary>
1818
/// The range in which this code lens is valid. Should only span a single line.

src/Protocol/Models/CodeLensContainer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System.Collections.Generic;
1+
using System.Collections.Generic;
22
using System.Collections.ObjectModel;
33
using System.Linq;
44

@@ -33,4 +33,4 @@ public static implicit operator CodeLensContainer(List<CodeLens> items)
3333
return new CodeLensContainer(items);
3434
}
3535
}
36-
}
36+
}

src/Protocol/Models/CompletionItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
77
{
8-
public class CompletionItem
8+
public class CompletionItem : ICanBeResolved
99
{
1010
/// <summary>
1111
/// The label of this completion item. By default

src/Protocol/Models/CompletionList.cs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,22 @@ namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
99
/// Represents a collection of [completion items](#CompletionItem) to be presented
1010
/// in the editor.
1111
/// </summary>
12-
public class CompletionList
12+
public class CompletionList : Container<CompletionItem>
1313
{
14-
public CompletionList(IEnumerable<CompletionItem> items)
14+
public CompletionList() : base(Enumerable.Empty<CompletionItem>()) { }
15+
public CompletionList(bool isIncomplete) : base(Enumerable.Empty<CompletionItem>())
1516
{
16-
Items = items;
17+
IsIncomplete = isIncomplete;
18+
}
19+
20+
public CompletionList(IEnumerable<CompletionItem> items) : base(items) { }
21+
public CompletionList(IEnumerable<CompletionItem> items, bool isIncomplete) : base(items)
22+
{
23+
IsIncomplete = isIncomplete;
1724
}
1825

19-
public CompletionList(IEnumerable<CompletionItem> items, bool isIncomplete) : this(items)
26+
public CompletionList(params CompletionItem[] items) : base(items) { }
27+
public CompletionList(bool isIncomplete, params CompletionItem[] items) : base(items)
2028
{
2129
IsIncomplete = isIncomplete;
2230
}
@@ -30,7 +38,7 @@ public CompletionList(IEnumerable<CompletionItem> items, bool isIncomplete) : th
3038
/// <summary>
3139
/// The completion items.
3240
/// </summary>
33-
public IEnumerable<CompletionItem> Items { get; }
41+
public IEnumerable<CompletionItem> Items => this;
3442

3543
public static implicit operator CompletionList(CompletionItem[] items)
3644
{
@@ -49,7 +57,7 @@ public static implicit operator CompletionList(List<CompletionItem> items)
4957

5058
public static implicit operator CompletionItem[] (CompletionList list)
5159
{
52-
return list.Items.ToArray();
60+
return list.ToArray();
5361
}
5462
}
5563
}

src/Protocol/Models/ContainerBase.cs

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
using System.Collections;
1+
using System;
2+
using System.Collections;
23
using System.Collections.Generic;
34
using Newtonsoft.Json;
45
using Newtonsoft.Json.Serialization;
56

67
namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
78
{
8-
public abstract class ContainerBase<T> : IEnumerable<T>
9+
public abstract class ContainerBase<T> : IEnumerable<T>, IEquatable<ContainerBase<T>>
910
{
1011
private readonly IEnumerable<T> _items;
1112

@@ -14,14 +15,40 @@ public ContainerBase(IEnumerable<T> items)
1415
_items = items;
1516
}
1617

18+
public override bool Equals(object obj)
19+
{
20+
return Equals(obj as ContainerBase<T>);
21+
}
22+
23+
public bool Equals(ContainerBase<T> other)
24+
{
25+
return other != null &&
26+
EqualityComparer<IEnumerable<T>>.Default.Equals(_items, other._items);
27+
}
28+
1729
public IEnumerator<T> GetEnumerator()
1830
{
1931
return _items.GetEnumerator();
2032
}
2133

34+
public override int GetHashCode()
35+
{
36+
return -566117206 + EqualityComparer<IEnumerable<T>>.Default.GetHashCode(_items);
37+
}
38+
2239
IEnumerator IEnumerable.GetEnumerator()
2340
{
2441
return GetEnumerator();
2542
}
43+
44+
public static bool operator ==(ContainerBase<T> base1, ContainerBase<T> base2)
45+
{
46+
return EqualityComparer<ContainerBase<T>>.Default.Equals(base1, base2);
47+
}
48+
49+
public static bool operator !=(ContainerBase<T> base1, ContainerBase<T> base2)
50+
{
51+
return !(base1 == base2);
52+
}
2653
}
2754
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
using System.Collections.Generic;
2+
using System.Collections.ObjectModel;
3+
using System.Linq;
4+
5+
namespace OmniSharp.Extensions.LanguageServer.Protocol.Models
6+
{
7+
public class DocumentLinkContainer : Container<DocumentLink>
8+
{
9+
public DocumentLinkContainer() : this(Enumerable.Empty<DocumentLink>())
10+
{
11+
}
12+
13+
public DocumentLinkContainer(IEnumerable<DocumentLink> items) : base(items)
14+
{
15+
}
16+
17+
public DocumentLinkContainer(params DocumentLink[] items) : base(items)
18+
{
19+
}
20+
21+
public static implicit operator DocumentLinkContainer(DocumentLink[] items)
22+
{
23+
return new DocumentLinkContainer(items);
24+
}
25+
26+
public static implicit operator DocumentLinkContainer(Collection<DocumentLink> items)
27+
{
28+
return new DocumentLinkContainer(items);
29+
}
30+
31+
public static implicit operator DocumentLinkContainer(List<DocumentLink> items)
32+
{
33+
return new DocumentLinkContainer(items);
34+
}
35+
}
36+
}

0 commit comments

Comments
 (0)