aboutsummaryrefslogtreecommitdiff
path: root/editors/vscode/client/sourceprovider.js
diff options
context:
space:
mode:
Diffstat (limited to 'editors/vscode/client/sourceprovider.js')
-rw-r--r--editors/vscode/client/sourceprovider.js17
1 files changed, 17 insertions, 0 deletions
diff --git a/editors/vscode/client/sourceprovider.js b/editors/vscode/client/sourceprovider.js
new file mode 100644
index 0000000..d03d746
--- /dev/null
+++ b/editors/vscode/client/sourceprovider.js
@@ -0,0 +1,17 @@
+// serves source documents carried by the language server at tinyvm:/NAME.zc.
+function createSourceProvider(request, isReady, delay = ms => new Promise(resolve => setTimeout(resolve, ms))) {
+ return {
+ async provideTextDocumentContent(uri) {
+ for (let waited = 0; !isReady() && waited < 10000; waited += 100) await delay(100);
+ if (!isReady()) return '// the language server is not running\n';
+ try {
+ const result = await request('zc/source', { path: uri.path });
+ return typeof result === 'string' ? result : '// no such built-in source\n';
+ } catch (error) {
+ return '// the language server could not give this source\n';
+ }
+ }
+ };
+}
+
+module.exports = { createSourceProvider };