diff --git a/Extension/src/LanguageServer/copilotCompletionContextProvider.ts b/Extension/src/LanguageServer/copilotCompletionContextProvider.ts index d3352a53d..0c90496aa 100644 --- a/Extension/src/LanguageServer/copilotCompletionContextProvider.ts +++ b/Extension/src/LanguageServer/copilotCompletionContextProvider.ts @@ -6,6 +6,7 @@ import { ContextResolver, ResolveRequest, SupportedContextItem } from '@github/c import { randomUUID } from 'crypto'; import * as vscode from 'vscode'; import { DocumentSelector } from 'vscode-languageserver-protocol'; +import { isNumber, isString } from '../common'; import { getOutputChannelLogger, Logger } from '../logger'; import * as telemetry from '../telemetry'; import { CopilotCompletionContextResult } from './client'; @@ -176,8 +177,8 @@ export class CopilotCompletionContextProvider implements ContextResolver { try { const budgetFactor = context.activeExperiments.get(CopilotCompletionContextProvider.CppCodeSnippetsTimeBudgetFactor); - return ((budgetFactor as number) ?? CopilotCompletionContextProvider.defaultTimeBudgetFactor) / 100.0; + return (isNumber(budgetFactor) ? budgetFactor : CopilotCompletionContextProvider.defaultTimeBudgetFactor) / 100.0; } catch (e) { console.warn(`fetchTimeBudgetFactor(): error fetching ${CopilotCompletionContextProvider.CppCodeSnippetsTimeBudgetFactor}, using default: `, e); return CopilotCompletionContextProvider.defaultTimeBudgetFactor; @@ -213,7 +217,7 @@ export class CopilotCompletionContextProvider implements ContextResolver { try { const maxDistance = context.activeExperiments.get(CopilotCompletionContextProvider.CppCodeSnippetsMaxDistanceToCaret); - return (maxDistance as number) ?? CopilotCompletionContextProvider.defaultMaxCaretDistance; + return isNumber(maxDistance) ? maxDistance : CopilotCompletionContextProvider.defaultMaxCaretDistance; } catch (e) { console.warn(`fetchMaxDistanceToCaret(): error fetching ${CopilotCompletionContextProvider.CppCodeSnippetsMaxDistanceToCaret}, using default: `, e); return CopilotCompletionContextProvider.defaultMaxCaretDistance; @@ -222,13 +226,14 @@ export class CopilotCompletionContextProvider implements ContextResolver { try { - let enabledFeatureNames = new CppSettings().cppCodeSnippetsFeatureNames; - enabledFeatureNames ??= context.activeExperiments.get(CopilotCompletionContextProvider.CppCodeSnippetsEnabledFeatures) as string; - return enabledFeatureNames?.split(',').map(s => s.trim()); + const enabledFeatureNames = new CppSettings().cppCodeSnippetsFeatureNames ?? context.activeExperiments.get(CopilotCompletionContextProvider.CppCodeSnippetsEnabledFeatures); + if (isString(enabledFeatureNames)) { + return enabledFeatureNames.split(',').map(s => s.trim()); + } } catch (e) { console.warn(`getEnabledFeatures(): error fetching ${CopilotCompletionContextProvider.CppCodeSnippetsEnabledFeatures}: `, e); - return undefined; } + return undefined; } private async getEnabledFeatureFlag(context: ResolveRequest): Promise { diff --git a/Extension/src/LanguageServer/settings.ts b/Extension/src/LanguageServer/settings.ts index 9a164bda0..2c14030c8 100644 --- a/Extension/src/LanguageServer/settings.ts +++ b/Extension/src/LanguageServer/settings.ts @@ -471,14 +471,17 @@ export class CppSettings extends Settings { if (!(vscode as any).lm) { return "disabled"; } - const val = super.Section.get("copilotHover"); - if (val === undefined) { - return "default"; + if (super.Section.get("copilotHover") === "enabled") { + return "enabled"; } - return val as string; + return this.getAsString("copilotHover"); } public get cppCodeSnippetsFeatureNames(): string | undefined { - return super.Section.get("cppCodeSnippetsFeatureNames"); + const value = super.Section.get("cppCodeSnippetsFeatureNames"); + if (isString(value)) { + return value; + } + return undefined; } public get formattingEngine(): string { return this.getAsString("formatting"); } public get vcFormatIndentBraces(): boolean { return this.getAsBoolean("vcFormat.indent.braces"); }