diff --git a/fsprovider-sample/README.md b/fsprovider-sample/README.md index 71a81579..540eee2f 100644 --- a/fsprovider-sample/README.md +++ b/fsprovider-sample/README.md @@ -1,8 +1,20 @@ # MemFS -This extension implements an in-memory file system to show-case a API. It also enables to see how other extensions behave with documents/files that aren't stored on disk. +This extension implements an in-memory file system to show-case the [filesytem provider api](https://github.com/Microsoft/vscode/blob/51a880315fd0ec2cafb511a17de48ec31802ba6d/src/vs/vscode.d.ts#L4968). It serves two purposes: -To *get started* you need the extension and a workspace with an entry like this: +* Be a sample/reference for extension authors that want to implement a filesystem provider +* Be a test for other extensions that *falsely* assume text document always live on disk. + + +To *get started* you need this: + +* install this extension +* have a workspace-file as shown below and open it via 'File > Open Workspace' +* select 'F1 > [MemFs] Create Files' and notice how the explorer is now populated +* ... try things out, e.g. IntelliSense in memfs-files, create new files, save them, etc +* select 'F1 > [MemFs] Delete Files' or reload to restart + +A sample workspace file, saved as `Test.code-workspace`, is this: ```json { @@ -10,5 +22,3 @@ To *get started* you need the extension and a workspace with an entry like this: "name": "MemFS" } ``` - -Then, select 'F1 > Initialize MemFS' and notice how the file explorer is populated with some files. diff --git a/fsprovider-sample/package.json b/fsprovider-sample/package.json index b6db1df0..13374630 100644 --- a/fsprovider-sample/package.json +++ b/fsprovider-sample/package.json @@ -22,12 +22,12 @@ "commands": [ { "command": "memfs.init", - "title": "Create files", + "title": "Create Files", "category": "MemFS" }, { "command": "memfs.reset", - "title": "Delete all files", + "title": "Delete Files", "category": "MemFS" } ] diff --git a/fsprovider-sample/src/extension.ts b/fsprovider-sample/src/extension.ts index b4805c42..4df1206b 100644 --- a/fsprovider-sample/src/extension.ts +++ b/fsprovider-sample/src/extension.ts @@ -23,23 +23,34 @@ export function activate(context: vscode.ExtensionContext) { } initialized = true; + // most common files types + memFs.writeFile(vscode.Uri.parse(`memfs:/file.txt`), Buffer.from('foo'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.html`), Buffer.from('

Hello

'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.js`), Buffer.from('console.log("JavaScript")'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.json`), Buffer.from('{ "json": true }'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.ts`), Buffer.from('console.log("TypeScript")'), { 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:/file.md`), Buffer.from('Hello _World_'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.xml`), Buffer.from(''), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.py`), Buffer.from('import base64, sys; base64.decode(open(sys.argv[1], "rb"), open(sys.argv[2], "wb"))'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.php`), Buffer.from('&1\'); ?>'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/file.yaml`), Buffer.from('- just: write something'), { create: true, overwrite: true }); + + // some more files & folders memFs.createDirectory(vscode.Uri.parse(`memfs:/folder/`)); memFs.createDirectory(vscode.Uri.parse(`memfs:/large/`)); 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), { 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.txt`), new Uint8Array(0), { 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:/large/rnd.foo`), randomData(50000), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/UPPER.txt`), Buffer.from('UPPER'), { create: true, overwrite: true }); + memFs.writeFile(vscode.Uri.parse(`memfs:/xyz/upper.txt`), Buffer.from('upper'), { 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, overwrite: true }); - memFs.writeFile(vscode.Uri.parse(`memfs:/upper.txt`), Buffer.from('upper'), { create: true, overwrite: true }); })); }