Skip to content

Commit 54a2490

Browse files
committed
Improve error handling in newPackage command
Refactored the extension's newPackage command to separate error handling for directory and file creation, providing more specific error messages. Also updated the default file content in package.json to include a newline.
1 parent 5febad5 commit 54a2490

File tree

2 files changed

+50
-50
lines changed

2 files changed

+50
-50
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"properties": {
3030
"newPackage.fileContent": {
3131
"type": "string",
32-
"default": "export {};",
32+
"default": "export {};\n",
3333
"markdownDescription": "Default content for the created file.\nSupported variables:\n- `${fileName}` - The file name\n- `${packageName}` - The package name",
3434
"scope": "resource",
3535
"editPresentation": "multilineText"

src/extension.ts

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -3,57 +3,57 @@ import { mkdir, writeFile } from 'node:fs/promises';
33
import { join } from 'node:path';
44

55
export async function activate(context: vscode.ExtensionContext) {
6-
const disposable = vscode.commands.registerCommand('extension.newPackage', async (uri: vscode.Uri) => {
7-
try {
8-
// Zielverzeichnis ermitteln
9-
let targetDir: string;
10-
if (uri && uri.fsPath) {
11-
targetDir = uri.fsPath;
12-
} else if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) {
13-
targetDir = vscode.workspace.workspaceFolders[0].uri.fsPath;
14-
} else {
15-
vscode.window.showErrorMessage('No workspace folder open.');
16-
return;
17-
}
18-
19-
// Ordnername abfragen
20-
const folderName = await vscode.window.showInputBox({
21-
prompt: 'Enter the new package name',
22-
placeHolder: 'my_package'
23-
});
24-
25-
if (!folderName) {
26-
return;
27-
}
28-
29-
const config = vscode.workspace.getConfiguration('newPackage');
30-
const fileNameSetting = config.get<string>('fileName', 'index.ts');
31-
const fileContentTemplate = config.get<string>('fileContent', '');
32-
33-
const packagePath = join(targetDir, folderName);
34-
35-
// Ordner anlegen
36-
await mkdir(packagePath, { recursive: true });
37-
38-
// Template-Variablen ersetzen
39-
const fileContent = fileContentTemplate
40-
.replace(/\$\{fileName\}/g, fileNameSetting)
41-
.replace(/\$\{packageName\}/g, folderName);
42-
43-
// Datei schreiben
44-
const filePath = join(packagePath, fileNameSetting);
45-
await writeFile(filePath, fileContent, { encoding: 'utf8' });
46-
47-
// Datei im Editor öffnen
48-
const doc = await vscode.workspace.openTextDocument(filePath);
49-
await vscode.window.showTextDocument(doc);
50-
51-
} catch (error) {
52-
vscode.window.showErrorMessage(`Failed to create package: ${String(error)}`);
53-
}
6+
const disposable = vscode.commands.registerCommand('extension.newPackage', async (uri: vscode.Uri) => {
7+
let targetDir: string;
8+
if (uri && uri.fsPath) {
9+
targetDir = uri.fsPath;
10+
} else if (vscode.workspace.workspaceFolders && vscode.workspace.workspaceFolders.length > 0) {
11+
targetDir = vscode.workspace.workspaceFolders[0].uri.fsPath;
12+
} else {
13+
vscode.window.showErrorMessage('No workspace folder open.');
14+
return;
15+
}
16+
17+
const folderName = await vscode.window.showInputBox({
18+
prompt: 'Enter the new package name',
19+
placeHolder: 'my_package'
5420
});
5521

56-
context.subscriptions.push(disposable);
22+
if (!folderName) {
23+
return;
24+
}
25+
26+
const config = vscode.workspace.getConfiguration('newPackage');
27+
const fileNameSetting = config.get<string>('fileName', 'index.ts');
28+
const fileContentTemplate = config.get<string>('fileContent', '');
29+
30+
const packagePath = join(targetDir, folderName);
31+
32+
try {
33+
await mkdir(packagePath, { recursive: true });
34+
} catch (error) {
35+
vscode.window.showErrorMessage('Failed to create directory:\n${String(error)}`);');
36+
return;
37+
}
38+
39+
const fileContent = fileContentTemplate
40+
.replace(/\$\{fileName\}/g, fileNameSetting)
41+
.replace(/\$\{packageName\}/g, folderName);
42+
43+
const filePath = join(packagePath, fileNameSetting);
44+
45+
try {
46+
await writeFile(filePath, fileContent, { encoding: 'utf8' });
47+
} catch (error) {
48+
vscode.window.showErrorMessage('Failed to create file:\n${String(error)}`);');
49+
return;
50+
}
51+
52+
const doc = await vscode.workspace.openTextDocument(filePath);
53+
await vscode.window.showTextDocument(doc);
54+
});
55+
56+
context.subscriptions.push(disposable);
5757
}
5858

5959
export function deactivate() {}

0 commit comments

Comments
 (0)