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

View file

@ -144,7 +144,7 @@ const defaultConfigurationExtPoint = ExtensionsRegistry.registerExtensionPoint<I
}); });
defaultConfigurationExtPoint.setHandler((extensions, { added, removed }) => { defaultConfigurationExtPoint.setHandler((extensions, { added, removed }) => {
if (removed.length) { 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); configurationRegistry.deregisterDefaultConfigurations(removedDefaultConfigurations);
} }
if (added.length) { 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); configurationRegistry.registerDefaultConfigurations(addedDefaultConfigurations);
} }
@ -212,7 +212,7 @@ configurationExtPoint.setHandler((extensions, { added, removed }) => {
validateProperties(configuration, extension); validateProperties(configuration, extension);
configuration.id = node.id || extension.description.identifier.value; 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; configuration.title = configuration.title || extension.description.displayName || extension.description.identifier.value;
configurations.push(configuration); configurations.push(configuration);
return configurations; return configurations;

View file

@ -314,7 +314,7 @@ export class SettingsTreeSettingElement extends SettingsTreeElement {
return false; 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 { 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 { IExtensionService } from 'vs/workbench/services/extensions/common/extensions';
import { IWorkbenchAssignmentService } from 'vs/workbench/services/assignment/common/assignmentService'; import { IWorkbenchAssignmentService } from 'vs/workbench/services/assignment/common/assignmentService';
import { isUndefined } from 'vs/base/common/types'; import { isUndefined } from 'vs/base/common/types';
import { localize } from 'vs/nls';
class Workspace extends BaseWorkspace { class Workspace extends BaseWorkspace {
initialized: boolean = false; initialized: boolean = false;
@ -1151,7 +1152,7 @@ class UpdateExperimentalSettingsDefaults extends Disposable implements IWorkbenc
} catch (error) {/*ignore */ } } catch (error) {/*ignore */ }
} }
if (Object.keys(overrides).length) { 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 (title) {
if (!settingsGroup) { 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) { if (!settingsGroup) {
settingsGroup = { sections: [{ settings: [] }], id: config.id || '', title: title || '', titleRange: nullRange, order: config.order, range: nullRange, extensionInfo: config.extensionInfo }; settingsGroup = { sections: [{ settings: [] }], id: config.id || '', title: title || '', titleRange: nullRange, order: config.order, range: nullRange, extensionInfo: config.extensionInfo };
result.push(settingsGroup); result.push(settingsGroup);