mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-27 03:54:24 +01:00
Fix #46851
This commit is contained in:
@@ -8,13 +8,14 @@ import * as objects from 'vs/base/common/objects';
|
||||
import { Registry } from 'vs/platform/registry/common/platform';
|
||||
import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
||||
import { ExtensionsRegistry, IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry';
|
||||
import { IConfigurationNode, IConfigurationRegistry, Extensions, resourceLanguageSettingsSchemaId, validateProperty, ConfigurationScope, OVERRIDE_PROPERTY_PATTERN, OVERRIDE_PROPERTY_REGEX } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { IConfigurationNode, IConfigurationRegistry, Extensions, resourceLanguageSettingsSchemaId, validateProperty, ConfigurationScope, OVERRIDE_PROPERTY_PATTERN, OVERRIDE_PROPERTY_REGEX, windowSettings, resourceSettings, machineOverridableSettings } from 'vs/platform/configuration/common/configurationRegistry';
|
||||
import { IJSONContributionRegistry, Extensions as JSONExtensions } from 'vs/platform/jsonschemas/common/jsonContributionRegistry';
|
||||
import { workspaceSettingsSchemaId, launchSchemaId, tasksSchemaId } from 'vs/workbench/services/configuration/common/configuration';
|
||||
import { isObject } from 'vs/base/common/types';
|
||||
import { ExtensionIdentifier } from 'vs/platform/extensions/common/extensions';
|
||||
import { IStringDictionary } from 'vs/base/common/collections';
|
||||
|
||||
const jsonRegistry = Registry.as<IJSONContributionRegistry>(JSONExtensions.JSONContribution);
|
||||
const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
|
||||
|
||||
const configurationEntrySchema: IJSONSchema = {
|
||||
@@ -111,21 +112,34 @@ const configurationEntrySchema: IJSONSchema = {
|
||||
}
|
||||
};
|
||||
|
||||
const configurationDefaultsSchemaId = 'vscode://schemas/settings/configurationDefaults';
|
||||
const configurationDefaultsSchema: IJSONSchema = {
|
||||
type: 'object',
|
||||
description: nls.localize('configurationDefaults.description', 'Contribute defaults for configurations'),
|
||||
properties: {},
|
||||
patternProperties: {
|
||||
[OVERRIDE_PROPERTY_PATTERN]: {
|
||||
type: 'object',
|
||||
default: {},
|
||||
$ref: resourceLanguageSettingsSchemaId,
|
||||
}
|
||||
},
|
||||
additionalProperties: false
|
||||
};
|
||||
jsonRegistry.registerSchema(configurationDefaultsSchemaId, configurationDefaultsSchema);
|
||||
configurationRegistry.onDidSchemaChange(() => {
|
||||
configurationDefaultsSchema.properties = {
|
||||
...machineOverridableSettings.properties,
|
||||
...windowSettings.properties,
|
||||
...resourceSettings.properties
|
||||
};
|
||||
});
|
||||
|
||||
// BEGIN VSCode extension point `configurationDefaults`
|
||||
const defaultConfigurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IConfigurationNode>({
|
||||
extensionPoint: 'configurationDefaults',
|
||||
jsonSchema: {
|
||||
description: nls.localize('vscode.extension.contributes.defaultConfiguration', 'Contributes default editor configuration settings by language.'),
|
||||
type: 'object',
|
||||
patternProperties: {
|
||||
[OVERRIDE_PROPERTY_PATTERN]: {
|
||||
type: 'object',
|
||||
default: {},
|
||||
$ref: resourceLanguageSettingsSchemaId,
|
||||
}
|
||||
},
|
||||
errorMessage: nls.localize('config.property.defaultConfiguration.languageExpected', "Language selector expected (e.g. [\"java\"])"),
|
||||
additionalProperties: false
|
||||
$ref: configurationDefaultsSchemaId,
|
||||
}
|
||||
});
|
||||
defaultConfigurationExtPoint.setHandler((extensions, { added, removed }) => {
|
||||
@@ -134,12 +148,17 @@ defaultConfigurationExtPoint.setHandler((extensions, { added, removed }) => {
|
||||
configurationRegistry.deregisterDefaultConfigurations(removedDefaultConfigurations);
|
||||
}
|
||||
if (added.length) {
|
||||
const registeredProperties = configurationRegistry.getConfigurationProperties();
|
||||
const allowedScopes = [ConfigurationScope.MACHINE_OVERRIDABLE, ConfigurationScope.WINDOW, ConfigurationScope.RESOURCE, ConfigurationScope.LANGUAGE_OVERRIDABLE];
|
||||
const addedDefaultConfigurations = added.map<IStringDictionary<any>>(extension => {
|
||||
const defaults: IStringDictionary<any> = objects.deepClone(extension.value);
|
||||
for (const key of Object.keys(defaults)) {
|
||||
if (!OVERRIDE_PROPERTY_REGEX.test(key) || typeof defaults[key] !== 'object') {
|
||||
extension.collector.warn(nls.localize('config.property.defaultConfiguration.warning', "Cannot register configuration defaults for '{0}'. Only defaults for language specific settings are supported.", key));
|
||||
delete defaults[key];
|
||||
if (!OVERRIDE_PROPERTY_REGEX.test(key)) {
|
||||
const registeredPropertyScheme = registeredProperties[key];
|
||||
if (registeredPropertyScheme.scope && !allowedScopes.includes(registeredPropertyScheme.scope)) {
|
||||
extension.collector.warn(nls.localize('config.property.defaultConfiguration.warning', "Cannot register configuration defaults for '{0}'. Only defaults for machine-overridable, window, resource and language overridable scoped settings are supported.", key));
|
||||
delete defaults[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
return defaults;
|
||||
@@ -273,7 +292,6 @@ configurationExtPoint.setHandler((extensions, { added, removed }) => {
|
||||
});
|
||||
// END VSCode extension point `configuration`
|
||||
|
||||
const jsonRegistry = Registry.as<IJSONContributionRegistry>(JSONExtensions.JSONContribution);
|
||||
jsonRegistry.registerSchema('vscode://schemas/workspaceConfig', {
|
||||
allowComments: true,
|
||||
allowTrailingCommas: true,
|
||||
|
||||
Reference in New Issue
Block a user