笔记软件在2023/4/7 17:21:11推送该笔记
当我们写插件的客户端部分的时候,我们已经定义了一个控制最大问题报告数的配置。所以我们也可以在服务器中写一段读取客户端配置的代码
function getDocumentSettings(resource: string): Thenable<ExampleSettings> {
if (!hasConfigurationCapability) {
return Promise.resolve(globalSettings);
}
let result = documentSettings.get(resource);
if (!result) {
result = connection.workspace.getConfiguration({
scopeUri: resource,
section: 'languageServerExample'
});
documentSettings.set(resource, result);
}
return result;
}
现在唯一要做的事情就是在服务器端中监听用户修改的设置变动,然后重新验证已经打开的文本文件。为了重用文本变动事件的处理函数,我们把代码提取到validateTextDocument
函数中,然后新建一个maxNumberOfProblems
变量
async function validateTextDocument(textDocument: TextDocument): Promise<void> {
// 在这个简单的示例中,每次校验运行时我们都获取一次配置
let settings = await getDocumentSettings(textDocument.uri);
// 校验器如果检测到连续超过2个以上的大写字母则会报错
let text = textDocument.getText();
let pattern = /\b[A-Z]{2,}\b/g;
let m: RegExpExecArray;
let problems = 0;
let diagnostics: Diagnostic[] = [];
while ((m = pattern.exec(text)) && problems < settings.maxNumberOfProblems) {
problems++;
let diagnosic: Diagnostic = {
severity: DiagnosticSeverity.Warning,
range: {
start: textDocument.positionAt(m.index),
end: textDocument.positionAt(m.index + m[0].length)
},
message: `${m[0]} is all uppercase.`,
source: 'ex'
};
if (hasDiagnosticRelatedInformationCapability) {
diagnosic.relatedInformation = [
{
location: {
uri: textDocument.uri,
range: Object.assign({}, diagnosic.range)
},
message: 'Spelling matters'
},
{
location: {
uri: textDocument.uri,
range: Object.assign({}, diagnosic.range)
},
message: 'Particularly for names'
}
];
}
diagnostics.push(diagnosic);
}
// 将错误处理结果发送给VS Code
connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
}
添加一个通知处理函数监听配置文件变动。
connection.onDidChangeConfiguration(change => {
if (hasConfigurationCapability) {
// 重置所有文档设置的缓存
documentSettings.clear();
} else {
globalSettings = <ExampleSettings>(
(change.settings.languageServerExample || defaultSettings)
);
}
// 重新验证所有打开的文本文档
documents.all().forEach(validateTextDocument);
});
再次启动客户端,然后把设置中的maximum report改为1,就能看到:
标签:diagnosic,textDocument,uri,range,let,result,设置,Configuration,服务端 From: https://www.cnblogs.com/myfriend/p/configuration-is-set-in-the-server-zsxybo.html