@@ -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