mirror of
https://github.com/estruyf/vscode-front-matter.git
synced 2026-06-24 20:11:02 +02:00
Address code review feedback: improve error handling and logging
Co-authored-by: estruyf <2900833+estruyf@users.noreply.github.com>
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 5.4 KiB |
@@ -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
@@ -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');
|
||||
|
||||
@@ -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'
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user