From 7a499ac209884edef5c41b97c9e599305264c0d1 Mon Sep 17 00:00:00 2001 From: Pokey Rule <755842+pokey@users.noreply.github.com> Date: Tue, 21 May 2024 17:22:12 +0100 Subject: [PATCH] Make language loading more robust --- .../src/languages/LanguageDefinitions.ts | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) 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(); }