@@ -2,6 +2,7 @@ import * as vscode from "vscode";
2
2
import * as treeSitter from "web-tree-sitter" ;
3
3
import * as path from "path" ;
4
4
import * as fs from "fs" ;
5
+ import * as semver from "semver" ;
5
6
import { LanguageStillLoadingError , UnsupportedLanguageError } from "./errors" ;
6
7
7
8
interface Language {
@@ -68,6 +69,20 @@ export async function activate(context: vscode.ExtensionContext) {
68
69
// Parse of all visible documents
69
70
const trees : { [ uri : string ] : treeSitter . Tree } = { } ;
70
71
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
+
71
86
/**
72
87
* Load the parser model for a given language
73
88
* @param languageId The vscode language id of the language to load
@@ -82,6 +97,10 @@ export async function activate(context: vscode.ExtensionContext) {
82
97
return true ;
83
98
}
84
99
100
+ if ( languageId === "latex" && disableLatex ) {
101
+ return false ;
102
+ }
103
+
85
104
let absolute ;
86
105
if ( path . isAbsolute ( language . module ) ) {
87
106
absolute = language . module ;
@@ -244,6 +263,7 @@ export async function activate(context: vscode.ExtensionContext) {
244
263
const languageId = document . languageId ;
245
264
246
265
if ( languageId in languages ) {
266
+ validateGetLatex ( document . languageId ) ;
247
267
throw new LanguageStillLoadingError ( languageId ) ;
248
268
} else {
249
269
throw new UnsupportedLanguageError ( languageId ) ;
@@ -263,6 +283,7 @@ export async function activate(context: vscode.ExtensionContext) {
263
283
console . warn (
264
284
"vscode-parse-tree: getLanguage is deprecated, use createQuery(languageId, source) instead."
265
285
) ;
286
+ validateGetLatex ( languageId ) ;
266
287
return languages [ languageId ] ?. parser ?. language ?? undefined ;
267
288
} ,
268
289
@@ -272,6 +293,7 @@ export async function activate(context: vscode.ExtensionContext) {
272
293
) : treeSitter . Query | undefined {
273
294
const language = languages [ languageId ] ?. parser ?. language ;
274
295
if ( language == null ) {
296
+ validateGetLatex ( languageId ) ;
275
297
return undefined ;
276
298
}
277
299
return new treeSitter . Query ( language , source ) ;
0 commit comments