Files
vscode/src/vs/workbench/services/userDataSync/common/userDataSyncUtil.ts
Sandeep Somavarapu 5c928dff37 Fix #85618
2020-01-15 11:06:38 +01:00

58 lines
2.9 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 { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
import { IUserDataSyncUtilService } from 'vs/platform/userDataSync/common/userDataSync';
import { IStringDictionary } from 'vs/base/common/collections';
import { registerSingleton } from 'vs/platform/instantiation/common/extensions';
import { FormattingOptions } from 'vs/base/common/jsonFormatter';
import { URI } from 'vs/base/common/uri';
import { ITextModelService } from 'vs/editor/common/services/resolverService';
import { ITextResourcePropertiesService, ITextResourceConfigurationService } from 'vs/editor/common/services/textResourceConfigurationService';
import { IConfigurationService, ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
class UserDataSyncUtilService implements IUserDataSyncUtilService {
_serviceBrand: undefined;
constructor(
@IKeybindingService private readonly keybindingsService: IKeybindingService,
@ITextModelService private readonly textModelService: ITextModelService,
@ITextResourcePropertiesService private readonly textResourcePropertiesService: ITextResourcePropertiesService,
@ITextResourceConfigurationService private readonly textResourceConfigurationService: ITextResourceConfigurationService,
@IConfigurationService private readonly configurationService: IConfigurationService,
) { }
public async updateConfigurationValue(key: string, value: any): Promise<void> {
await this.configurationService.updateValue(key, value, ConfigurationTarget.USER);
}
public async resolveUserBindings(userBindings: string[]): Promise<IStringDictionary<string>> {
const keys: IStringDictionary<string> = {};
for (const userbinding of userBindings) {
keys[userbinding] = this.keybindingsService.resolveUserBinding(userbinding).map(part => part.getUserSettingsLabel()).join(' ');
}
return keys;
}
async resolveFormattingOptions(resource: URI): Promise<FormattingOptions> {
try {
const modelReference = await this.textModelService.createModelReference(resource);
const { insertSpaces, tabSize } = modelReference.object.textEditorModel.getOptions();
const eol = modelReference.object.textEditorModel.getEOL();
modelReference.dispose();
return { eol, insertSpaces, tabSize };
} catch (e) {
}
return {
eol: this.textResourcePropertiesService.getEOL(resource),
insertSpaces: this.textResourceConfigurationService.getValue<boolean>(resource, 'editor.insertSpaces'),
tabSize: this.textResourceConfigurationService.getValue(resource, 'editor.tabSize')
};
}
}
registerSingleton(IUserDataSyncUtilService, UserDataSyncUtilService);