3

I'm trying to create a file as a part of one of the commands in my extension and can't seem to get it right.

let wsedit = new vscode.WorkspaceEdit();
const file_path = vscode.Uri.file(value + '/' + value + '.md');
vscode.window.showInformationMessage(file_path.toString());
wsedit.createFile(file_path, {ignoreIfExists: true});
vscode.workspace.applyEdit(wsedit);
vscode.window.showInformationMessage('Created a new file: ' value + '/' + value + '.md);

value is a string input from the user. The code executes, but from what I can tell no file is being created. How do I properly create the file?

HaaLeo
  • 10,065
  • 3
  • 44
  • 55
James Mertz
  • 8,459
  • 11
  • 60
  • 87

1 Answers1

10

It seems like the vscode.Uri does not support relative paths (here is the corresponding issue). With that said you have to use an absolute path. The following snippet should work (tested on windows with vscode v1.30.0)

const wsedit = new vscode.WorkspaceEdit();
const wsPath = vscode.workspace.workspaceFolders[0].uri.fsPath; // gets the path of the first workspace folder
const filePath = vscode.Uri.file(wsPath + '/hello/world.md');
vscode.window.showInformationMessage(filePath.toString());
wsedit.createFile(filePath, { ignoreIfExists: true });
vscode.workspace.applyEdit(wsedit);
vscode.window.showInformationMessage('Created a new file: hello/world.md');
HaaLeo
  • 10,065
  • 3
  • 44
  • 55
  • I'm getting an error for your first line there that states "Object is possibly 'undefined'". Any thoughts? – James Mertz Dec 18 '18 at 21:07
  • on `const wsedit = new vscode.WorkspaceEdit();`? Maybe you can just add my line two and three into your snippet and give it a try. (Btw. I used typescript) – HaaLeo Dec 18 '18 at 21:43
  • I was able to accomplish it by using a form of [this answer](https://stackoverflow.com/questions/38874928/operator-in-typescript-after-object-method). After getting the object I then check to make sure that it's not undefined. – James Mertz Dec 18 '18 at 22:33