/** * Guide to add settings: * * 1. Add appropriate setting type in the desired section (particular interface) * 2. Add the setting(s) to `ExtensionSetting` at appropriate nested level * 3. Go to `settingsManager.ts` and add the appropriate change */ type IContainerEngine = "auto" | "podman" | "docker"; type IPullPolicy = "always" | "missing" | "never" | "tag"; interface ExtensionSettingsType { [name: string]: ExtensionSettingsType | string | boolean | string[] | IContainerEngine | IPullPolicy | IVolumeMounts[]; } interface ExtensionSettings extends ExtensionSettingsType { ansible: { path: string; useFullyQualifiedCollectionNames: boolean; }; completion: { provideRedirectModules: boolean; provideModuleOptionAliases: boolean; }; validation: { enabled: boolean; lint: { enabled: boolean; path: string; arguments: string; autoFixOnSave: boolean; }; }; executionEnvironment: { enabled: boolean; containerEngine: IContainerEngine; image: string; pull: { policy: IPullPolicy; arguments: string; }; volumeMounts: Array; containerOptions: string; }; python: { interpreterPath: string; activationScript: string; }; } interface IVolumeMounts { src: string; dest: string; options: string | undefined; } /** * Interface for ansible settings */ interface SettingsEntry { [name: string]: { default: string | boolean; description: string; } | SettingsEntry | string | boolean | Array; } /** * Interface for execution environment settings */ interface ExecutionEnvironmentSettingsWithDescription extends SettingsEntry { containerEngine: { default: IContainerEngine; description: string; }; enabled: { default: boolean; description: string; }; image: { default: string; description: string; }; pull: { policy: { default: IPullPolicy; description: string; }; arguments: { default: string; description: string; }; }; volumeMounts: { default: Array; description: string; }; containerOptions: { default: string; description: string; }; } interface ExtensionSettingsWithDescriptionBase { [key: string]: SettingsEntry | string | boolean; } interface ExtensionSettingsWithDescription extends ExtensionSettingsWithDescriptionBase { ansible: AnsibleSettingsWithDescription; completion: CompletionSettingsWithDescription; validation: ValidationSettingsWithDescription; executionEnvironment: ExecutionEnvironmentSettingsWithDescription; python: PythonSettingsWithDescription; } interface AnsibleSettingsWithDescription extends SettingsEntry { path: { default: string; description: string; }; useFullyQualifiedCollectionNames: { default: boolean; description: string; }; } /** * Interface for python settings */ interface PythonSettingsWithDescription extends SettingsEntry { interpreterPath: { default: string; description: string; }; activationScript: { default: string; description: string; }; } /** * Interface for completion settings */ interface CompletionSettingsWithDescription extends SettingsEntry { provideRedirectModules: { default: boolean; description: string; }; provideModuleOptionAliases: { default: boolean; description: string; }; } /** * Interface for validation settings */ interface ValidationSettingsWithDescription extends SettingsEntry { enabled: { default: boolean; description: string; }; lint: { enabled: { default: boolean; description: string; }; path: { default: string; description: string; }; arguments: { default: string; description: string; }; autoFixOnSave: { default: boolean; description: string; }; }; } export type { ExtensionSettings, ExtensionSettingsWithDescription, ExtensionSettingsWithDescriptionBase, IContainerEngine, IPullPolicy, IVolumeMounts, SettingsEntry };