Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
microsoft
GitHub Repository: microsoft/vscode
Path: blob/main/extensions/copilot/src/platform/parser/node/languageLoader.ts
13401 views
1
/*---------------------------------------------------------------------------------------------
2
* Copyright (c) Microsoft Corporation. All rights reserved.
3
* Licensed under the MIT License. See License.txt in the project root for license information.
4
*--------------------------------------------------------------------------------------------*/
5
6
import * as path from '../../../util/vs/base/common/path';
7
import { WASMLanguage } from './treeSitterLanguages';
8
import Parser = require('web-tree-sitter');
9
10
export class LanguageLoader {
11
12
private readonly loadedLanguagesCache;
13
14
constructor() {
15
this.loadedLanguagesCache = new Map<WASMLanguage, Promise<Parser.Language>>();
16
}
17
18
loadLanguage(wasmLanguage: WASMLanguage): Promise<Parser.Language> {
19
if (!this.loadedLanguagesCache.has(wasmLanguage)) {
20
this.loadedLanguagesCache.set(wasmLanguage, this._doLoadLanguage(wasmLanguage));
21
}
22
return this.loadedLanguagesCache.get(wasmLanguage)!;
23
}
24
25
private _doLoadLanguage(language: WASMLanguage): Promise<Parser.Language> {
26
// construct a path that works both for the TypeScript source, which lives under `/src`, and for
27
// the transpiled JavaScript, which lives under `/dist`
28
const wasmFileLang = language === 'csharp' ? 'c-sharp' : language;
29
30
const wasmFilename = `tree-sitter-${wasmFileLang}.wasm`;
31
32
// depending on if file is being run from the webpack bundle or source, change the relative path
33
const wasmFile =
34
path.basename(__dirname) === 'dist'
35
? path.resolve(__dirname, wasmFilename)
36
: path.resolve(__dirname, '../../../../dist', wasmFilename);
37
38
return Parser.Language.load(wasmFile);
39
}
40
}
41
42