bmc-tpl-code-all-around/src/extension.ts

50 lines
2.5 KiB
TypeScript
Raw Normal View History

2026-10-07 21:34:05 +00:00
import * as vscode from 'vscode';
import { validateTplDocument } from './core/TplLinter';
import { TplCodeActionProvider } from './providers/TplCodeActionProvider';
import { TplDocumentFormatter } from './providers/TplDocumentFormatter';
import { TplCompletionProvider } from './providers/TplCompletionProvider';
import { TplHoverProvider } from './providers/TplHoverProvider';
2026-10-07 21:34:05 +00:00
export function activate(context: vscode.ExtensionContext) {
const diagnosticCollection = vscode.languages.createDiagnosticCollection('tpl-scanner');
context.subscriptions.push(diagnosticCollection);
// Linter-Events für geöffnete/geänderte Dateien binden
2026-10-07 21:34:05 +00:00
vscode.workspace.onDidOpenTextDocument(doc => validateTplDocument(doc, diagnosticCollection));
vscode.workspace.onDidChangeTextDocument(event => validateTplDocument(event.document, diagnosticCollection));
// Live-Reload für Einstellungen (Scannt das gesamte Projekt neu)
vscode.workspace.onDidChangeConfiguration(e => {
if (e.affectsConfiguration('tpl')) {
scanWorkspace(diagnosticCollection);
}
});
2026-10-07 21:34:05 +00:00
// Provider registrieren
context.subscriptions.push(vscode.languages.registerCodeActionsProvider('tpl', new TplCodeActionProvider(), { providedCodeActionKinds: [vscode.CodeActionKind.QuickFix] }));
context.subscriptions.push(vscode.languages.registerDocumentFormattingEditProvider('tpl', new TplDocumentFormatter()));
context.subscriptions.push(vscode.languages.registerCompletionItemProvider('tpl', new TplCompletionProvider(), '.'));
context.subscriptions.push(vscode.languages.registerHoverProvider('tpl', new TplHoverProvider()));
2026-10-07 21:34:05 +00:00
// NEU: Befehl registrieren, um manuell alle Dateien zu scannen
context.subscriptions.push(vscode.commands.registerCommand('tpl.scanWorkspace', () => {
scanWorkspace(diagnosticCollection);
vscode.window.showInformationMessage("TPL: Workspace-Scan gestartet.");
}));
// NEU: Bei Aktivierung der Extension direkt einmal alles prüfen!
scanWorkspace(diagnosticCollection);
}
// Die neue Engine für das projektweite Lesen
async function scanWorkspace(collection: vscode.DiagnosticCollection) {
// Sucht alle .tpl Dateien im gesamten geöffneten Projektordner
const files = await vscode.workspace.findFiles('**/*.tpl', '**/node_modules/**');
for (const file of files) {
// Öffnet die Datei "unsichtbar" im Hintergrund
const doc = await vscode.workspace.openTextDocument(file);
// Jagt sie durch unseren Linter
validateTplDocument(doc, collection);
}
2026-10-07 21:34:05 +00:00
}