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'; 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 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); } }); // 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())); // 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); } }