Path: blob/main/extensions/copilot/src/platform/parser/node/languageLoader.ts
13401 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import * as path from '../../../util/vs/base/common/path';6import { WASMLanguage } from './treeSitterLanguages';7import Parser = require('web-tree-sitter');89export class LanguageLoader {1011private readonly loadedLanguagesCache;1213constructor() {14this.loadedLanguagesCache = new Map<WASMLanguage, Promise<Parser.Language>>();15}1617loadLanguage(wasmLanguage: WASMLanguage): Promise<Parser.Language> {18if (!this.loadedLanguagesCache.has(wasmLanguage)) {19this.loadedLanguagesCache.set(wasmLanguage, this._doLoadLanguage(wasmLanguage));20}21return this.loadedLanguagesCache.get(wasmLanguage)!;22}2324private _doLoadLanguage(language: WASMLanguage): Promise<Parser.Language> {25// construct a path that works both for the TypeScript source, which lives under `/src`, and for26// the transpiled JavaScript, which lives under `/dist`27const wasmFileLang = language === 'csharp' ? 'c-sharp' : language;2829const wasmFilename = `tree-sitter-${wasmFileLang}.wasm`;3031// depending on if file is being run from the webpack bundle or source, change the relative path32const wasmFile =33path.basename(__dirname) === 'dist'34? path.resolve(__dirname, wasmFilename)35: path.resolve(__dirname, '../../../../dist', wasmFilename);3637return Parser.Language.load(wasmFile);38}39}404142