From 565acd921ecab7c8c2b006e2f21ab57c350785a3 Mon Sep 17 00:00:00 2001 From: Saoud Rizwan <7799382+saoudrizwan@users.noreply.github.com> Date: Wed, 31 Jul 2024 17:02:24 -0400 Subject: [PATCH] Initialize Parser only once --- src/parse-source-code/languageParser.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/parse-source-code/languageParser.ts b/src/parse-source-code/languageParser.ts index d17fb6efd6..2d791b39a8 100644 --- a/src/parse-source-code/languageParser.ts +++ b/src/parse-source-code/languageParser.ts @@ -26,6 +26,15 @@ async function loadLanguage(langName: string) { return await Parser.Language.load(path.join(__dirname, `tree-sitter-${langName}.wasm`)) } +let isParserInitialized = false + +async function initializeParser() { + if (!isParserInitialized) { + await Parser.init() + isParserInitialized = true + } +} + /* Using node bindings for tree-sitter is problematic in vscode extensions because of incompatibility with electron. Going the .wasm route has the @@ -49,7 +58,7 @@ Sources: - https://github.com/tree-sitter/tree-sitter/blob/master/lib/binding_web/test/query-test.js */ export async function loadRequiredLanguageParsers(filesToParse: string[]): Promise { - await Parser.init() + await initializeParser() const extensionsToLoad = new Set(filesToParse.map((file) => path.extname(file).toLowerCase().slice(1))) const parsers: LanguageParser = {} for (const ext of extensionsToLoad) {