aboutsummaryrefslogtreecommitdiff
path: root/editors/vscode/client/sourceprovider.js
blob: d03d746a4ae1dbd0c1858781c61e00a1b2f9bdc8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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 };