笔记软件在2023/4/6 14:01:08推送该笔记
添加一个简单的语法校验器
为了给服务器添加文本校验,我们给text document manager添加一个listener然后在文本变动时调用,接下来就交给服务器去判断调用校验器的最佳时机了。在我们的示例中,服务器的功能是校验纯文本然后给所有大写单词进行标记。对应的代码片段
// 文本文件的内容改变时。文档首次打开或者文档内容修改时会触发这个事件。
documents.onDidChangeContent(async change => {
let textDocument = change.document;
// 这个简单示例中,每次校验时我们都获取一次设置
let settings = await getDocumentSettings(textDocument.uri);
// 校验器会检查所有的大写单词是否超过 2 个字母
let text = textDocument.getText();
let pattern = /\b[A-Z]{2,}\b/g;
let m: RegExpExecArray | null;
let problems = 0;
let diagnostics: Diagnostic[] = [];
while ((m = pattern.exec(text)) && problems < settings.maxNumberOfProblems) {
problems++;
let diagnostic: 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) {
diagnostic.relatedInformation = [
{
location: {
uri: textDocument.uri,
range: Object.assign({}, diagnostic.range)
},
message: 'Spelling matters'
},
{
location: {
uri: textDocument.uri,
range: Object.assign({}, diagnostic.range)
},
message: 'Particularly for names'
}
];
}
diagnostics.push(diagnostic);
}
// 将诊断信息发送给 VS Code
connection.sendDiagnostics({ uri: textDocument.uri, diagnostics });
});
标签:textDocument,uri,校验,diagnostic,语法,range,let From: https://www.cnblogs.com/myfriend/p/grammatical-laboratory-z2oscnw.html