47 lines
1.7 KiB
TypeScript
47 lines
1.7 KiB
TypeScript
import * as vscode from 'vscode';
|
|
import { LanguageClient } from 'vscode-languageclient/node';
|
|
import { UpdateConfigurationType } from '../../global/lsp';
|
|
|
|
interface ConfigItem {
|
|
name: string,
|
|
value: CommonValue
|
|
}
|
|
|
|
type CommonValue = string | boolean | number;
|
|
|
|
export function registerConfigurationUpdater(client: LanguageClient, packageJson: any) {
|
|
const lspConfigures: ConfigItem[] = [];
|
|
const properties = packageJson?.contributes?.configuration?.properties;
|
|
const dideConfig = vscode.workspace.getConfiguration('digital-ide');
|
|
for (const propertyName of Object.keys(properties) || []) {
|
|
if (propertyName.includes('function.lsp')) {
|
|
const section = propertyName.slice(12);
|
|
let value = dideConfig.get<CommonValue>(section, '');
|
|
lspConfigures.push({ name: propertyName, value });
|
|
}
|
|
}
|
|
|
|
// 初始化,配置参数全部同步到后端
|
|
client.sendRequest(UpdateConfigurationType, {
|
|
configs: lspConfigures,
|
|
configType: 'lsp'
|
|
});
|
|
|
|
vscode.workspace.onDidChangeConfiguration(async event => {
|
|
const changeConfigs: ConfigItem[] = [];
|
|
const dideConfig = vscode.workspace.getConfiguration('');
|
|
for (const config of lspConfigures) {
|
|
if (event.affectsConfiguration(config.name)) {
|
|
const lastestValue = dideConfig.get<CommonValue>(config.name, '');
|
|
changeConfigs.push({ name: config.name, value: lastestValue });
|
|
}
|
|
}
|
|
|
|
if (changeConfigs.length > 0) {
|
|
await client.sendRequest(UpdateConfigurationType, {
|
|
configs: changeConfigs,
|
|
configType: 'lsp'
|
|
});
|
|
}
|
|
});
|
|
} |