Skip to content

Commit ba6aa63

Browse files
committed
Merge remote-tracking branch 'upstream/main' into IntegrationTestQuestionMark
2 parents c820701 + a6e050f commit ba6aa63

File tree

7 files changed

+76
-47
lines changed

7 files changed

+76
-47
lines changed

Directory.Packages.props

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
<_MicrosoftWebToolsPackageVersion>17.9.67-preview-0001</_MicrosoftWebToolsPackageVersion>
99
<_MicrosoftVisualStudioShellPackagesVersion>17.9.36524</_MicrosoftVisualStudioShellPackagesVersion>
1010
<_MicrosoftVisualStudioPackagesVersion>17.10.72-preview</_MicrosoftVisualStudioPackagesVersion>
11-
<_VisualStudioLanguageServerProtocolVersion>17.10.34-preview</_VisualStudioLanguageServerProtocolVersion>
11+
<_VisualStudioLanguageServerProtocolVersion>17.10.13-preview</_VisualStudioLanguageServerProtocolVersion>
1212
<_MicrosoftExtensionsPackageVersion>8.0.0</_MicrosoftExtensionsPackageVersion>
1313
<_BenchmarkDotNetPackageVersion>0.13.5.2136</_BenchmarkDotNetPackageVersion>
14-
<_MicrosoftVisualStudioExtensibilityTestingVersion>0.1.187-beta</_MicrosoftVisualStudioExtensibilityTestingVersion>
14+
<_MicrosoftVisualStudioExtensibilityTestingVersion>0.1.169-beta</_MicrosoftVisualStudioExtensibilityTestingVersion>
1515
<_MicrosoftCodeAnalysisAnalyzersPackageVersion>3.11.0-beta1.24170.2</_MicrosoftCodeAnalysisAnalyzersPackageVersion>
1616
<_MicrosoftVisualStudioLanguageServicesPackageVersion>$(MicrosoftVisualStudioLanguageServicesPackageVersion)</_MicrosoftVisualStudioLanguageServicesPackageVersion>
1717
<_XunitPackageVersion>2.6.3</_XunitPackageVersion>
@@ -67,7 +67,7 @@
6767
<PackageVersion Include="Microsoft.Internal.VisualStudio.Interop" Version="$(_MicrosoftVisualStudioShellPackagesVersion)" />
6868
<PackageVersion Include="Microsoft.NET.Sdk.Razor" Version="$(MicrosoftNETSdkRazorPackageVersion)" />
6969
<PackageVersion Include="Microsoft.VisualStudio.Copilot" Version="0.2.28-beta" />
70-
<PackageVersion Include="Microsoft.VisualStudio.ComponentModelHost" Version="17.10.29-preview" />
70+
<PackageVersion Include="Microsoft.VisualStudio.ComponentModelHost" Version="17.10.9-preview" />
7171
<PackageVersion Include="Microsoft.VisualStudio.Editor" Version="$(_MicrosoftVisualStudioPackagesVersion)" />
7272
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Testing.Xunit" Version="$(_MicrosoftVisualStudioExtensibilityTestingVersion)" />
7373
<PackageVersion Include="Microsoft.VisualStudio.Extensibility.Testing.SourceGenerator" Version="$(_MicrosoftVisualStudioExtensibilityTestingVersion)" />
@@ -76,10 +76,10 @@
7676
<PackageVersion Include="Microsoft.VisualStudio.Language.Intellisense" Version="$(_MicrosoftVisualStudioPackagesVersion)" />
7777
<!--
7878
This package should use _VisualStudioLanguageServerProtocolVersion, but as of updating there was
79-
a mismatch in published versions (17.10.108-preview was not published).Next time this is updated please switch back to
80-
_VisualStudioLanguageServerProtocolVersion if possible
81-
-->
82-
<PackageVersion Include="Microsoft.VisualStudio.LanguageServer.Client.Implementation" Version="17.10.108-preview" />
79+
a mismatch in published versions (17.10.13-preview was not published). Next time this is updated please switch back to
80+
_VisualStudioLanguageServerProtocolVersion if possible
81+
-->
82+
<PackageVersion Include="Microsoft.VisualStudio.LanguageServer.Client.Implementation" Version="17.10.16-preview" />
8383
<PackageVersion Include="Microsoft.VisualStudio.LanguageServer.Protocol" Version="$(_VisualStudioLanguageServerProtocolVersion)" />
8484
<PackageVersion Include="Microsoft.VisualStudio.LanguageServer.Protocol.Extensions" Version="$(_VisualStudioLanguageServerProtocolVersion)" />
8585
<PackageVersion Include="Microsoft.VisualStudio.LanguageServer.Protocol.Internal" Version="$(_VisualStudioLanguageServerProtocolVersion)" />

src/Razor/src/Microsoft.VisualStudio.LanguageServer.ContainedLanguage/DefaultLSPRequestInvoker.cs

Lines changed: 63 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
using System;
55
using System.Collections.Generic;
66
using System.Composition;
7+
using System.Linq;
78
using System.Runtime.CompilerServices;
89
using System.Threading;
910
using System.Threading.Tasks;
10-
using Microsoft.AspNetCore.Razor.PooledObjects;
1111
using Microsoft.VisualStudio.LanguageServer.Client;
1212
using Microsoft.VisualStudio.LanguageServer.Protocol;
1313
using Microsoft.VisualStudio.Text;
@@ -47,16 +47,15 @@ public DefaultLSPRequestInvoker(
4747
_serializer.AddVSInternalExtensionConverters();
4848
}
4949

50-
[Obsolete]
5150
public override Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMultipleServersAsync<TIn, TOut>(string method, string contentType, TIn parameters, CancellationToken cancellationToken)
5251
{
53-
return RequestMultipleServerCoreAsync<TIn, TOut>(method, parameters, cancellationToken);
52+
var capabilitiesFilter = _fallbackCapabilitiesFilterResolver.Resolve(method);
53+
return RequestMultipleServerCoreAsync<TIn, TOut>(method, contentType, capabilitiesFilter, parameters, cancellationToken);
5454
}
5555

56-
[Obsolete]
5756
public override Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMultipleServersAsync<TIn, TOut>(string method, string contentType, Func<JToken, bool> capabilitiesFilter, TIn parameters, CancellationToken cancellationToken)
5857
{
59-
return RequestMultipleServerCoreAsync<TIn, TOut>(method, parameters, cancellationToken);
58+
return RequestMultipleServerCoreAsync<TIn, TOut>(method, contentType, capabilitiesFilter, parameters, cancellationToken);
6059
}
6160

6261
public override Task<ReinvokeResponse<TOut>> ReinvokeRequestOnServerAsync<TIn, TOut>(
@@ -82,12 +81,17 @@ public override async Task<ReinvokeResponse<TOut>> ReinvokeRequestOnServerAsync<
8281
}
8382

8483
var serializedParams = JToken.FromObject(parameters);
85-
var response = await _languageServiceBroker.RequestAsync(
86-
new GeneralRequest<TIn, TOut> { LanguageServerName = languageServerName, Method = method, Request = parameters },
84+
#pragma warning disable CS0618 // Type or member is obsolete. Temporary until we resolve the changes to the ILanguageServiceBroker2 interface.
85+
var (languageClient, resultToken) = await _languageServiceBroker.RequestAsync(
86+
Array.Empty<string>(),
87+
capabilitiesFilter,
88+
languageServerName,
89+
method,
90+
serializedParams,
8791
cancellationToken);
92+
#pragma warning restore CS0618 // Type or member is obsolete
8893

89-
// No callers actually use the languageClient when handling the response.
90-
var result = response is not null ? new ReinvokeResponse<TOut>(languageClient:null!, response) : default;
94+
var result = resultToken is not null ? new ReinvokeResponse<TOut>(languageClient!, resultToken.ToObject<TOut>(_serializer)!) : default;
9195
return result;
9296
}
9397

@@ -105,45 +109,60 @@ public override async Task<ReinvokeResponse<TOut>> ReinvokeRequestOnServerAsync<
105109
TIn parameters,
106110
CancellationToken cancellationToken)
107111
{
112+
var serializedParams = JToken.FromObject(parameters);
113+
JToken ParameterFactory(ITextSnapshot _)
114+
{
115+
return serializedParams;
116+
}
117+
118+
#pragma warning disable CS0618 // Type or member is obsolete. Temporary until we resolve the changes to the ILanguageServiceBroker2 interface.
108119
var response = await _languageServiceBroker.RequestAsync(
109-
new DocumentRequest<TIn, TOut>()
110-
{
111-
TextBuffer = textBuffer,
112-
LanguageServerName = languageServerName,
113-
ParameterFactory = _ => parameters,
114-
Method = method,
115-
},
120+
textBuffer,
121+
capabilitiesFilter,
122+
languageServerName,
123+
method,
124+
ParameterFactory,
116125
cancellationToken);
126+
#pragma warning restore CS0618 // Type or member is obsolete
117127

118128
if (response is null)
119129
{
120130
return null;
121131
}
122132

123-
var reinvocationResponse = new ReinvocationResponse<TOut>(languageServerName, response);
133+
var responseBody = default(TOut);
134+
if (response.Response is not null)
135+
{
136+
responseBody = response.Response.ToObject<TOut>(_serializer);
137+
}
138+
139+
var reinvocationResponse = new ReinvocationResponse<TOut>(response.LanguageClientName, responseBody);
124140
return reinvocationResponse;
125141
}
126142

127-
private async Task<IEnumerable<ReinvokeResponse<TOut>>> RequestMultipleServerCoreAsync<TIn, TOut>(string method, TIn parameters, CancellationToken cancellationToken)
143+
private async Task<IEnumerable<ReinvokeResponse<TOut>>> RequestMultipleServerCoreAsync<TIn, TOut>(string method, string contentType, Func<JToken, bool> capabilitiesFilter, TIn parameters, CancellationToken cancellationToken)
128144
where TIn : notnull
129145
{
130146
if (string.IsNullOrEmpty(method))
131147
{
132148
throw new ArgumentException("message", nameof(method));
133149
}
134150

135-
var reinvokeResponses = _languageServiceBroker.RequestAllAsync(
136-
new GeneralRequest<TIn, TOut>() { LanguageServerName = null, Method = method, Request = parameters},
151+
var serializedParams = JToken.FromObject(parameters);
152+
153+
#pragma warning disable CS0618 // Type or member is obsolete
154+
var clientAndResultTokenPairs = await _languageServiceBroker.RequestMultipleAsync(
155+
new[] { contentType },
156+
capabilitiesFilter,
157+
method,
158+
serializedParams,
137159
cancellationToken).ConfigureAwait(false);
160+
#pragma warning restore CS0618 // Type or member is obsolete
138161

139-
using var _ = ListPool<ReinvokeResponse<TOut>>.GetPooledObject(out var responses);
140-
await foreach (var reinvokeResponse in reinvokeResponses)
141-
{
142-
// No callers actually use the languageClient when handling the response.
143-
responses.Add(new ReinvokeResponse<TOut>(languageClient:null!, reinvokeResponse.response!));
144-
}
162+
// a little ugly - tuple deconstruction in lambda arguments doesn't work - https://github.com/dotnet/csharplang/issues/258
163+
var results = clientAndResultTokenPairs.Select((clientAndResultToken) => clientAndResultToken.Item2 is not null ? new ReinvokeResponse<TOut>(clientAndResultToken.Item1, clientAndResultToken.Item2.ToObject<TOut>(_serializer)!) : default);
145164

146-
return responses.ToArray();
165+
return results;
147166
}
148167

149168
public override IAsyncEnumerable<ReinvocationResponse<TOut>> ReinvokeRequestOnMultipleServersAsync<TIn, TOut>(
@@ -163,13 +182,27 @@ public override async IAsyncEnumerable<ReinvocationResponse<TOut>> ReinvokeReque
163182
TIn parameters,
164183
[EnumeratorCancellation] CancellationToken cancellationToken)
165184
{
166-
var requests = _languageServiceBroker.RequestAllAsync(
167-
new DocumentRequest<TIn, TOut> { ParameterFactory = _ => parameters, Method = method, TextBuffer = textBuffer },
185+
var serializedParams = JToken.FromObject(parameters);
186+
Func<ITextSnapshot, JToken> parameterFactory = (_) => serializedParams;
187+
188+
#pragma warning disable CS0618 // Type or member is obsolete. Temporary until we resolve the changes to the ILanguageServiceBroker2 interface.
189+
var requests = _languageServiceBroker.RequestMultipleAsync(
190+
textBuffer,
191+
capabilitiesFilter,
192+
method,
193+
parameterFactory,
168194
cancellationToken);
195+
#pragma warning restore CS0618 // Type or member is obsolete
169196

170197
await foreach (var response in requests)
171198
{
172-
yield return new ReinvocationResponse<TOut>(response.client, response.response);
199+
var responseBody = default(TOut);
200+
if (response.Response is not null)
201+
{
202+
responseBody = response.Response.ToObject<TOut>(_serializer);
203+
var reinvocationResponse = new ReinvocationResponse<TOut>(response.LanguageClientName, responseBody);
204+
yield return reinvocationResponse;
205+
}
173206
}
174207
}
175208
}

src/Razor/src/Microsoft.VisualStudio.LanguageServer.ContainedLanguage/LSPRequestInvoker.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ public abstract Task<ReinvokeResponse<TOut>> ReinvokeRequestOnServerAsync<TIn, T
7878
/// <param name="cancellationToken"></param>
7979
/// <returns></returns>
8080
/// <remarks>When operating on a document the <see cref="ITextBuffer"/> overload should be used, since it guarantees ordering.</remarks>
81-
[Obsolete("New callers should use a method that returns a ReinvocationResponse rather than an a ReinvokeResponse")]
8281
public abstract Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMultipleServersAsync<TIn, TOut>(
8382
string method,
8483
string contentType,
@@ -98,7 +97,6 @@ public abstract Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMulti
9897
/// <param name="cancellationToken"></param>
9998
/// <returns></returns>
10099
/// <remarks>When operating on a document the <see cref="ITextBuffer"/> overload should be used, since it guarantees ordering.</remarks>
101-
[Obsolete("New callers should use a method that returns a ReinvocationResponse rather than an a ReinvokeResponse")]
102100
public abstract Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMultipleServersAsync<TIn, TOut>(
103101
string method,
104102
string contentType,

src/Razor/src/Microsoft.VisualStudio.LanguageServer.ContainedLanguage/MessageInterception/InterceptionMiddleLayer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace Microsoft.VisualStudio.LanguageServer.ContainedLanguage.MessageInterce
1313
/// Receives notification messages from the server and invokes any applicable message interception layers.
1414
/// </summary>
1515
#pragma warning disable CS0618 // Type or member is obsolete. Temporary for compatibility with ILanguageClientMiddleLayer
16-
public class InterceptionMiddleLayer : ILanguageClientMiddleLayer, ILanguageClientMiddleLayer2<JToken>
16+
public class InterceptionMiddleLayer : ILanguageClientMiddleLayer
1717
#pragma warning restore CS0618 // Type or member is obsolete
1818
{
1919
private readonly InterceptorManager _interceptorManager;

src/Razor/src/Microsoft.VisualStudio.LanguageServices.Razor/LanguageClient/DefaultRazorLanguageClientMiddleLayer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
namespace Microsoft.VisualStudio.Razor.LanguageClient;
1010

1111
[Export(typeof(RazorLanguageClientMiddleLayer))]
12-
internal class DefaultRazorLanguageClientMiddleLayer : RazorLanguageClientMiddleLayer //, ILanguageClientMiddleLayer2<JToken>
12+
internal class DefaultRazorLanguageClientMiddleLayer : RazorLanguageClientMiddleLayer
1313
{
1414
public override bool CanHandle(string methodName) => false;
1515

src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/LanguageClient/DefaultLSPRequestInvokerTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ await requestInvoker.ReinvokeRequestOnServerAsync<object, object>(
108108

109109
// Assert
110110
Assert.True(called);
111-
}
111+
}
112112

113113
[Fact]
114114
public async Task CustomRequestServerAsync_InvokesHtmlLanguageClient()
@@ -156,9 +156,9 @@ private static ILanguageServiceBroker2 CreateLanguageServiceBroker(Action<string
156156
{
157157
var broker = new StrictMock<ILanguageServiceBroker2>();
158158
#pragma warning disable CS0618 // Type or member is obsolete
159-
broker.Setup(b => b.RequestAsync(It.IsAny<Request<object,object>>(), It.IsAny<CancellationToken>()))
160-
.ReturnsAsync((null))
161-
.Callback((Request<object,object> request, CancellationToken _) => callback(request.Method));
159+
broker.Setup(b => b.RequestAsync(It.IsAny<string[]>(), It.IsAny<Func<JToken, bool>>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<JToken>(), It.IsAny<CancellationToken>()))
160+
.ReturnsAsync((null, null))
161+
.Callback((string[] _, Func<JToken, bool> _, string _, string method, JToken _, CancellationToken _) => callback(method));
162162
#pragma warning restore CS0618 // Type or member is obsolete
163163

164164
return broker.Object;

src/Razor/test/Microsoft.VisualStudio.LanguageServices.Razor.Test/LanguageClient/TestLSPRequestInvoker.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ public TestLSPRequestInvoker(CSharpTestLspServer csharpServer)
3030
_csharpServer = csharpServer;
3131
}
3232

33-
[Obsolete]
3433
public override Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMultipleServersAsync<TIn, TOut>(
3534
string method,
3635
string contentType,
@@ -40,7 +39,6 @@ public override Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMulti
4039
throw new NotImplementedException();
4140
}
4241

43-
[Obsolete]
4442
public override Task<IEnumerable<ReinvokeResponse<TOut>>> ReinvokeRequestOnMultipleServersAsync<TIn, TOut>(
4543
string method,
4644
string contentType,

0 commit comments

Comments
 (0)