#46851 add default value source & default default value to configuration properties
This commit is contained in:
parent
f853123bff
commit
944d343cc2
|
@ -58,7 +58,7 @@ export interface IConfigurationRegistry {
|
|||
/**
|
||||
* Return the registered configuration defaults overrides
|
||||
*/
|
||||
getConfigurationDefaultsOverrides(): IStringDictionary<any>;
|
||||
getConfigurationDefaultsOverrides(): Map<string, IConfigurationDefaultOverride>;
|
||||
|
||||
/**
|
||||
* Signal that the schema of a configuration setting has changes. It is currently only supported to change enumeration values.
|
||||
|
@ -86,12 +86,12 @@ export interface IConfigurationRegistry {
|
|||
/**
|
||||
* Returns all configurations settings of all configuration nodes contributed to this registry.
|
||||
*/
|
||||
getConfigurationProperties(): { [qualifiedKey: string]: IConfigurationPropertySchema };
|
||||
getConfigurationProperties(): IStringDictionary<IRegisteredConfigurationPropertySchema>;
|
||||
|
||||
/**
|
||||
* Returns all excluded configurations settings of all configuration nodes contributed to this registry.
|
||||
*/
|
||||
getExcludedConfigurationProperties(): { [qualifiedKey: string]: IConfigurationPropertySchema };
|
||||
getExcludedConfigurationProperties(): IStringDictionary<IRegisteredConfigurationPropertySchema>;
|
||||
|
||||
/**
|
||||
* Register the identifiers for editor configurations
|
||||
|
@ -176,7 +176,7 @@ export interface IConfigurationNode {
|
|||
type?: string | string[];
|
||||
title?: string;
|
||||
description?: string;
|
||||
properties?: { [path: string]: IConfigurationPropertySchema; };
|
||||
properties?: IStringDictionary<IConfigurationPropertySchema>;
|
||||
allOf?: IConfigurationNode[];
|
||||
scope?: ConfigurationScope;
|
||||
extensionInfo?: IConfigurationExtensionInfo;
|
||||
|
@ -187,6 +187,14 @@ export interface IConfigurationDefaults {
|
|||
extensionId?: string;
|
||||
}
|
||||
|
||||
export type IRegisteredConfigurationPropertySchema = IConfigurationPropertySchema & {
|
||||
defaultDefaultValue?: any,
|
||||
source?: string,
|
||||
defaultSource?: string
|
||||
};
|
||||
|
||||
export type IConfigurationDefaultOverride = { value: any, source?: string };
|
||||
|
||||
export const allSettings: { properties: IStringDictionary<IConfigurationPropertySchema>, patternProperties: IStringDictionary<IConfigurationPropertySchema> } = { properties: {}, patternProperties: {} };
|
||||
export const applicationSettings: { properties: IStringDictionary<IConfigurationPropertySchema>, patternProperties: IStringDictionary<IConfigurationPropertySchema> } = { properties: {}, patternProperties: {} };
|
||||
export const machineSettings: { properties: IStringDictionary<IConfigurationPropertySchema>, patternProperties: IStringDictionary<IConfigurationPropertySchema> } = { properties: {}, patternProperties: {} };
|
||||
|
@ -200,11 +208,11 @@ const contributionRegistry = Registry.as<IJSONContributionRegistry>(JSONExtensio
|
|||
|
||||
class ConfigurationRegistry implements IConfigurationRegistry {
|
||||
|
||||
private readonly configurationDefaultsOverrides: IStringDictionary<any>;
|
||||
private readonly configurationDefaultsOverrides: Map<string, IConfigurationDefaultOverride>;
|
||||
private readonly defaultLanguageConfigurationOverridesNode: IConfigurationNode;
|
||||
private readonly configurationContributors: IConfigurationNode[];
|
||||
private readonly configurationProperties: { [qualifiedKey: string]: IJSONSchema };
|
||||
private readonly excludedConfigurationProperties: { [qualifiedKey: string]: IJSONSchema };
|
||||
private readonly configurationProperties: IStringDictionary<IRegisteredConfigurationPropertySchema>;
|
||||
private readonly excludedConfigurationProperties: IStringDictionary<IRegisteredConfigurationPropertySchema>;
|
||||
private readonly resourceLanguageSettingsSchema: IJSONSchema;
|
||||
private readonly overrideIdentifiers = new Set<string>();
|
||||
|
||||
|
@ -215,7 +223,7 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
|||
readonly onDidUpdateConfiguration = this._onDidUpdateConfiguration.event;
|
||||
|
||||
constructor() {
|
||||
this.configurationDefaultsOverrides = {};
|
||||
this.configurationDefaultsOverrides = new Map<string, IConfigurationDefaultOverride>();
|
||||
this.defaultLanguageConfigurationOverridesNode = {
|
||||
id: 'defaultOverrides',
|
||||
title: nls.localize('defaultLanguageConfigurationOverrides.title', "Default Language Configuration Overrides"),
|
||||
|
@ -264,23 +272,26 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
|||
const properties: string[] = [];
|
||||
const overrideIdentifiers: string[] = [];
|
||||
|
||||
for (const { overrides } of configurationDefaults) {
|
||||
for (const { overrides, extensionId } of configurationDefaults) {
|
||||
for (const key in overrides) {
|
||||
properties.push(key);
|
||||
|
||||
if (OVERRIDE_PROPERTY_REGEX.test(key)) {
|
||||
this.configurationDefaultsOverrides[key] = { ...(this.configurationDefaultsOverrides[key] || {}), ...overrides[key] };
|
||||
const property: IConfigurationPropertySchema = {
|
||||
const defaultValue = { ...(this.configurationDefaultsOverrides.get(key)?.value || {}), ...overrides[key] };
|
||||
this.configurationDefaultsOverrides.set(key, { source: extensionId, value: defaultValue });
|
||||
const property: IRegisteredConfigurationPropertySchema = {
|
||||
type: 'object',
|
||||
default: this.configurationDefaultsOverrides[key],
|
||||
default: defaultValue,
|
||||
description: nls.localize('defaultLanguageConfiguration.description', "Configure settings to be overridden for {0} language.", key),
|
||||
$ref: resourceLanguageSettingsSchemaId
|
||||
$ref: resourceLanguageSettingsSchemaId,
|
||||
defaultDefaultValue: defaultValue,
|
||||
source: extensionId,
|
||||
};
|
||||
overrideIdentifiers.push(...overrideIdentifiersFromKey(key));
|
||||
this.configurationProperties[key] = property;
|
||||
this.defaultLanguageConfigurationOverridesNode.properties![key] = property;
|
||||
} else {
|
||||
this.configurationDefaultsOverrides[key] = overrides[key];
|
||||
this.configurationDefaultsOverrides.set(key, { value: overrides[key], source: extensionId });
|
||||
const property = this.configurationProperties[key];
|
||||
if (property) {
|
||||
this.updatePropertyDefaultValue(key, property);
|
||||
|
@ -297,10 +308,13 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
|||
|
||||
public deregisterDefaultConfigurations(defaultConfigurations: IConfigurationDefaults[]): void {
|
||||
const properties: string[] = [];
|
||||
for (const { overrides } of defaultConfigurations) {
|
||||
for (const { overrides, extensionId } of defaultConfigurations) {
|
||||
for (const key in overrides) {
|
||||
if (this.configurationDefaultsOverrides.get(key)?.source !== extensionId) {
|
||||
continue;
|
||||
}
|
||||
properties.push(key);
|
||||
delete this.configurationDefaultsOverrides[key];
|
||||
this.configurationDefaultsOverrides.delete(key);
|
||||
if (OVERRIDE_PROPERTY_REGEX.test(key)) {
|
||||
delete this.configurationProperties[key];
|
||||
delete this.defaultLanguageConfigurationOverridesNode.properties![key];
|
||||
|
@ -375,9 +389,11 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
|||
continue;
|
||||
}
|
||||
|
||||
const property = properties[key];
|
||||
const property: IRegisteredConfigurationPropertySchema = properties[key];
|
||||
property.source = extensionInfo?.id;
|
||||
|
||||
// update default value
|
||||
property.defaultDefaultValue = properties[key].default;
|
||||
this.updatePropertyDefaultValue(key, property);
|
||||
|
||||
// update scope
|
||||
|
@ -415,19 +431,20 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
|||
return propertyKeys;
|
||||
}
|
||||
|
||||
// TODO: @sandy081 - Remove this method and include required info in getConfigurationProperties
|
||||
getConfigurations(): IConfigurationNode[] {
|
||||
return this.configurationContributors;
|
||||
}
|
||||
|
||||
getConfigurationProperties(): { [qualifiedKey: string]: IConfigurationPropertySchema } {
|
||||
getConfigurationProperties(): IStringDictionary<IRegisteredConfigurationPropertySchema> {
|
||||
return this.configurationProperties;
|
||||
}
|
||||
|
||||
getExcludedConfigurationProperties(): { [qualifiedKey: string]: IConfigurationPropertySchema } {
|
||||
getExcludedConfigurationProperties(): IStringDictionary<IRegisteredConfigurationPropertySchema> {
|
||||
return this.excludedConfigurationProperties;
|
||||
}
|
||||
|
||||
getConfigurationDefaultsOverrides(): IStringDictionary<any> {
|
||||
getConfigurationDefaultsOverrides(): Map<string, IConfigurationDefaultOverride> {
|
||||
return this.configurationDefaultsOverrides;
|
||||
}
|
||||
|
||||
|
@ -531,15 +548,19 @@ class ConfigurationRegistry implements IConfigurationRegistry {
|
|||
this._onDidSchemaChange.fire();
|
||||
}
|
||||
|
||||
private updatePropertyDefaultValue(key: string, property: IConfigurationPropertySchema): void {
|
||||
let defaultValue = this.configurationDefaultsOverrides[key];
|
||||
private updatePropertyDefaultValue(key: string, property: IRegisteredConfigurationPropertySchema): void {
|
||||
const configurationdefaultOverride = this.configurationDefaultsOverrides.get(key);
|
||||
let defaultValue = configurationdefaultOverride?.value;
|
||||
let defaultSource = configurationdefaultOverride?.source;
|
||||
if (types.isUndefined(defaultValue)) {
|
||||
defaultValue = property.default;
|
||||
defaultValue = property.defaultDefaultValue;
|
||||
defaultSource = undefined;
|
||||
}
|
||||
if (types.isUndefined(defaultValue)) {
|
||||
defaultValue = getDefaultValue(property.type);
|
||||
}
|
||||
property.default = defaultValue;
|
||||
property.defaultSource = defaultSource;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -96,9 +96,9 @@ export class DefaultConfiguration extends Disposable {
|
|||
private async updateCachedConfigurationDefaultsOverrides(): Promise<void> {
|
||||
const cachedConfigurationDefaultsOverrides: IStringDictionary<any> = {};
|
||||
const configurationDefaultsOverrides = this.configurationRegistry.getConfigurationDefaultsOverrides();
|
||||
for (const key of Object.keys(configurationDefaultsOverrides)) {
|
||||
if (!OVERRIDE_PROPERTY_REGEX.test(key) && configurationDefaultsOverrides[key] !== undefined) {
|
||||
cachedConfigurationDefaultsOverrides[key] = configurationDefaultsOverrides[key];
|
||||
for (const [key, value] of configurationDefaultsOverrides) {
|
||||
if (!OVERRIDE_PROPERTY_REGEX.test(key) && value.value !== undefined) {
|
||||
cachedConfigurationDefaultsOverrides[key] = value.value;
|
||||
}
|
||||
}
|
||||
try {
|
||||
|
|
|
@ -44,7 +44,8 @@ suite('DefaultConfiguration', () => {
|
|||
|
||||
teardown(() => {
|
||||
configurationRegistry.deregisterConfigurations(configurationRegistry.getConfigurations());
|
||||
configurationRegistry.deregisterDefaultConfigurations([{ overrides: configurationRegistry.getConfigurationDefaultsOverrides() }]);
|
||||
const configurationDefaultsOverrides = configurationRegistry.getConfigurationDefaultsOverrides();
|
||||
configurationRegistry.deregisterDefaultConfigurations([...configurationDefaultsOverrides.keys()].map(key => ({ extensionId: configurationDefaultsOverrides.get(key)?.source, overrides: { [key]: configurationDefaultsOverrides.get(key)?.value } })));
|
||||
});
|
||||
|
||||
test('configuration default overrides are read from environment', async () => {
|
||||
|
|
Loading…
Reference in a new issue