Address code review feedback: improve error handling and logging

Co-authored-by: estruyf <2900833+estruyf@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-01-07 15:14:52 +00:00
parent 412673a600
commit d250ec10e1
4 changed files with 53 additions and 25 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

+17 -5
View File
@@ -3,8 +3,14 @@ import * as vscode from 'vscode';
export class DashboardProvider implements vscode.WebviewViewProvider {
public static readonly viewType = 'frontMatterLite.dashboard';
private _view?: vscode.WebviewView;
private _outputChannel: vscode.OutputChannel;
constructor(private readonly _extensionUri: vscode.Uri) {}
constructor(
private readonly _extensionUri: vscode.Uri,
outputChannel: vscode.OutputChannel
) {
this._outputChannel = outputChannel;
}
public resolveWebviewView(
webviewView: vscode.WebviewView,
@@ -38,9 +44,13 @@ export class DashboardProvider implements vscode.WebviewViewProvider {
break;
}
case 'openFile': {
const uri = vscode.Uri.parse(data.uri);
const doc = await vscode.workspace.openTextDocument(uri);
await vscode.window.showTextDocument(doc);
try {
const uri = vscode.Uri.parse(data.uri);
const doc = await vscode.workspace.openTextDocument(uri);
await vscode.window.showTextDocument(doc);
} catch (error) {
vscode.window.showErrorMessage(`Failed to open file: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
break;
}
}
@@ -68,6 +78,7 @@ export class DashboardProvider implements vscode.WebviewViewProvider {
const folderUri = vscode.Uri.joinPath(workspaceFolders[0].uri, folder.path);
const pattern = new vscode.RelativePattern(folderUri, '**/*.{md,mdx,markdown}');
// Note: Limited to 100 files per folder to prevent performance issues in large repositories
const files = await vscode.workspace.findFiles(pattern, '**/node_modules/**', 100);
for (const file of files) {
@@ -80,7 +91,8 @@ export class DashboardProvider implements vscode.WebviewViewProvider {
});
}
} catch (error) {
console.error(`Error scanning folder ${folder.path}:`, error);
const errorMsg = `Error scanning folder ${folder.path}: ${error instanceof Error ? error.message : 'Unknown error'}`;
this._outputChannel.appendLine(errorMsg);
}
}
+21 -20
View File
@@ -1,5 +1,6 @@
import * as vscode from 'vscode';
import { DashboardProvider } from './DashboardProvider';
import { isVirtualWorkspace } from './utils';
/**
* Lite version of Front Matter CMS for virtual workspaces
@@ -14,7 +15,7 @@ export function activate(context: vscode.ExtensionContext) {
outputChannel.appendLine('Front Matter Lite activated for virtual workspace');
// Register Dashboard Webview Provider
const dashboardProvider = new DashboardProvider(context.extensionUri);
const dashboardProvider = new DashboardProvider(context.extensionUri, outputChannel);
context.subscriptions.push(
vscode.window.registerWebviewViewProvider(
DashboardProvider.viewType,
@@ -157,7 +158,13 @@ export function activate(context: vscode.ExtensionContext) {
await vscode.workspace.fs.stat(fileUri);
vscode.window.showErrorMessage(`File "${fileName}.md" already exists`);
return;
} catch {
} catch (error) {
// Only proceed if the error is FileNotFound
if (error instanceof vscode.FileSystemError && error.code !== 'FileNotFound') {
vscode.window.showErrorMessage(`Error checking file: ${error.message}`);
outputChannel.appendLine(`Error checking file: ${error}`);
return;
}
// File doesn't exist, continue
}
@@ -192,24 +199,18 @@ Your content here...
);
// Check if running in virtual workspace
if (vscode.workspace.workspaceFolders) {
const isVirtual = vscode.workspace.workspaceFolders.some(
folder => folder.uri.scheme !== 'file'
);
if (isVirtual) {
outputChannel.appendLine('Running in virtual workspace mode');
vscode.window.showInformationMessage(
'Front Matter Lite is running in virtual workspace mode. Some features may be limited.',
'Learn More'
).then(selection => {
if (selection === 'Learn More') {
vscode.env.openExternal(
vscode.Uri.parse('https://frontmatter.codes/docs/virtual-workspaces')
);
}
});
}
if (isVirtualWorkspace()) {
outputChannel.appendLine('Running in virtual workspace mode');
vscode.window.showInformationMessage(
'Front Matter Lite is running in virtual workspace mode. Some features may be limited.',
'Learn More'
).then(selection => {
if (selection === 'Learn More') {
vscode.env.openExternal(
vscode.Uri.parse('https://frontmatter.codes/docs/virtual-workspaces')
);
}
});
}
outputChannel.appendLine('Front Matter Lite: All commands registered');
+15
View File
@@ -0,0 +1,15 @@
import * as vscode from 'vscode';
/**
* Check if the current workspace is a virtual workspace
* Virtual workspaces use schemes other than 'file' (e.g., 'vscode-vfs', 'github')
*/
export function isVirtualWorkspace(): boolean {
if (!vscode.workspace.workspaceFolders) {
return false;
}
return vscode.workspace.workspaceFolders.some(
folder => folder.uri.scheme !== 'file'
);
}