diff options
Diffstat (limited to 'editors/vscode/client/sourceprovider.js')
| -rw-r--r-- | editors/vscode/client/sourceprovider.js | 17 |
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 }; |
