@@ -2,6 +2,7 @@ import * as vscode from "vscode";
22import * as treeSitter from "web-tree-sitter" ;
33import * as path from "path" ;
44import * as fs from "fs" ;
5+ import * as semver from "semver" ;
56import { LanguageStillLoadingError , UnsupportedLanguageError } from "./errors" ;
67
78interface Language {
@@ -68,6 +69,20 @@ export async function activate(context: vscode.ExtensionContext) {
6869 // Parse of all visible documents
6970 const trees : { [ uri : string ] : treeSitter . Tree } = { } ;
7071
72+ /**
73+ * FIXME: On newer vscode versions the latex Tree sitter parser throws memory errors
74+ * https://github.com/cursorless-dev/cursorless/issues/2879
75+ */
76+ const disableLatex = semver . gte ( vscode . version , "1.98.0" ) ;
77+
78+ const validateGetLatex = ( languageId : string ) => {
79+ if ( languageId === "latex" && disableLatex ) {
80+ throw new Error (
81+ "Latex is disabled on vscode versions >= 1.98.0. See https://github.com/cursorless-dev/cursorless/issues/2879"
82+ ) ;
83+ }
84+ } ;
85+
7186 /**
7287 * Load the parser model for a given language
7388 * @param languageId The vscode language id of the language to load
@@ -82,6 +97,10 @@ export async function activate(context: vscode.ExtensionContext) {
8297 return true ;
8398 }
8499
100+ if ( languageId === "latex" && disableLatex ) {
101+ return false ;
102+ }
103+
85104 let absolute ;
86105 if ( path . isAbsolute ( language . module ) ) {
87106 absolute = language . module ;
@@ -244,6 +263,7 @@ export async function activate(context: vscode.ExtensionContext) {
244263 const languageId = document . languageId ;
245264
246265 if ( languageId in languages ) {
266+ validateGetLatex ( document . languageId ) ;
247267 throw new LanguageStillLoadingError ( languageId ) ;
248268 } else {
249269 throw new UnsupportedLanguageError ( languageId ) ;
@@ -263,6 +283,7 @@ export async function activate(context: vscode.ExtensionContext) {
263283 console . warn (
264284 "vscode-parse-tree: getLanguage is deprecated, use createQuery(languageId, source) instead."
265285 ) ;
286+ validateGetLatex ( languageId ) ;
266287 return languages [ languageId ] ?. parser ?. language ?? undefined ;
267288 } ,
268289
@@ -272,6 +293,7 @@ export async function activate(context: vscode.ExtensionContext) {
272293 ) : treeSitter . Query | undefined {
273294 const language = languages [ languageId ] ?. parser ?. language ;
274295 if ( language == null ) {
296+ validateGetLatex ( languageId ) ;
275297 return undefined ;
276298 }
277299 return new treeSitter . Query ( language , source ) ;
0 commit comments