提交 9fa02f5e 编写于 作者: S Sandeep Somavarapu

#1587 Update override propery schema with allowed identifiers

上级 6ae3ffa5
......@@ -8,10 +8,12 @@ import { onUnexpectedError } from 'vs/base/common/errors';
import Event, { Emitter } from 'vs/base/common/event';
import * as mime from 'vs/base/common/mime';
import * as strings from 'vs/base/common/strings';
import { Registry } from 'vs/platform/platform';
import { ModesRegistry } from 'vs/editor/common/modes/modesRegistry';
import { ILanguageExtensionPoint } from 'vs/editor/common/services/modeService';
import { LanguageId, LanguageIdentifier } from 'vs/editor/common/modes';
import { NULL_MODE_ID, NULL_LANGUAGE_IDENTIFIER } from 'vs/editor/common/modes/nullMode';
import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry';
var hasOwnProperty = Object.prototype.hasOwnProperty;
......@@ -80,6 +82,7 @@ export class LanguagesRegistry {
});
});
Registry.as<IConfigurationRegistry>(Extensions.Configuration).registerOverrideIdentifiers(ModesRegistry.getLanguages().map(language => language.id));
this._onDidAddModes.fire(addedModes);
}
......
......@@ -45,6 +45,7 @@ export interface IConfigurationRegistry {
*/
getConfigurationProperties(): { [qualifiedKey: string]: IConfigurationPropertySchema };
registerOverrideIdentifiers(identifiers: string[]): void;
}
export interface IConfigurationPropertySchema extends IJSONSchema {
......@@ -70,12 +71,15 @@ class ConfigurationRegistry implements IConfigurationRegistry {
private configurationProperties: { [qualifiedKey: string]: IJSONSchema };
private configurationSchema: IJSONSchema;
private _onDidRegisterConfiguration: Emitter<IConfigurationRegistry>;
private overrideIdentifiers: string[] = [];
private overridePropertyPattern: string;
constructor() {
this.configurationContributors = [];
this.configurationSchema = { properties: {}, patternProperties: {}, additionalProperties: false, errorMessage: 'Unknown configuration setting' };
this._onDidRegisterConfiguration = new Emitter<IConfigurationRegistry>();
this.configurationProperties = {};
this.computeOverridePropertyPattern();
contributionRegistry.registerSchema(schemaId, this.configurationSchema);
this.registerOverrideSettingsConfiguration();
......@@ -100,6 +104,11 @@ class ConfigurationRegistry implements IConfigurationRegistry {
this._onDidRegisterConfiguration.fire(this);
}
public registerOverrideIdentifiers(overrideIdentifiers: string[]): void {
this.overrideIdentifiers.push(...overrideIdentifiers);
this.updateOverridePropertyPatternKey();
}
private registerProperties(configuration: IConfigurationNode, overridable: boolean = false) {
overridable = configuration.overridable || overridable;
let properties = configuration.properties;
......@@ -150,7 +159,7 @@ class ConfigurationRegistry implements IConfigurationRegistry {
}
};
if (configuration.id === SETTINGS_OVERRRIDE_NODE_ID) {
configurationSchema.patternProperties[OVERRIDE_PROPERTY] = objects.clone(configuration.properties['[]']);
configurationSchema.patternProperties[this.overridePropertyPattern] = objects.clone(configuration.properties['[]']);
} else {
register(configuration);
}
......@@ -159,16 +168,27 @@ class ConfigurationRegistry implements IConfigurationRegistry {
private updateSchemaForOverrideSettingsConfiguration(configuration: IConfigurationNode): void {
if (configuration.id !== SETTINGS_OVERRRIDE_NODE_ID) {
let patternProperties = this.configurationSchema.patternProperties[OVERRIDE_PROPERTY];
let patternProperties = this.configurationSchema.patternProperties[this.overridePropertyPattern];
if (patternProperties) {
if (!patternProperties.properties) {
patternProperties.properties = {};
}
this.update(configuration, patternProperties);
contributionRegistry.registerSchema(schemaId, this.configurationSchema);
}
}
}
private updateOverridePropertyPatternKey(): void {
let patternProperties = this.configurationSchema.patternProperties[this.overridePropertyPattern];
if (patternProperties) {
delete this.configurationSchema.patternProperties[this.overridePropertyPattern];
this.computeOverridePropertyPattern();
this.configurationSchema.patternProperties[this.overridePropertyPattern] = patternProperties;
contributionRegistry.registerSchema(schemaId, this.configurationSchema);
}
}
private update(configuration: IConfigurationNode, overridePropertiesSchema: IJSONSchema): void {
let properties = configuration.properties;
if (properties) {
......@@ -184,13 +204,17 @@ class ConfigurationRegistry implements IConfigurationRegistry {
}
}
private computeOverridePropertyPattern(): void {
this.overridePropertyPattern = this.overrideIdentifiers.length ? OVERRIDE_PATTERN_WITH_SUBSTITUTION.replace('${0}', this.overrideIdentifiers.join('|')) : OVERRIDE_PROPERTY;
}
private registerOverrideSettingsConfiguration(): void {
const properties = {
'[]': {
type: 'object',
description: nls.localize('overrideSettings.description', "Configure settings to be overridden for a set of language identifiers."),
additionalProperties: false,
errorMessage: 'Unknown configuration setting'
errorMessage: 'Unknown Identifier. Use language identifiers'
}
};
this.registerConfiguration({
......@@ -204,6 +228,7 @@ class ConfigurationRegistry implements IConfigurationRegistry {
const SETTINGS_OVERRRIDE_NODE_ID = 'override';
const OVERRIDE_PROPERTY = '\\[.*\\]$';
const OVERRIDE_PATTERN_WITH_SUBSTITUTION = '\\[(${0})\\]$';
export const OVERRIDE_PROPERTY_PATTERN = new RegExp(OVERRIDE_PROPERTY);
function getDefaultValue(type: string | string[]): any {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册