@@ -6,6 +6,7 @@ import { ContextResolver, ResolveRequest, SupportedContextItem } from '@github/c
6
6
import { randomUUID } from 'crypto' ;
7
7
import * as vscode from 'vscode' ;
8
8
import { DocumentSelector } from 'vscode-languageserver-protocol' ;
9
+ import { isNumber , isString } from '../common' ;
9
10
import { getOutputChannelLogger , Logger } from '../logger' ;
10
11
import * as telemetry from '../telemetry' ;
11
12
import { CopilotCompletionContextResult } from './client' ;
@@ -176,8 +177,8 @@ export class CopilotCompletionContextProvider implements ContextResolver<Support
176
177
telemetry . addComputeContextElapsed ( CopilotCompletionContextProvider . getRoundedDuration ( getCompletionContextStartTime ) ) ;
177
178
178
179
return resultMismatch ? undefined : copilotCompletionContext ;
179
- } catch ( e ) {
180
- if ( e instanceof vscode . CancellationError || ( e as Error ) ? .message === CancellationError . Canceled ) {
180
+ } catch ( e : any ) {
181
+ if ( e instanceof vscode . CancellationError || e . message === CancellationError . Canceled ) {
181
182
telemetry . addInternalCanceled ( CopilotCompletionContextProvider . getRoundedDuration ( startTime ) ) ;
182
183
logMessage += `, (internal cancellation)` ;
183
184
throw InternalCancellationError ;
@@ -188,8 +189,11 @@ export class CopilotCompletionContextProvider implements ContextResolver<Support
188
189
}
189
190
190
191
telemetry . addError ( ) ;
191
- const err = e as Error ;
192
- out . appendLine ( `Copilot: getCompletionContextWithCancellation(${ documentUri } : ${ caretOffset } ): Error: '${ err ?. message } ', stack '${ err ?. stack } ` ) ;
192
+ if ( e . message && e . stack ) {
193
+ out . appendLine ( `Copilot: getCompletionContextWithCancellation(${ documentUri } : ${ caretOffset } ): Error: '${ e . message } ', stack '${ e . stack } ` ) ;
194
+ } else {
195
+ out . appendLine ( `Copilot: getCompletionContextWithCancellation(${ documentUri } : ${ caretOffset } ): Error: '${ e } '` ) ;
196
+ }
193
197
return undefined ;
194
198
} finally {
195
199
out . appendLine ( logMessage ) ;
@@ -203,7 +207,7 @@ export class CopilotCompletionContextProvider implements ContextResolver<Support
203
207
private async fetchTimeBudgetFactor ( context : ResolveRequest ) : Promise < number > {
204
208
try {
205
209
const budgetFactor = context . activeExperiments . get ( CopilotCompletionContextProvider . CppCodeSnippetsTimeBudgetFactor ) ;
206
- return ( ( budgetFactor as number ) ?? CopilotCompletionContextProvider . defaultTimeBudgetFactor ) / 100.0 ;
210
+ return ( isNumber ( budgetFactor ) ? budgetFactor : CopilotCompletionContextProvider . defaultTimeBudgetFactor ) / 100.0 ;
207
211
} catch ( e ) {
208
212
console . warn ( `fetchTimeBudgetFactor(): error fetching ${ CopilotCompletionContextProvider . CppCodeSnippetsTimeBudgetFactor } , using default: ` , e ) ;
209
213
return CopilotCompletionContextProvider . defaultTimeBudgetFactor ;
@@ -213,7 +217,7 @@ export class CopilotCompletionContextProvider implements ContextResolver<Support
213
217
private async fetchMaxDistanceToCaret ( context : ResolveRequest ) : Promise < number > {
214
218
try {
215
219
const maxDistance = context . activeExperiments . get ( CopilotCompletionContextProvider . CppCodeSnippetsMaxDistanceToCaret ) ;
216
- return ( maxDistance as number ) ?? CopilotCompletionContextProvider . defaultMaxCaretDistance ;
220
+ return isNumber ( maxDistance ) ? maxDistance : CopilotCompletionContextProvider . defaultMaxCaretDistance ;
217
221
} catch ( e ) {
218
222
console . warn ( `fetchMaxDistanceToCaret(): error fetching ${ CopilotCompletionContextProvider . CppCodeSnippetsMaxDistanceToCaret } , using default: ` , e ) ;
219
223
return CopilotCompletionContextProvider . defaultMaxCaretDistance ;
@@ -222,13 +226,14 @@ export class CopilotCompletionContextProvider implements ContextResolver<Support
222
226
223
227
private async getEnabledFeatureNames ( context : ResolveRequest ) : Promise < string [ ] | undefined > {
224
228
try {
225
- let enabledFeatureNames = new CppSettings ( ) . cppCodeSnippetsFeatureNames ;
226
- enabledFeatureNames ??= context . activeExperiments . get ( CopilotCompletionContextProvider . CppCodeSnippetsEnabledFeatures ) as string ;
227
- return enabledFeatureNames ?. split ( ',' ) . map ( s => s . trim ( ) ) ;
229
+ const enabledFeatureNames = new CppSettings ( ) . cppCodeSnippetsFeatureNames ?? context . activeExperiments . get ( CopilotCompletionContextProvider . CppCodeSnippetsEnabledFeatures ) ;
230
+ if ( isString ( enabledFeatureNames ) ) {
231
+ return enabledFeatureNames . split ( ',' ) . map ( s => s . trim ( ) ) ;
232
+ }
228
233
} catch ( e ) {
229
234
console . warn ( `getEnabledFeatures(): error fetching ${ CopilotCompletionContextProvider . CppCodeSnippetsEnabledFeatures } : ` , e ) ;
230
- return undefined ;
231
235
}
236
+ return undefined ;
232
237
}
233
238
234
239
private async getEnabledFeatureFlag ( context : ResolveRequest ) : Promise < CopilotCompletionContextFeatures | undefined > {
0 commit comments