diff --git a/packages/common/src/types/TreeSitter.ts b/packages/common/src/types/TreeSitter.ts index 5127df6a9e..04fadef98e 100644 --- a/packages/common/src/types/TreeSitter.ts +++ b/packages/common/src/types/TreeSitter.ts @@ -28,4 +28,10 @@ export interface TreeSitter { * @returns The query if that language is already loaded */ createQuery(languageId: string, source: string): Query | undefined; + + /** + * FIXME: On newer vscode versions the latex Tree sitter parser throws memory errors + * https://github.com/cursorless-dev/cursorless/issues/2879 + */ + disableLatexMsg?: string; } diff --git a/packages/cursorless-engine/src/languages/LanguageDefinitions.ts b/packages/cursorless-engine/src/languages/LanguageDefinitions.ts index a0c255816a..a9bc151f8e 100644 --- a/packages/cursorless-engine/src/languages/LanguageDefinitions.ts +++ b/packages/cursorless-engine/src/languages/LanguageDefinitions.ts @@ -129,6 +129,10 @@ export class LanguageDefinitionsImpl return; } + if (languageId === "latex" && this.treeSitter.disableLatexMsg != null) { + return undefined; + } + const definition = (await LanguageDefinition.create( this.ide, @@ -151,6 +155,10 @@ export class LanguageDefinitionsImpl const definition = this.languageDefinitions.get(languageId); if (definition == null) { + if (languageId === "latex" && this.treeSitter.disableLatexMsg != null) { + throw Error(this.treeSitter.disableLatexMsg); + } + throw new Error( "Expected language definition entry is missing for languageId " + languageId, diff --git a/packages/cursorless-vscode/src/extension.ts b/packages/cursorless-vscode/src/extension.ts index 9293574f1b..c550b48bc2 100644 --- a/packages/cursorless-vscode/src/extension.ts +++ b/packages/cursorless-vscode/src/extension.ts @@ -62,6 +62,7 @@ import { registerCommands } from "./registerCommands"; import { revisualizeOnCustomRegexChange } from "./revisualizeOnCustomRegexChange"; import { storedTargetHighlighter } from "./storedTargetHighlighter"; import { vscodeApi } from "./vscodeApi"; +import * as semver from "semver"; /** * Extension entrypoint called by VSCode on Cursorless startup. @@ -266,6 +267,10 @@ function createTreeSitter(parseTreeApi: ParseTreeApi): TreeSitter { loadLanguage: parseTreeApi.loadLanguage, createQuery: parseTreeApi.createQuery, + + disableLatexMsg: semver.lt(vscode.version, "1.98.0") + ? undefined + : "Latex is disabled on vscode versions >= 1.98.0. See https://github.com/cursorless-dev/cursorless/issues/2879", }; }