Change extension point registration to use a descriptor object

This commit is contained in:
Alex Dima 2018-12-13 13:39:23 +01:00
parent aa2b715832
commit e2a42ca321
17 changed files with 455 additions and 382 deletions

View file

@ -74,7 +74,10 @@ export const viewsContainersContribution: IJSONSchema = {
}
};
export const viewsContainersExtensionPoint: IExtensionPoint<{ [loc: string]: IUserFriendlyViewsContainerDescriptor[] }> = ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: IUserFriendlyViewsContainerDescriptor[] }>('viewsContainers', [], viewsContainersContribution);
export const viewsContainersExtensionPoint: IExtensionPoint<{ [loc: string]: IUserFriendlyViewsContainerDescriptor[] }> = ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: IUserFriendlyViewsContainerDescriptor[] }>({
extensionPoint: 'viewsContainers',
jsonSchema: viewsContainersContribution
});
const TEST_VIEW_CONTAINER_ORDER = 6;

View file

@ -82,7 +82,11 @@ const viewsContribution: IJSONSchema = {
};
const viewsExtensionPoint: IExtensionPoint<{ [loc: string]: IUserFriendlyViewDescriptor[] }> = ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: IUserFriendlyViewDescriptor[] }>('views', [viewsContainersExtensionPoint], viewsContribution);
const viewsExtensionPoint: IExtensionPoint<{ [loc: string]: IUserFriendlyViewDescriptor[] }> = ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: IUserFriendlyViewDescriptor[] }>({
extensionPoint: 'views',
deps: [viewsContainersExtensionPoint],
jsonSchema: viewsContribution
});
class ViewsContainersExtensionHandler implements IWorkbenchContribution {

View file

@ -11,7 +11,9 @@ import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { inputsSchema } from 'vs/workbench/services/configurationResolver/common/configurationResolverSchema';
// debuggers extension point
export const debuggersExtPoint = extensionsRegistry.ExtensionsRegistry.registerExtensionPoint<IDebuggerContribution[]>('debuggers', [], {
export const debuggersExtPoint = extensionsRegistry.ExtensionsRegistry.registerExtensionPoint<IDebuggerContribution[]>({
extensionPoint: 'debuggers',
jsonSchema: {
description: nls.localize('vscode.extension.contributes.debuggers', 'Contributes debug adapters.'),
type: 'array',
defaultSnippets: [{ body: [{ type: '', extensions: [] }] }],
@ -99,6 +101,7 @@ export const debuggersExtPoint = extensionsRegistry.ExtensionsRegistry.registerE
}
}
}
}
});
export interface IRawBreakpointContribution {
@ -106,7 +109,9 @@ export interface IRawBreakpointContribution {
}
// breakpoints extension point #9037
export const breakpointsExtPoint = extensionsRegistry.ExtensionsRegistry.registerExtensionPoint<IRawBreakpointContribution[]>('breakpoints', [], {
export const breakpointsExtPoint = extensionsRegistry.ExtensionsRegistry.registerExtensionPoint<IRawBreakpointContribution[]>({
extensionPoint: 'breakpoints',
jsonSchema: {
description: nls.localize('vscode.extension.contributes.breakpoints', 'Contributes breakpoints.'),
type: 'array',
defaultSnippets: [{ body: [{ language: '' }] }],
@ -120,6 +125,7 @@ export const breakpointsExtPoint = extensionsRegistry.ExtensionsRegistry.registe
},
}
}
}
});
// debug general schema

View file

@ -251,7 +251,9 @@ registerLocaleDefinitionSchema([platform.language]);
const workbenchRegistry = Registry.as<IWorkbenchContributionsRegistry>(WorkbenchExtensions.Workbench);
workbenchRegistry.registerWorkbenchContribution(LocalizationWorkbenchContribution, LifecyclePhase.Eventually);
ExtensionsRegistry.registerExtensionPoint('localizations', [], {
ExtensionsRegistry.registerExtensionPoint({
extensionPoint: 'localizations',
jsonSchema: {
description: localize('vscode.extension.contributes.localizations', "Contributes localizations to the editor"),
type: 'array',
default: [],
@ -296,4 +298,5 @@ ExtensionsRegistry.registerExtensionPoint('localizations', [], {
}
}
}
}
});

View file

@ -106,7 +106,11 @@ namespace snippetExt {
}
};
export const point = ExtensionsRegistry.registerExtensionPoint<snippetExt.ISnippetsExtensionPoint[]>('snippets', [languagesExtPoint], snippetExt.snippetsContribution);
export const point = ExtensionsRegistry.registerExtensionPoint<snippetExt.ISnippetsExtensionPoint[]>({
extensionPoint: 'snippets',
deps: [languagesExtPoint],
jsonSchema: snippetExt.snippetsContribution
});
}
function watch(service: IFileService, resource: URI, callback: (type: FileChangeType, resource: URI) => any): IDisposable {

View file

@ -1086,7 +1086,9 @@ export namespace Schemas {
};
}
let problemPatternExtPoint = ExtensionsRegistry.registerExtensionPoint<Config.NamedProblemPatterns>('problemPatterns', [], {
const problemPatternExtPoint = ExtensionsRegistry.registerExtensionPoint<Config.NamedProblemPatterns>({
extensionPoint: 'problemPatterns',
jsonSchema: {
description: localize('ProblemPatternExtPoint', 'Contributes problem patterns'),
type: 'array',
items: {
@ -1095,6 +1097,7 @@ let problemPatternExtPoint = ExtensionsRegistry.registerExtensionPoint<Config.Na
Schemas.NamedMultiLineProblemPattern
]
}
}
});
export interface IProblemPatternRegistry {
@ -1659,10 +1662,14 @@ export namespace Schemas {
};
}
let problemMatchersExtPoint = ExtensionsRegistry.registerExtensionPoint<Config.NamedProblemMatcher[]>('problemMatchers', [problemPatternExtPoint], {
const problemMatchersExtPoint = ExtensionsRegistry.registerExtensionPoint<Config.NamedProblemMatcher[]>({
extensionPoint: 'problemMatchers',
deps: [problemPatternExtPoint],
jsonSchema: {
description: localize('ProblemMatcherExtPoint', 'Contributes problem matchers'),
type: 'array',
items: Schemas.NamedProblemMatcher
}
});
export interface IProblemMatcherRegistry {

View file

@ -67,10 +67,13 @@ namespace Configuration {
}
const taskDefinitionsExtPoint = ExtensionsRegistry.registerExtensionPoint<Configuration.TaskDefinition[]>('taskDefinitions', [], {
const taskDefinitionsExtPoint = ExtensionsRegistry.registerExtensionPoint<Configuration.TaskDefinition[]>({
extensionPoint: 'taskDefinitions',
jsonSchema: {
description: nls.localize('TaskDefinitionExtPoint', 'Contributes task kinds'),
type: 'array',
items: taskDefinitionSchema
}
});
export interface ITaskDefinitionRegistry {

View file

@ -276,7 +276,10 @@ namespace schema {
};
}
ExtensionsRegistry.registerExtensionPoint<schema.IUserFriendlyCommand | schema.IUserFriendlyCommand[]>('commands', [], schema.commandsContribution).setHandler(extensions => {
ExtensionsRegistry.registerExtensionPoint<schema.IUserFriendlyCommand | schema.IUserFriendlyCommand[]>({
extensionPoint: 'commands',
jsonSchema: schema.commandsContribution
}).setHandler(extensions => {
function handleCommand(userFriendlyCommand: schema.IUserFriendlyCommand, extension: IExtensionPointUser<any>) {
@ -316,7 +319,10 @@ ExtensionsRegistry.registerExtensionPoint<schema.IUserFriendlyCommand | schema.I
});
ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: schema.IUserFriendlyMenuItem[] }>('menus', [], schema.menusContribtion).setHandler(extensions => {
ExtensionsRegistry.registerExtensionPoint<{ [loc: string]: schema.IUserFriendlyMenuItem[] }>({
extensionPoint: 'menus',
jsonSchema: schema.menusContribtion
}).setHandler(extensions => {
for (let extension of extensions) {
const { value, collector } = extension;

View file

@ -80,7 +80,9 @@ const configurationEntrySchema: IJSONSchema = {
let registeredDefaultConfigurations: IDefaultConfigurationExtension[] = [];
// BEGIN VSCode extension point `configurationDefaults`
const defaultConfigurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IConfigurationNode>('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',
defaultSnippets: [{ body: {} }],
@ -91,6 +93,7 @@ const defaultConfigurationExtPoint = ExtensionsRegistry.registerExtensionPoint<I
$ref: editorConfigurationSchemaId,
}
}
}
});
defaultConfigurationExtPoint.setHandler(extensions => {
registeredDefaultConfigurations = extensions.map(extension => {
@ -106,7 +109,10 @@ defaultConfigurationExtPoint.setHandler(extensions => {
// BEGIN VSCode extension point `configuration`
const configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IConfigurationNode>('configuration', [defaultConfigurationExtPoint], {
const configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IConfigurationNode>({
extensionPoint: 'configuration',
deps: [defaultConfigurationExtPoint],
jsonSchema: {
description: nls.localize('vscode.extension.contributes.configuration', 'Contributes configuration settings.'),
oneOf: [
configurationEntrySchema,
@ -115,6 +121,7 @@ const configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IConfigu
items: configurationEntrySchema
}
]
}
});
configurationExtPoint.setHandler(extensions => {
const configurations: IConfigurationNode[] = [];

View file

@ -331,6 +331,13 @@ export const schema = {
}
};
export interface IExtensionPointDescriptor {
isDynamic?: boolean;
extensionPoint: string;
deps?: IExtensionPoint<any>[];
jsonSchema: IJSONSchema;
}
export class ExtensionsRegistryImpl {
private _extensionPoints: { [extPoint: string]: ExtensionPoint<any>; };
@ -339,14 +346,14 @@ export class ExtensionsRegistryImpl {
this._extensionPoints = {};
}
public registerExtensionPoint<T>(extensionPoint: string, deps: IExtensionPoint<any>[], jsonSchema: IJSONSchema): IExtensionPoint<T> {
if (hasOwnProperty.call(this._extensionPoints, extensionPoint)) {
throw new Error('Duplicate extension point: ' + extensionPoint);
public registerExtensionPoint<T>(desc: IExtensionPointDescriptor): IExtensionPoint<T> {
if (hasOwnProperty.call(this._extensionPoints, desc.extensionPoint)) {
throw new Error('Duplicate extension point: ' + desc.extensionPoint);
}
let result = new ExtensionPoint<T>(extensionPoint);
this._extensionPoints[extensionPoint] = result;
let result = new ExtensionPoint<T>(desc.extensionPoint);
this._extensionPoints[desc.extensionPoint] = result;
schema.properties['contributes'].properties[extensionPoint] = jsonSchema;
schema.properties['contributes'].properties[desc.extensionPoint] = desc.jsonSchema;
schemaRegistry.registerSchema(schemaId, schema);
return result;

View file

@ -13,7 +13,9 @@ interface IJSONValidationExtensionPoint {
url: string;
}
let configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IJSONValidationExtensionPoint[]>('jsonValidation', [], {
const configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IJSONValidationExtensionPoint[]>({
extensionPoint: 'jsonValidation',
jsonSchema: {
description: nls.localize('contributes.jsonValidation', 'Contributes json schema configuration.'),
type: 'array',
defaultSnippets: [{ body: [{ fileMatch: '${1:file.json}', url: '${2:url}' }] }],
@ -31,6 +33,7 @@ let configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IJSONValid
}
}
}
}
});
export class JSONValidationExtensionPoint {

View file

@ -230,7 +230,9 @@ let keybindingType: IJSONSchema = {
}
};
let keybindingsExtPoint = ExtensionsRegistry.registerExtensionPoint<ContributedKeyBinding | ContributedKeyBinding[]>('keybindings', [], {
const keybindingsExtPoint = ExtensionsRegistry.registerExtensionPoint<ContributedKeyBinding | ContributedKeyBinding[]>({
extensionPoint: 'keybindings',
jsonSchema: {
description: nls.localize('vscode.extension.contributes.keybindings', "Contributes keybindings."),
oneOf: [
keybindingType,
@ -239,6 +241,7 @@ let keybindingsExtPoint = ExtensionsRegistry.registerExtensionPoint<ContributedK
items: keybindingType
}
]
}
});
export const enum DispatchConfig {

View file

@ -27,7 +27,10 @@ export interface IRawLanguageExtensionPoint {
configuration: string;
}
export const languagesExtPoint: IExtensionPoint<IRawLanguageExtensionPoint[]> = ExtensionsRegistry.registerExtensionPoint<IRawLanguageExtensionPoint[]>('languages', [], {
export const languagesExtPoint: IExtensionPoint<IRawLanguageExtensionPoint[]> = ExtensionsRegistry.registerExtensionPoint<IRawLanguageExtensionPoint[]>({
isDynamic: true,
extensionPoint: 'languages',
jsonSchema: {
description: nls.localize('vscode.extension.contributes.languages', 'Contributes language declarations.'),
type: 'array',
items: {
@ -85,6 +88,7 @@ export const languagesExtPoint: IExtensionPoint<IRawLanguageExtensionPoint[]> =
}
}
}
}
});
export class WorkbenchModeServiceImpl extends ModeServiceImpl {

View file

@ -24,7 +24,10 @@ export interface ITMSyntaxExtensionPoint {
injectTo: string[];
}
export const grammarsExtPoint: IExtensionPoint<ITMSyntaxExtensionPoint[]> = ExtensionsRegistry.registerExtensionPoint<ITMSyntaxExtensionPoint[]>('grammars', [languagesExtPoint], {
export const grammarsExtPoint: IExtensionPoint<ITMSyntaxExtensionPoint[]> = ExtensionsRegistry.registerExtensionPoint<ITMSyntaxExtensionPoint[]>({
extensionPoint: 'grammars',
deps: [languagesExtPoint],
jsonSchema: {
description: nls.localize('vscode.extension.contributes.grammars', 'Contributes textmate tokenizers.'),
type: 'array',
defaultSnippets: [{ body: [{ language: '${1:id}', scopeName: 'source.${2:id}', path: './syntaxes/${3:id}.tmLanguage.' }] }],
@ -65,4 +68,5 @@ export const grammarsExtPoint: IExtensionPoint<ITMSyntaxExtensionPoint[]> = Exte
},
required: ['scopeName', 'path']
}
}
});

View file

@ -17,7 +17,9 @@ interface IColorExtensionPoint {
const colorReferenceSchema = getColorRegistry().getColorReferenceSchema();
const colorIdPattern = '^\\w+[.\\w+]*$';
const configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IColorExtensionPoint[]>('colors', [], {
const configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IColorExtensionPoint[]>({
extensionPoint: 'colors',
jsonSchema: {
description: nls.localize('contributes.color', 'Contributes extension defined themable colors'),
type: 'array',
items: {
@ -64,6 +66,7 @@ const configurationExtPoint = ExtensionsRegistry.registerExtensionPoint<IColorEx
},
}
}
}
});
export class ColorExtensionPoint {

View file

@ -14,8 +14,9 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten
import { Event, Emitter } from 'vs/base/common/event';
import { URI } from 'vs/base/common/uri';
let themesExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensionPoint[]>('themes', [], {
const themesExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensionPoint[]>({
extensionPoint: 'themes',
jsonSchema: {
description: nls.localize('vscode.extension.contributes.themes', 'Contributes textmate color themes.'),
type: 'array',
items: {
@ -41,6 +42,7 @@ let themesExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensionPo
},
required: ['path', 'uiTheme']
}
}
});
export class ColorThemeStore {

View file

@ -14,7 +14,9 @@ import { Event, Emitter } from 'vs/base/common/event';
import { FileIconThemeData } from 'vs/workbench/services/themes/electron-browser/fileIconThemeData';
import { URI } from 'vs/base/common/uri';
let iconThemeExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensionPoint[]>('iconThemes', [], {
const iconThemeExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensionPoint[]>({
extensionPoint: 'iconThemes',
jsonSchema: {
description: nls.localize('vscode.extension.contributes.iconThemes', 'Contributes file icon themes.'),
type: 'array',
items: {
@ -36,7 +38,9 @@ let iconThemeExtPoint = ExtensionsRegistry.registerExtensionPoint<IThemeExtensio
},
required: ['path', 'id']
}
}
});
export class FileIconThemeStore {
private knownIconThemes: FileIconThemeData[];