code-server/lib/vscode/extensions/merge-conflict/src/services.ts

68 lines
2.2 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as vscode from 'vscode';
import DocumentTracker from './documentTracker';
import CodeLensProvider from './codelensProvider';
import CommandHandler from './commandHandler';
import ContentProvider from './contentProvider';
import Decorator from './mergeDecorator';
import * as interfaces from './interfaces';
const ConfigurationSectionName = 'merge-conflict';
export default class ServiceWrapper implements vscode.Disposable {
private services: vscode.Disposable[] = [];
constructor(private context: vscode.ExtensionContext) {
}
begin() {
let configuration = this.createExtensionConfiguration();
const documentTracker = new DocumentTracker();
this.services.push(
documentTracker,
new CommandHandler(documentTracker),
new CodeLensProvider(documentTracker),
new ContentProvider(this.context),
new Decorator(this.context, documentTracker),
);
this.services.forEach((service: any) => {
if (service.begin && service.begin instanceof Function) {
service.begin(configuration);
}
});
vscode.workspace.onDidChangeConfiguration(() => {
this.services.forEach((service: any) => {
if (service.configurationUpdated && service.configurationUpdated instanceof Function) {
service.configurationUpdated(this.createExtensionConfiguration());
}
});
});
}
createExtensionConfiguration(): interfaces.IExtensionConfiguration {
const workspaceConfiguration = vscode.workspace.getConfiguration(ConfigurationSectionName);
const codeLensEnabled: boolean = workspaceConfiguration.get('codeLens.enabled', true);
const decoratorsEnabled: boolean = workspaceConfiguration.get('decorators.enabled', true);
return {
enableCodeLens: codeLensEnabled,
enableDecorations: decoratorsEnabled,
enableEditorOverview: decoratorsEnabled
};
}
dispose() {
this.services.forEach(disposable => disposable.dispose());
this.services = [];
}
}