68 lines
2.2 KiB
TypeScript
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 = [];
|
||
|
}
|
||
|
}
|
||
|
|