Skip to content

Commit b00f395

Browse files
Fixed how workspace folders are requested
1 parent 5670a2a commit b00f395

File tree

5 files changed

+46
-6
lines changed

5 files changed

+46
-6
lines changed

src/JsonRpc/IResponseRouter.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ public interface IResponseRouter
77
{
88
void SendNotification<T>(string method, T @params);
99
Task<TResponse> SendRequest<T, TResponse>(string method, T @params);
10+
Task<TResponse> SendRequest<TResponse>(string method);
1011
Task SendRequest<T>(string method, T @params);
1112
TaskCompletionSource<JToken> GetRequest(long id);
1213
}
13-
}
14+
}

src/JsonRpc/ResponseRouter.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,34 @@ public async Task<TResponse> SendRequest<T, TResponse>(string method, T @params)
5454
}
5555
}
5656

57+
public async Task<TResponse> SendRequest<TResponse>(string method)
58+
{
59+
long nextId;
60+
lock (_lock)
61+
{
62+
nextId = _id++;
63+
}
64+
65+
var tcs = new TaskCompletionSource<JToken>();
66+
_requests.TryAdd(nextId, tcs);
67+
68+
_outputHandler.Send(new Client.Request() {
69+
Method = method,
70+
Params = null,
71+
Id = nextId
72+
});
73+
74+
try
75+
{
76+
var result = await tcs.Task;
77+
return result.ToObject<TResponse>(_serializer.JsonSerializer);
78+
}
79+
finally
80+
{
81+
_requests.TryRemove(nextId, out var _);
82+
}
83+
}
84+
5785
public async Task SendRequest<T>(string method, T @params)
5886
{
5987
long nextId;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
namespace OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities
22
{
3-
public class WorkspaceFolderCapability : DynamicCapability, ConnectedCapability<IWorkspaceFolderHandler> { }
3+
public class WorkspaceFolderCapability : DynamicCapability { }
44
}

src/Protocol/Workspace/IWorkspaceFolderHandler.cs renamed to src/Protocol/Workspace/WorkspaceFoldersExtensions.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using OmniSharp.Extensions.JsonRpc;
22
using OmniSharp.Extensions.LanguageServer.Protocol.Client.Capabilities;
33
using OmniSharp.Extensions.LanguageServer.Protocol.Models;
4+
using System.Threading.Tasks;
45

56
// ReSharper disable CheckNamespace
67

@@ -12,7 +13,12 @@ public static partial class WorkspaceNames
1213
public const string WorkspaceFolders = "workspace/workspaceFolders";
1314
}
1415

15-
[Parallel, Method(WorkspaceFolders)]
16-
public interface IWorkspaceFolderHandler : IRequestHandler<Container<WorkspaceFolder>>, IRegistration<WorkspaceFolderRegistrationOptions>, ICapability<WorkspaceFolderCapability> { }
16+
public static class WorkspaceFoldersExtensions
17+
{
18+
public static Task<Container<WorkspaceFolder>> WorkspaceFolders(this IResponseRouter mediator)
19+
{
20+
return mediator.SendRequest<Container<WorkspaceFolder>>(WorkspaceNames.WorkspaceFolders);
21+
}
22+
}
1723
}
1824

src/Server/LanguageServer.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,14 +220,14 @@ async Task<InitializeResult> IRequestHandler<InitializeParams, InitializeResult>
220220
ColorProvider = ccp.GetStaticOptions(textDocumentCapabilities.ColorProvider).Get<IColorOptions, StaticColorOptions>(ColorOptions.Of),
221221
};
222222

223-
if (_collection.ContainsHandler(typeof(IWorkspaceFolderHandler)))
223+
if (_collection.ContainsHandler(typeof(IDidChangeWorkspaceFoldersHandler)))
224224
{
225225
serverCapabilities.Workspace = new WorkspaceServerCapabilities()
226226
{
227227
WorkspaceFolders = new WorkspaceFolderOptions()
228228
{
229229
Supported = true,
230-
ChangeNotifications = _collection.ContainsHandler(typeof(IDidChangeWorkspaceFoldersHandler))
230+
ChangeNotifications = Guid.NewGuid().ToString()
231231
}
232232
};
233233
}
@@ -358,6 +358,11 @@ public Task<TResponse> SendRequest<T, TResponse>(string method, T @params)
358358
return _responseRouter.SendRequest<T, TResponse>(method, @params);
359359
}
360360

361+
public Task<TResponse> SendRequest<TResponse>(string method)
362+
{
363+
return _responseRouter.SendRequest<TResponse>(method);
364+
}
365+
361366
public Task SendRequest<T>(string method, T @params)
362367
{
363368
return _responseRouter.SendRequest(method, @params);

0 commit comments

Comments
 (0)