Skip to content

Commit e16fe17

Browse files
committed
factor out to general isEnabled function
1 parent 33f900a commit e16fe17

File tree

1 file changed

+29
-31
lines changed

1 file changed

+29
-31
lines changed

packages/core/src/shared/settings.ts

Lines changed: 29 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,7 @@ export function fromExtensionManifest<T extends TypeDescriptor & Partial<Section
600600
*
601601
* ### Usage:
602602
* ```
603-
* if (await settings.isPromptEnabled('myPromptName')) {
603+
* if (settings.isPromptEnabled('myPromptName')) {
604604
* // Show some sort of prompt
605605
* const userResponse = await promptUser()
606606
*
@@ -627,19 +627,12 @@ export class ToolkitPromptSettings
627627
)
628628
implements PromptSettings
629629
{
630-
public async isPromptEnabled(promptName: toolkitPromptName): Promise<boolean> {
631-
try {
632-
return !this._getOrThrow(promptName, false)
633-
} catch (e) {
634-
this._log('prompt check for "%s" failed: %s', promptName, (e as Error).message)
635-
await this.reset()
636-
637-
return true
638-
}
630+
public isPromptEnabled(promptName: toolkitPromptName) {
631+
return isEnabled(this, promptName)
639632
}
640633

641634
public async disablePrompt(promptName: toolkitPromptName): Promise<void> {
642-
if (await this.isPromptEnabled(promptName)) {
635+
if (this.isPromptEnabled(promptName)) {
643636
await this.update(promptName, true)
644637
}
645638
}
@@ -660,19 +653,12 @@ export class AmazonQPromptSettings
660653
)
661654
implements PromptSettings
662655
{
663-
public async isPromptEnabled(promptName: amazonQPromptName): Promise<boolean> {
664-
try {
665-
return !this._getOrThrow(promptName, false)
666-
} catch (e) {
667-
this._log('prompt check for "%s" failed: %s', promptName, (e as Error).message)
668-
await this.reset()
669-
670-
return true
671-
}
656+
public isPromptEnabled(promptName: amazonQPromptName): boolean {
657+
return isEnabled(this, promptName)
672658
}
673659

674660
public async disablePrompt(promptName: amazonQPromptName): Promise<void> {
675-
if (await this.isPromptEnabled(promptName)) {
661+
if (this.isPromptEnabled(promptName)) {
676662
await this.update(promptName, true)
677663
}
678664
}
@@ -692,7 +678,7 @@ export class AmazonQPromptSettings
692678
type AllPromptNames = amazonQPromptName | toolkitPromptName
693679

694680
export interface PromptSettings {
695-
isPromptEnabled(promptName: AllPromptNames): Promise<boolean>
681+
isPromptEnabled(promptName: AllPromptNames): boolean
696682
disablePrompt(promptName: AllPromptNames): Promise<void>
697683
}
698684

@@ -708,7 +694,7 @@ type ExperimentName = keyof typeof experiments
708694
* ### Usage:
709695
* ```
710696
* function myExperimentalFeature(): void {
711-
* if (!(await settings.isExperimentEnabled('myExperimentalFeature'))) {
697+
* if (!(settings.isExperimentEnabled('myExperimentalFeature'))) {
712698
* return
713699
* }
714700
*
@@ -727,14 +713,7 @@ export class Experiments extends Settings.define(
727713
toRecord(keys(experiments), () => Boolean)
728714
) {
729715
public isExperimentEnabled(name: ExperimentName): boolean {
730-
try {
731-
return this._getOrThrow(name, false)
732-
} catch (error) {
733-
this._log(`experiment check for ${name} failed: %s`, error)
734-
this.reset().catch((e) => getLogger().error(`failed to reset experiment settings: %O`, e))
735-
736-
return false
737-
}
716+
return isEnabled(this, name)
738717
}
739718

740719
static #instance: Experiments
@@ -949,3 +928,22 @@ export async function openSettings(prefix: string): Promise<void> {
949928
export async function openSettingsId<K extends keyof SettingsProps>(key: K): Promise<void> {
950929
await vscode.commands.executeCommand('workbench.action.openSettings', `@id:${key}`)
951930
}
931+
932+
function isEnabled<
933+
S extends {
934+
_getOrThrow(key: P & string, defaultValue: boolean): boolean
935+
_log(message: string, ...args: any[]): void
936+
update(key: P & string, value: boolean): Promise<boolean>
937+
reset(): Promise<void>
938+
},
939+
P extends AllPromptNames | ExperimentName,
940+
>(settings: S, promptName: P) {
941+
try {
942+
return !settings._getOrThrow(promptName, false)
943+
} catch (e) {
944+
settings._log('prompt check for "%s" failed: %s', promptName, (e as Error).message)
945+
settings.reset().catch((e) => getLogger().error(`failed to reset prompt settings: %O`, (e as Error).message))
946+
947+
return true
948+
}
949+
}

0 commit comments

Comments
 (0)