mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-09 19:34:34 +01:00
#1587 Update override propery schema with allowed identifiers
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user