#46851 pass extension description as source

This commit is contained in:
Sandeep Somavarapu 2021-11-26 14:02:48 +01:00
parent 39c6132b2c
commit 49fc9c109e
No known key found for this signature in database
GPG key ID: 1FED25EC4646638B
5 changed files with 23 additions and 18 deletions

View file

@ -9,6 +9,7 @@ import { Emitter, Event } from 'vs/base/common/event';
import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as types from 'vs/base/common/types';
import * as nls from 'vs/nls';
import { IExtensionDescription } from 'vs/platform/extensions/common/extensions';
import { Extensions as JSONExtensions, IJSONContributionRegistry } from 'vs/platform/jsonschemas/common/jsonContributionRegistry';
import { Registry } from 'vs/platform/registry/common/platform';
@ -177,7 +178,7 @@ export interface IConfigurationPropertySchema extends IJSONSchema {
}
export interface IConfigurationExtensionInfo {
id: string;
extensionDescription: IExtensionDescription;
restrictedConfigurations?: string[];
}
@ -195,16 +196,16 @@ export interface IConfigurationNode {
export interface IConfigurationDefaults {
overrides: IStringDictionary<any>;
extensionId?: string;
source?: IExtensionDescription | string;
}
export type IRegisteredConfigurationPropertySchema = IConfigurationPropertySchema & {
defaultDefaultValue?: any,
source?: string,
defaultSource?: string
source?: IExtensionDescription,
defaultSource?: IExtensionDescription | string;
};
export type IConfigurationDefaultOverride = { value: any, source?: string };
export type IConfigurationDefaultOverride = { value: any, source?: IExtensionDescription | string };
export const allSettings: { properties: IStringDictionary<IConfigurationPropertySchema>, patternProperties: IStringDictionary<IConfigurationPropertySchema> } = { properties: {}, patternProperties: {} };
export const applicationSettings: { properties: IStringDictionary<IConfigurationPropertySchema>, patternProperties: IStringDictionary<IConfigurationPropertySchema> } = { properties: {}, patternProperties: {} };
@ -283,26 +284,26 @@ class ConfigurationRegistry implements IConfigurationRegistry {
const properties: string[] = [];
const overrideIdentifiers: string[] = [];
for (const { overrides, extensionId } of configurationDefaults) {
for (const { overrides, source } of configurationDefaults) {
for (const key in overrides) {
properties.push(key);
if (OVERRIDE_PROPERTY_REGEX.test(key)) {
const defaultValue = { ...(this.configurationDefaultsOverrides.get(key)?.value || {}), ...overrides[key] };
this.configurationDefaultsOverrides.set(key, { source: extensionId, value: defaultValue });
this.configurationDefaultsOverrides.set(key, { source, value: defaultValue });
const property: IRegisteredConfigurationPropertySchema = {
type: 'object',
default: defaultValue,
description: nls.localize('defaultLanguageConfiguration.description', "Configure settings to be overridden for {0} language.", key),
$ref: resourceLanguageSettingsSchemaId,
defaultDefaultValue: defaultValue,
source: extensionId,
source: types.isString(source) ? undefined : source,
};
overrideIdentifiers.push(...overrideIdentifiersFromKey(key));
this.configurationProperties[key] = property;
this.defaultLanguageConfigurationOverridesNode.properties![key] = property;
} else {
this.configurationDefaultsOverrides.set(key, { value: overrides[key], source: extensionId });
this.configurationDefaultsOverrides.set(key, { value: overrides[key], source });
const property = this.configurationProperties[key];
if (property) {
this.updatePropertyDefaultValue(key, property);
@ -319,9 +320,12 @@ class ConfigurationRegistry implements IConfigurationRegistry {
public deregisterDefaultConfigurations(defaultConfigurations: IConfigurationDefaults[]): void {
const properties: string[] = [];
for (const { overrides, extensionId } of defaultConfigurations) {
for (const { overrides, source } of defaultConfigurations) {
for (const key in overrides) {
if (this.configurationDefaultsOverrides.get(key)?.source !== extensionId) {
const configurationDefaultsOverride = this.configurationDefaultsOverrides.get(key);
const id = types.isString(source) ? source : source?.identifier.value;
const configurationDefaultsOverrideSourceId = types.isString(configurationDefaultsOverride?.source) ? configurationDefaultsOverride?.source : configurationDefaultsOverride?.source?.identifier.value;
if (id !== configurationDefaultsOverrideSourceId) {
continue;
}
properties.push(key);
@ -401,7 +405,7 @@ class ConfigurationRegistry implements IConfigurationRegistry {
}
const property: IRegisteredConfigurationPropertySchema = properties[key];
property.source = extensionInfo?.id;
property.source = extensionInfo?.extensionDescription;
// update default value
property.defaultDefaultValue = properties[key].default;

View file

@ -144,7 +144,7 @@ const defaultConfigurationExtPoint = ExtensionsRegistry.registerExtensionPoint<I
});
defaultConfigurationExtPoint.setHandler((extensions, { added, removed }) => {
if (removed.length) {
const removedDefaultConfigurations = removed.map<IConfigurationDefaults>(extension => ({ overrides: objects.deepClone(extension.value), extensionId: extension.description.identifier.value }));
const removedDefaultConfigurations = removed.map<IConfigurationDefaults>(extension => ({ overrides: objects.deepClone(extension.value), source: extension.description }));
configurationRegistry.deregisterDefaultConfigurations(removedDefaultConfigurations);
}
if (added.length) {
@ -161,7 +161,7 @@ defaultConfigurationExtPoint.setHandler((extensions, { added, removed }) => {
}
}
}
return { overrides, extensionId: extension.description.identifier.value };
return { overrides, source: extension.description };
});
configurationRegistry.registerDefaultConfigurations(addedDefaultConfigurations);
}
@ -212,7 +212,7 @@ configurationExtPoint.setHandler((extensions, { added, removed }) => {
validateProperties(configuration, extension);
configuration.id = node.id || extension.description.identifier.value;
configuration.extensionInfo = { id: extension.description.identifier.value, restrictedConfigurations: extension.description.capabilities?.untrustedWorkspaces?.supported === 'limited' ? extension.description.capabilities?.untrustedWorkspaces.restrictedConfigurations : undefined };
configuration.extensionInfo = { extensionDescription: extension.description, restrictedConfigurations: extension.description.capabilities?.untrustedWorkspaces?.supported === 'limited' ? extension.description.capabilities?.untrustedWorkspaces.restrictedConfigurations : undefined };
configuration.title = configuration.title || extension.description.displayName || extension.description.identifier.value;
configurations.push(configuration);
return configurations;

View file

@ -314,7 +314,7 @@ export class SettingsTreeSettingElement extends SettingsTreeElement {
return false;
}
return Array.from(extensionFilters).some(extensionId => extensionId.toLowerCase() === this.setting.extensionInfo!.id.toLowerCase());
return Array.from(extensionFilters).some(extensionId => extensionId.toLowerCase() === this.setting.extensionInfo!.extensionDescription.identifier.value.toLowerCase());
}
matchesAnyFeature(featureFilters?: Set<string>): boolean {

View file

@ -38,6 +38,7 @@ import { forEach, IStringDictionary } from 'vs/base/common/collections';
import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { IWorkbenchAssignmentService } from 'vs/workbench/services/assignment/common/assignmentService';
import { isUndefined } from 'vs/base/common/types';
import { localize } from 'vs/nls';
class Workspace extends BaseWorkspace {
initialized: boolean = false;
@ -1151,7 +1152,7 @@ class UpdateExperimentalSettingsDefaults extends Disposable implements IWorkbenc
} catch (error) {/*ignore */ }
}
if (Object.keys(overrides).length) {
this.configurationRegistry.registerDefaultConfigurations([{ overrides }]);
this.configurationRegistry.registerDefaultConfigurations([{ overrides, source: localize('experimental', "Experiments") }]);
}
}
}

View file

@ -565,7 +565,7 @@ export class DefaultSettings extends Disposable {
}
if (title) {
if (!settingsGroup) {
settingsGroup = result.find(g => g.title === title && g.extensionInfo?.id === config.extensionInfo?.id);
settingsGroup = result.find(g => g.title === title && g.extensionInfo?.extensionDescription.identifier.value === config.extensionInfo?.extensionDescription.identifier.value);
if (!settingsGroup) {
settingsGroup = { sections: [{ settings: [] }], id: config.id || '', title: title || '', titleRange: nullRange, order: config.order, range: nullRange, extensionInfo: config.extensionInfo };
result.push(settingsGroup);