Я написал небольшой плагин для языка Visual Studio с подсветкой синтаксиса и автозаполнением.До сих пор это работало довольно хорошо.Теперь я хотел включить некоторую диагностику для проверки моего языка.
Я создал DiagnosticsCollection
, как описано здесь
Для начала я "адаптировал" некоторый код этот официальный пример vs-кода .
'use strict';
import * as vscode from 'vscode';
import * as path from 'path';
export function activate(context: vscode.ExtensionContext) {
const collection = vscode.languages.createDiagnosticCollection('test');
if (vscode.window.activeTextEditor) {
updateDiagnostics(vscode.window.activeTextEditor.document, collection);
}
context.subscriptions.push(vscode.window.onDidChangeActiveTextEditor(e => updateDiagnostics(e.document, collection)));
}
function updateDiagnostics(document: vscode.TextDocument, collection: vscode.DiagnosticCollection): void {
if (document && path.basename(document.uri.fsPath) === 'sample-demo.rs') {
collection.set(document.uri, [{
code: '',
message: 'cannot assign twice to immutable variable `x`',
range: new vscode.Range(new vscode.Position(3, 4), new vscode.Position(3, 10)),
severity: vscode.DiagnosticSeverity.Error,
source: '',
relatedInformation: [
new vscode.DiagnosticRelatedInformation(new vscode.Location(document.uri, new vscode.Range(new vscode.Position(1, 8), new vscode.Position(1, 9))), 'first assignment to `x`')
]
}]);
} else {
collection.clear();
}
}
// this method is called when your extension is deactivated
export function deactivate() {
}
Это довольно чистое решение, когда есть только 1 проверка.Потому что либо есть одна ошибка, либо нет.(Коллекция установлена или очищена)
Теперь мой вопрос: каков хороший способ разработки множественной диагностики?Конечно, я мог бы заполнить массив collection[]
несколькими диагностическими объектами, но это также означает, что я должен удалить их один за другим, так как удаление одной ошибки не означает, что я могу использовать функцию clear
на collection[]
.