@@ -30,10 +30,16 @@ export interface ContextResolveParam {
30
30
activeExperiments : ActiveExperiments ;
31
31
}
32
32
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 ,
37
43
lsp . ParameterStructures . auto
38
44
) ;
39
45
@@ -81,27 +87,35 @@ export function registerCopilotContextProviders(
81
87
82
88
devkit . activate ( ) . then ( async ( devKitExports ) => {
83
89
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 ;
86
92
const copilotServerExtensionfolder = devKitExports . components [ copilotLanguageServerExtensionComponentName ] ;
87
93
if ( copilotServerExtensionfolder ) {
88
94
const capabilitiesFilePath = path . join (
89
95
copilotServerExtensionfolder ,
90
96
copilotLanguageServerExtensionCapabilitiesFileName
91
97
) ;
92
98
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
+ }
101
115
}
102
116
}
103
117
104
- if ( ! hasCapabilities ) {
118
+ if ( ! resolveMethod ) {
105
119
channel . debug (
106
120
`Failed to find compatible version of context provider from installed version of ${ csharpDevkitExtensionId } .`
107
121
) ;
@@ -136,11 +150,7 @@ export function registerCopilotContextProviders(
136
150
if ( ! contextResolveParam ) {
137
151
return [ ] ;
138
152
}
139
- const items = await languageServer . sendRequest (
140
- resolveContextRequest ,
141
- contextResolveParam ,
142
- token
143
- ) ;
153
+ const items = await languageServer . sendRequest ( resolveMethod , contextResolveParam , token ) ;
144
154
channel . trace ( `Copilot context provider resolved ${ items . length } items` ) ;
145
155
return items ;
146
156
} ,
0 commit comments