Skip to content

Commit 1a58310

Browse files
committed
Support new context resolve handler
1 parent 1543999 commit 1a58310

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

src/lsptoolshost/copilot/contextProviders.ts

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,16 @@ export interface ContextResolveParam {
3030
activeExperiments: ActiveExperiments;
3131
}
3232

33-
const resolveContextMethodName = 'roslyn/resolveContext';
34-
const resolveContextMethodSupportedVersion = '1';
35-
const resolveContextRequest = new lsp.RequestType<ContextResolveParam, SupportedContextItem[], void>(
36-
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,
3743
lsp.ParameterStructures.auto
3844
);
3945

@@ -81,27 +87,35 @@ export function registerCopilotContextProviders(
8187

8288
devkit.activate().then(async (devKitExports) => {
8389
try {
84-
// Check if the Copilot Language Server extension is installed and has the correct capabilities
85-
let hasCapabilities = false;
90+
let resolveMethod: lsp.RequestType<ContextResolveParam, SupportedContextItem[], void> | undefined =
91+
undefined;
8692
const copilotServerExtensionfolder = devKitExports.components[copilotLanguageServerExtensionComponentName];
8793
if (copilotServerExtensionfolder) {
8894
const capabilitiesFilePath = path.join(
8995
copilotServerExtensionfolder,
9096
copilotLanguageServerExtensionCapabilitiesFileName
9197
);
9298
const capabilitiesContent = await readJsonSync(capabilitiesFilePath);
93-
if (
94-
capabilitiesContent?.capabilities?.find(
95-
(capability: any) =>
96-
capability?.method === resolveContextMethodName &&
97-
capability?.version === resolveContextMethodSupportedVersion
98-
)
99-
) {
100-
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+
}
101115
}
102116
}
103117

104-
if (!hasCapabilities) {
118+
if (!resolveMethod) {
105119
channel.debug(
106120
`Failed to find compatible version of context provider from installed version of ${csharpDevkitExtensionId}.`
107121
);
@@ -136,11 +150,7 @@ export function registerCopilotContextProviders(
136150
if (!contextResolveParam) {
137151
return [];
138152
}
139-
const items = await languageServer.sendRequest(
140-
resolveContextRequest,
141-
contextResolveParam,
142-
token
143-
);
153+
const items = await languageServer.sendRequest(resolveMethod, contextResolveParam, token);
144154
channel.trace(`Copilot context provider resolved ${items.length} items`);
145155
return items;
146156
},

0 commit comments

Comments
 (0)