diff --git a/fsprovider-sample/src/extension.ts b/fsprovider-sample/src/extension.ts index 142fefd0..b59b2c1c 100644 --- a/fsprovider-sample/src/extension.ts +++ b/fsprovider-sample/src/extension.ts @@ -13,17 +13,17 @@ export function activate(context: vscode.ExtensionContext) { if (!initialzied) { initialzied = true; - memFs.create(vscode.Uri.parse(`memfs:/empty.txt`), { type: vscode.FileType2.File }); - memFs.create(vscode.Uri.parse(`memfs:/folder/`), { type: vscode.FileType2.Directory }); - memFs.create(vscode.Uri.parse(`memfs:/xyz/`), { type: vscode.FileType2.Directory }); - memFs.create(vscode.Uri.parse(`memfs:/xyz/abc`), { type: vscode.FileType2.Directory }); - memFs.create(vscode.Uri.parse(`memfs:/xyz/def`), { type: vscode.FileType2.Directory }); - memFs.create(vscode.Uri.parse(`memfs:/folder/empty.foo`), { type: vscode.FileType2.File }); + memFs.createDirectory(vscode.Uri.parse(`memfs:/folder/`)); + memFs.createDirectory(vscode.Uri.parse(`memfs:/xyz/`)); + 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)); memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), Buffer.from('foo')); - memFs.writeFile(vscode.Uri.parse(`memfs:/folder/file.ts`), Buffer.from('let a:number = true; console.log(a);')); memFs.writeFile(vscode.Uri.parse(`memfs:/file.css`), Buffer.from('* { color: green; }')); - memFs.writeFile(vscode.Uri.parse(`memfs:/large-rnd.foo`), randomData(10000)); + memFs.writeFile(vscode.Uri.parse(`memfs:/large-rnd.foo`), randomData(50000)); + memFs.writeFile(vscode.Uri.parse(`memfs:/folder/empty.foo`), new Uint8Array(0)); + memFs.writeFile(vscode.Uri.parse(`memfs:/folder/file.ts`), Buffer.from('let a:number = true; console.log(a);')); memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.md`), Buffer.from('*MemFS*')); memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/def/foo.bin`), Buffer.from([0, 0, 0, 1, 7, 0, 0, 1, 1])); } diff --git a/fsprovider-sample/src/fileSystemProvider.ts b/fsprovider-sample/src/fileSystemProvider.ts index 5dd67e07..6d898198 100644 --- a/fsprovider-sample/src/fileSystemProvider.ts +++ b/fsprovider-sample/src/fileSystemProvider.ts @@ -46,7 +46,7 @@ type Entry = File | Directory; export class MemFS implements vscode.FileSystemProvider2 { - _version: 5 = 5; + _version: 6 = 6; private _root = new Directory(''); private _data = new WeakMap(); @@ -118,16 +118,12 @@ export class MemFS implements vscode.FileSystemProvider2 { this._fireSoon({ type: vscode.FileChangeType2.Changed, uri: dirname }, { uri, type: vscode.FileChangeType2.Deleted }); } - create(uri: vscode.Uri, options: { type: vscode.FileType2; }): vscode.FileStat2 { - let dirname = uri.with({ path: path.posix.dirname(uri.path) }); + createDirectory(uri: vscode.Uri): vscode.FileStat2 { let basename = path.posix.basename(uri.path); + let dirname = uri.with({ path: path.posix.dirname(uri.path) }); let parent = this._lookupDir(dirname); - let entry: Entry; - if (options.type === vscode.FileType2.Directory) { - entry = new Directory(basename); - } else { - entry = new File(basename); - } + + let entry = new Directory(basename); parent.entries.set(entry.name, entry); parent.mtime = Date.now(); parent.size += 1; diff --git a/fsprovider-sample/src/vscode.proposed.d.ts b/fsprovider-sample/src/vscode.proposed.d.ts index b28b3f0c..de30c6aa 100644 --- a/fsprovider-sample/src/vscode.proposed.d.ts +++ b/fsprovider-sample/src/vscode.proposed.d.ts @@ -232,7 +232,7 @@ declare module 'vscode' { // todo@joh add open/close calls? export interface FileSystemProvider2 { - _version: 5; + _version: 6; /** * An event to signal that a resource has been created, changed, or deleted. @@ -293,8 +293,13 @@ declare module 'vscode' { // ? useTrash, expose trash delete(uri: Uri, token: CancellationToken): void | Thenable; - // todo@remote - create(uri: Uri, options: { type: FileType2 }, token: CancellationToken): FileStat2 | Thenable; + /** + * Create a new directory. *Note* that new files are created via `write`-calls. + * + * @param uri + * @param token + */ + createDirectory(uri: Uri, token: CancellationToken): FileStat2 | Thenable; } export namespace workspace {