Skip to content

Commit 5db4bdc

Browse files
authored
Merge branch 'main' into CohostDocumentHandling
2 parents 3106f0a + ae1ba70 commit 5db4bdc

File tree

3 files changed

+37
-21
lines changed

3 files changed

+37
-21
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Debug from .csproj and .sln [#5876](https://github.com/dotnet/vscode-csharp/issues/5876)
55

66
# 2.77.x
7+
* Bump xamlTools to 17.14.36106.43 (PR: [#8260](https://github.com/dotnet/vscode-csharp/pull/8260))
78
* Bump Razor to 10.0.0-preview.25256.6 (PR: [#8259](https://github.com/dotnet/vscode-csharp/pull/8259))
89
* Improve document handling in VS Code and cohosting (#11825) (PR: [#11825](https://github.com/dotnet/razor/pull/11825))
910
* Use new select and order method (#11826) (PR: [#11826](https://github.com/dotnet/razor/pull/11826))

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"omniSharp": "1.39.12",
4545
"razor": "10.0.0-preview.25256.6",
4646
"razorOmnisharp": "7.0.0-preview.23363.1",
47-
"xamlTools": "17.14.36010.33"
47+
"xamlTools": "17.14.36106.43"
4848
},
4949
"main": "./dist/extension",
5050
"l10n": "./l10n",

src/lsptoolshost/copilot/contextProviders.ts

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export const copilotLanguageServerExtensionComponentName = '@microsoft/visualstu
1515
export const copilotLanguageServerExtensionAssemblyName = 'Microsoft.VisualStudio.Copilot.Roslyn.LanguageServer.dll';
1616
const copilotLanguageServerExtensionCapabilitiesFileName = 'capabilities.json';
1717

18+
type ActiveExperiments = { [name: string]: string | number | boolean | string[] };
19+
1820
export interface DocumentContext {
1921
textDocument: lsp.TextDocumentIdentifier;
2022
position: lsp.Position;
@@ -25,12 +27,19 @@ export interface ContextResolveParam {
2527
completionId: string;
2628
timeBudget: number;
2729
data?: any;
30+
activeExperiments: ActiveExperiments;
2831
}
2932

30-
const resolveContextMethodName = 'roslyn/resolveContext';
31-
const resolveContextMethodSupportedVersion = '1';
32-
const resolveContextRequest = new lsp.RequestType<ContextResolveParam, SupportedContextItem[], void>(
33-
resolveContextMethodName,
33+
const oldResolveContextMethodName = 'roslyn/resolveContext';
34+
const oldresolveContextMethodSupportedVersion = '1';
35+
const newResolveContextMethodName = 'roslyn/resolveContext@2';
36+
const newResolveContextMethodSupportedVersion = '1';
37+
const oldResolveContextRequest = new lsp.RequestType<ContextResolveParam, SupportedContextItem[], void>(
38+
oldResolveContextMethodName,
39+
lsp.ParameterStructures.auto
40+
);
41+
const newResolveContextRequest = new lsp.RequestType<ContextResolveParam, SupportedContextItem[], void>(
42+
newResolveContextMethodName,
3443
lsp.ParameterStructures.auto
3544
);
3645

@@ -60,6 +69,8 @@ function createContextResolveParam(request: ResolveRequest): ContextResolveParam
6069
},
6170
completionId: request.completionId,
6271
timeBudget: request.timeBudget,
72+
data: request.data,
73+
activeExperiments: Object.fromEntries(request.activeExperiments),
6374
};
6475
return contextResolveParam;
6576
}
@@ -76,27 +87,35 @@ export function registerCopilotContextProviders(
7687

7788
devkit.activate().then(async (devKitExports) => {
7889
try {
79-
// Check if the Copilot Language Server extension is installed and has the correct capabilities
80-
let hasCapabilities = false;
90+
let resolveMethod: lsp.RequestType<ContextResolveParam, SupportedContextItem[], void> | undefined =
91+
undefined;
8192
const copilotServerExtensionfolder = devKitExports.components[copilotLanguageServerExtensionComponentName];
8293
if (copilotServerExtensionfolder) {
8394
const capabilitiesFilePath = path.join(
8495
copilotServerExtensionfolder,
8596
copilotLanguageServerExtensionCapabilitiesFileName
8697
);
8798
const capabilitiesContent = await readJsonSync(capabilitiesFilePath);
88-
if (
89-
capabilitiesContent?.capabilities?.find(
90-
(capability: any) =>
91-
capability?.method === resolveContextMethodName &&
92-
capability?.version === resolveContextMethodSupportedVersion
93-
)
94-
) {
95-
hasCapabilities = true;
99+
for (const capability of capabilitiesContent?.capabilities ?? []) {
100+
if (
101+
capability.method === oldResolveContextMethodName &&
102+
capability.version === oldresolveContextMethodSupportedVersion
103+
) {
104+
resolveMethod = oldResolveContextRequest;
105+
channel.debug(`supported 'roslyn/resolveContext' method found in capabilities.json`);
106+
break;
107+
} else if (
108+
capability.method === newResolveContextMethodName &&
109+
capability.version === newResolveContextMethodSupportedVersion
110+
) {
111+
resolveMethod = newResolveContextRequest;
112+
channel.debug(`supported 'roslyn/resolveContext@2' method found in capabilities.json`);
113+
break;
114+
}
96115
}
97116
}
98117

99-
if (!hasCapabilities) {
118+
if (!resolveMethod) {
100119
channel.debug(
101120
`Failed to find compatible version of context provider from installed version of ${csharpDevkitExtensionId}.`
102121
);
@@ -131,11 +150,7 @@ export function registerCopilotContextProviders(
131150
if (!contextResolveParam) {
132151
return [];
133152
}
134-
const items = await languageServer.sendRequest(
135-
resolveContextRequest,
136-
contextResolveParam,
137-
token
138-
);
153+
const items = await languageServer.sendRequest(resolveMethod, contextResolveParam, token);
139154
channel.trace(`Copilot context provider resolved ${items.length} items`);
140155
return items;
141156
},

0 commit comments

Comments
 (0)