Skip to content

Commit 9d1596b

Browse files
committed
Enhance log file viewer to support opening files at specific lines and update log entry grouping to include line numbers
1 parent 04cfcd6 commit 9d1596b

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

src/extension.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,21 @@ function activateExtension(context: vscode.ExtensionContext, magentoRoot: string
4444
const treeView = vscode.window.createTreeView('logFiles', { treeDataProvider: logViewerProvider });
4545

4646
vscode.commands.registerCommand('magento-log-viewer.refreshLogFiles', () => logViewerProvider.refresh());
47-
vscode.commands.registerCommand('magento-log-viewer.openFile', (resource) => {
48-
vscode.window.showTextDocument(vscode.Uri.file(resource));
47+
vscode.commands.registerCommand('magento-log-viewer.openFile', (filePath, lineNumber) => {
48+
if (lineNumber !== undefined) {
49+
const options: vscode.TextDocumentShowOptions = {
50+
selection: new vscode.Range(new vscode.Position(lineNumber, 0), new vscode.Position(lineNumber, 0))
51+
};
52+
vscode.window.showTextDocument(vscode.Uri.file(filePath), options);
53+
} else {
54+
vscode.window.showTextDocument(vscode.Uri.file(filePath));
55+
}
56+
});
57+
vscode.commands.registerCommand('magento-log-viewer.openFileAtLine', (filePath, lineNumber) => {
58+
const options: vscode.TextDocumentShowOptions = {
59+
selection: new vscode.Range(new vscode.Position(lineNumber, 0), new vscode.Position(lineNumber, 0))
60+
};
61+
vscode.window.showTextDocument(vscode.Uri.file(filePath), options);
4962
});
5063

5164
vscode.commands.registerCommand('magento-log-viewer.clearAllLogFiles', () => {
@@ -65,7 +78,8 @@ function activateExtension(context: vscode.ExtensionContext, magentoRoot: string
6578
// Update the badge count
6679
const updateBadge = () => {
6780
const logFiles = logViewerProvider.getLogFilesWithoutUpdatingBadge(path.join(magentoRoot, 'var', 'log'));
68-
treeView.badge = { value: logFiles.length, tooltip: `${logFiles.length} log files` };
81+
const totalEntries = logFiles.reduce((count, file) => count + parseInt(file.description?.match(/\d+/)?.[0] || '0', 10), 0);
82+
treeView.badge = { value: totalEntries, tooltip: `${totalEntries} log entries` };
6983
};
7084

7185
logViewerProvider.onDidChangeTreeData(updateBadge);

src/logViewer.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ export class LogViewerProvider implements vscode.TreeDataProvider<LogFile>, vsco
6969
private getLogFileLines(filePath: string): LogFile[] {
7070
const fileContent = fs.readFileSync(filePath, 'utf-8');
7171
const lines = fileContent.split('\n');
72-
const groupedLines = this.groupLogEntries(lines);
72+
const groupedLines = this.groupLogEntries(lines, filePath);
7373
return groupedLines;
7474
}
7575

76-
private groupLogEntries(lines: string[]): LogFile[] {
77-
const grouped: { [key: string]: string[] } = {};
76+
private groupLogEntries(lines: string[], filePath: string): LogFile[] {
77+
const grouped: { [key: string]: { line: string, lineNumber: number }[] } = {};
7878

7979
lines.forEach((line, index) => {
8080
const match = line.match(/\.(\w+):/);
@@ -83,14 +83,18 @@ export class LogViewerProvider implements vscode.TreeDataProvider<LogFile>, vsco
8383
if (!grouped[level]) {
8484
grouped[level] = [];
8585
}
86-
grouped[level].push(`Line ${index + 1}: ${line}`);
86+
grouped[level].push({ line, lineNumber: index });
8787
}
8888
});
8989

9090
const summary = Object.keys(grouped).map(level => {
9191
const count = grouped[level].length;
9292
const label = `${level} (${count})`;
93-
return new LogFile(label, vscode.TreeItemCollapsibleState.Collapsed, undefined, grouped[level].map(line => new LogFile(line, vscode.TreeItemCollapsibleState.None)));
93+
return new LogFile(label, vscode.TreeItemCollapsibleState.Collapsed, undefined, grouped[level].map(entry => new LogFile(`Line ${entry.lineNumber + 1}: ${entry.line}`, vscode.TreeItemCollapsibleState.None, {
94+
command: 'magento-log-viewer.openFileAtLine',
95+
title: 'Open Log File at Line',
96+
arguments: [filePath, entry.lineNumber]
97+
})));
9498
});
9599

96100
return summary;

0 commit comments

Comments
 (0)