diff --git a/fsprovider-sample/src/extension.ts b/fsprovider-sample/src/extension.ts index 97983483..b4805c42 100644 --- a/fsprovider-sample/src/extension.ts +++ b/fsprovider-sample/src/extension.ts @@ -29,17 +29,17 @@ export function activate(context: vscode.ExtensionContext) { memFs.createDirectory(vscode.Uri.parse(`memfs:/xyz/abc`)); memFs.createDirectory(vscode.Uri.parse(`memfs:/xyz/def`)); - memFs.writeFile(vscode.Uri.parse(`memfs:/empty.txt`), new Uint8Array(0), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), Buffer.from('foo'), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/file.css`), Buffer.from('* { color: green; }'), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/large_rnd.foo`), randomData(50000), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/folder/empty.foo`), new Uint8Array(0), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/folder/file.ts`), Buffer.from('let a:number = true; console.log(a);'), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.md`), Buffer.from('*MemFS*'), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.bin`), Buffer.from([0, 0, 0, 1, 7, 0, 0, 1, 1]), { create: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/empty.txt`), new Uint8Array(0), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), Buffer.from('foo'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.css`), Buffer.from('* { color: green; }'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/large_rnd.foo`), randomData(50000), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/folder/empty.foo`), new Uint8Array(0), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/folder/file.ts`), Buffer.from('let a:number = true; console.log(a);'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.md`), Buffer.from('*MemFS*'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.bin`), Buffer.from([0, 0, 0, 1, 7, 0, 0, 1, 1]), { create: true, overwrite: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/UPPER.txt`), Buffer.from('UPPER'), { create: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/upper.txt`), Buffer.from('upper'), { create: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/UPPER.txt`), Buffer.from('UPPER'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/upper.txt`), Buffer.from('upper'), { create: true, overwrite: true }); })); } diff --git a/fsprovider-sample/src/fileSystemProvider.ts b/fsprovider-sample/src/fileSystemProvider.ts index 9e6d734e..56b9cb0d 100644 --- a/fsprovider-sample/src/fileSystemProvider.ts +++ b/fsprovider-sample/src/fileSystemProvider.ts @@ -72,19 +72,11 @@ export class MemFS implements vscode.FileSystemProvider { // --- manage file contents - readFile(uri: vscode.Uri, options: vscode.FileOptions): Uint8Array { - const entry = this._lookupAsFile(uri, true); - if (!entry && options.create) { - this.writeFile(uri, new Uint8Array(0), options); - return this.readFile(uri, { ...options, create: false }); - } else if (!entry) { - throw vscode.FileSystemError.FileNotFound(uri); - } else { - return entry.data; - } + readFile(uri: vscode.Uri): Uint8Array { + return this._lookupAsFile(uri, false).data; } - writeFile(uri: vscode.Uri, content: Uint8Array, options: vscode.FileOptions): void { + writeFile(uri: vscode.Uri, content: Uint8Array, options: { create: boolean, overwrite: boolean }): void { let basename = path.posix.basename(uri.path); let parent = this._lookupParentDirectory(uri); let entry = parent.entries.get(basename); @@ -94,7 +86,7 @@ export class MemFS implements vscode.FileSystemProvider { if (!entry && !options.create) { throw vscode.FileSystemError.FileNotFound(uri); } - if (entry && options.create && options.exclusive) { + if (entry && options.create && !options.overwrite) { throw vscode.FileSystemError.FileExists(uri); } if (!entry) { @@ -111,7 +103,12 @@ export class MemFS implements vscode.FileSystemProvider { // --- manage files/folders - rename(oldUri: vscode.Uri, newUri: vscode.Uri): vscode.FileStat { + rename(oldUri: vscode.Uri, newUri: vscode.Uri, options: { overwrite: boolean }): vscode.FileStat { + + if (!options.overwrite && this._lookup(newUri, true)) { + throw vscode.FileSystemError.FileExists(newUri); + } + let entry = this._lookup(oldUri, false); let oldParent = this._lookupParentDirectory(oldUri);