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'; import { workspaceIndex } from './core/WorkspaceIndex'; // <-- Index importiert export function activate(context: vscode.ExtensionContext) { const diagnosticCollection = vscode.languages.createDiagnosticCollection('tpl-scanner'); context.subscriptions.push(diagnosticCollection); // LIVE INDEXING & LINTING vscode.workspace.onDidOpenTextDocument(doc => { if (doc.languageId === 'tpl') { workspaceIndex.updateFile(doc.uri, doc.getText()); validateTplDocument(doc, diagnosticCollection); } }); vscode.workspace.onDidChangeTextDocument(event => { if (event.document.languageId === 'tpl') { workspaceIndex.updateFile(event.document.uri, event.document.getText()); validateTplDocument(event.document, diagnosticCollection); } }); // Aufräumen, wenn Dateien gelöscht werden vscode.workspace.onDidDeleteFiles(event => { for (const uri of event.files) { workspaceIndex.removeFile(uri); } }); 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())); context.subscriptions.push(vscode.commands.registerCommand('tpl.scanWorkspace', () => { scanWorkspace(diagnosticCollection); vscode.window.showInformationMessage("TPL: Workspace-Scan gestartet."); })); // Initialer Scan beim Start scanWorkspace(diagnosticCollection); } // Füttert RAM und Linter async function scanWorkspace(collection: vscode.DiagnosticCollection) { const files = await vscode.workspace.findFiles('**/*.tpl', '**/node_modules/**'); for (const file of files) { const doc = await vscode.workspace.openTextDocument(file); // ZUERST in den RAM laden... workspaceIndex.updateFile(doc.uri, doc.getText()); // ... DANN linten validateTplDocument(doc, collection); } }