diff --git a/packages/cursorless-engine/src/languages/LanguageDefinitions.ts b/packages/cursorless-engine/src/languages/LanguageDefinitions.ts index d2a069b013..416e861ead 100644 --- a/packages/cursorless-engine/src/languages/LanguageDefinitions.ts +++ b/packages/cursorless-engine/src/languages/LanguageDefinitions.ts @@ -5,12 +5,15 @@ import { Range, TextDocument, getCursorlessRepoRoot, + isTesting, + showError, } from "@cursorless/common"; import { join } from "path"; import { SyntaxNode } from "web-tree-sitter"; import { TreeSitter } from "../typings/TreeSitter"; import { ide } from "../singletons/ide.singleton"; import { LanguageDefinition } from "./LanguageDefinition"; +import { toString } from "lodash"; /** * Sentinel value to indicate that a language doesn't have @@ -78,9 +81,20 @@ export class LanguageDefinitions { ({ document }) => document.languageId, ); - await Promise.all( - languageIds.map((languageId) => this.loadLanguage(languageId)), - ); + try { + await Promise.all( + languageIds.map((languageId) => this.loadLanguage(languageId)), + ); + } catch (err) { + showError( + ide().messages, + "Failed to load language definitions", + toString(err), + ); + if (isTesting()) { + throw err; + } + } } public async loadLanguage(languageId: string): Promise { @@ -100,11 +114,8 @@ export class LanguageDefinitions { } private async reloadLanguageDefinitions(): Promise { - const languageIds = Array.from(this.languageDefinitions.keys()); this.languageDefinitions.clear(); - await Promise.all( - languageIds.map((languageId) => this.loadLanguage(languageId)), - ); + await this.loadAllLanguages(); this.notifier.notifyListeners(); }