Skip to content

Commit 1498a07

Browse files
committed
fix: handle WASM version incompatibility for ABL and DF parsers
- Modified languageParser.ts to gracefully handle version incompatible WASM files - Added ABL and DF extensions to fallback list for code indexing - Fixed incorrect node names in ABL and DF query files - The parsers will now use fallback chunking instead of failing with version errors
1 parent 2656d03 commit 1498a07

File tree

4 files changed

+81
-39
lines changed

4 files changed

+81
-39
lines changed

src/services/code-index/shared/supported-extensions.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ export const fallbackExtensions = [
2222
".vb", // Visual Basic .NET - no dedicated WASM parser
2323
".scala", // Scala - uses fallback chunking instead of Lua query workaround
2424
".swift", // Swift - uses fallback chunking due to parser instability
25+
".p", // ABL - WASM version incompatibility with current tree-sitter
26+
".i", // ABL include files - WASM version incompatibility
27+
".w", // ABL window files - WASM version incompatibility
28+
".cls", // ABL class files - WASM version incompatibility
29+
".df", // DataFrames - WASM version incompatibility with current tree-sitter
2530
]
2631

2732
/**

src/services/tree-sitter/languageParser.ts

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,26 +41,41 @@ export interface LanguageParser {
4141

4242
async function loadLanguage(langName: string, sourceDirectory?: string) {
4343
const baseDir = sourceDirectory || __dirname
44+
const { Language } = require("web-tree-sitter")
4445

45-
// Special handling for ABL and DF - load from node_modules
46+
// Special handling for ABL and DF - try multiple loading strategies
4647
if (langName === "abl" || langName === "df") {
48+
// Strategy 1: Try loading from dist directory first (if copied during build)
49+
const distWasmPath = path.join(baseDir, `tree-sitter-${langName}.wasm`)
50+
try {
51+
const language = await Language.load(distWasmPath)
52+
console.log(`Successfully loaded ${langName} from dist directory`)
53+
return language
54+
} catch (error) {
55+
console.log(`Could not load ${langName} from dist: ${error instanceof Error ? error.message : error}`)
56+
}
57+
58+
// Strategy 2: Try loading from npm package location
4759
try {
48-
const { Language } = require("web-tree-sitter")
4960
const packageName = `@usagi-coffee/tree-sitter-${langName}`
5061
const wasmPath = require.resolve(`${packageName}/tree-sitter-${langName}.wasm`)
51-
return await Language.load(wasmPath)
62+
const language = await Language.load(wasmPath)
63+
console.log(`Successfully loaded ${langName} from npm package`)
64+
return language
5265
} catch (error) {
53-
console.error(
54-
`Error loading ${langName} language from npm package: ${error instanceof Error ? error.message : error}`,
66+
console.warn(
67+
`Warning: ${langName} language parser has version incompatibility. ${error instanceof Error ? error.message : error}`,
5568
)
56-
throw error
69+
// Don't throw here, we'll handle this gracefully
70+
console.warn(`Skipping ${langName} parser due to version incompatibility`)
71+
return null
5772
}
5873
}
5974

75+
// Standard loading for other languages
6076
const wasmPath = path.join(baseDir, `tree-sitter-${langName}.wasm`)
6177

6278
try {
63-
const { Language } = require("web-tree-sitter")
6479
return await Language.load(wasmPath)
6580
} catch (error) {
6681
console.error(`Error loading language: ${wasmPath}: ${error instanceof Error ? error.message : error}`)
@@ -242,10 +257,18 @@ export async function loadRequiredLanguageParsers(filesToParse: string[], source
242257
case "cls":
243258
parserKey = "abl" // Use same key for all ABL extensions
244259
language = await loadLanguage("abl", sourceDirectory)
260+
if (!language) {
261+
console.warn(`Skipping ABL parser for .${ext} files due to compatibility issues`)
262+
continue // Skip this extension
263+
}
245264
query = new Query(language, ablQuery)
246265
break
247266
case "df":
248267
language = await loadLanguage("df", sourceDirectory)
268+
if (!language) {
269+
console.warn(`Skipping DF parser for .${ext} files due to compatibility issues`)
270+
continue // Skip this extension
271+
}
249272
query = new Query(language, dfQuery)
250273
break
251274
default:
Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,51 @@
11
/*
22
OpenEdge ABL language structures
33
Basic query for ABL (Progress 4GL) language
4-
This is a minimal implementation that can be expanded with proper ABL grammar knowledge
4+
Updated to match actual grammar node names from the tree-sitter-abl package
55
*/
66
export default String.raw`
77
; Procedure definitions
8-
(procedure_statement
8+
(procedure_definition
99
name: (identifier) @name.definition.procedure) @definition.procedure
1010
11-
; Function definitions
12-
(function_statement
11+
; Function definitions
12+
(function_definition
1313
name: (identifier) @name.definition.function) @definition.function
1414
1515
; Class definitions
16-
(class_statement
16+
(class_definition
1717
name: (identifier) @name.definition.class) @definition.class
1818
1919
; Method definitions
20-
(method_statement
20+
(method_definition
2121
name: (identifier) @name.definition.method) @definition.method
2222
2323
; Variable definitions
24-
(define_variable_statement
24+
(variable_definition
2525
name: (identifier) @name.definition.variable) @definition.variable
2626
2727
; Property definitions
28-
(define_property_statement
28+
(property_definition
2929
name: (identifier) @name.definition.property) @definition.property
3030
3131
; Temp-table definitions
32-
(define_temp_table_statement
32+
(temp_table_definition
3333
name: (identifier) @name.definition.table) @definition.table
3434
3535
; Buffer definitions
36-
(define_buffer_statement
36+
(buffer_definition
3737
name: (identifier) @name.definition.buffer) @definition.buffer
38+
39+
; Include statements
40+
(include_statement
41+
(string) @name.include) @include
42+
43+
; Comments
44+
(comment) @comment
45+
46+
; String literals
47+
(string) @string
48+
49+
; Identifiers
50+
(identifier) @identifier
3851
`
Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,35 @@
11
/*
22
OpenEdge DataFrames language structures
33
Basic query for DF (DataFrames) language
4-
This is a minimal implementation that can be expanded with proper DF grammar knowledge
4+
Updated to match actual grammar node names from the tree-sitter-df package
55
*/
66
export default String.raw`
7-
; Field definitions
8-
(field_definition
9-
name: (identifier) @name.definition.field) @definition.field
7+
; ADD statements for various database objects
8+
(add_field_statement
9+
(string) @name.definition.field) @definition.field
1010
11-
; Index definitions
12-
(index_definition
13-
name: (identifier) @name.definition.index) @definition.index
11+
(add_index_statement
12+
(string) @name.definition.index) @definition.index
1413
15-
; Table definitions
16-
(table_definition
17-
name: (identifier) @name.definition.table) @definition.table
14+
(add_table_statement
15+
(string) @name.definition.table) @definition.table
1816
19-
; Sequence definitions
20-
(sequence_definition
21-
name: (identifier) @name.definition.sequence) @definition.sequence
17+
(add_sequence_statement
18+
(string) @name.definition.sequence) @definition.sequence
2219
23-
; Trigger definitions
24-
(trigger_definition
25-
name: (identifier) @name.definition.trigger) @definition.trigger
20+
(add_area_statement
21+
(string) @name.definition.area) @definition.area
2622
27-
; Area definitions
28-
(area_definition
29-
name: (identifier) @name.definition.area) @definition.area
23+
; UPDATE statements
24+
(update_field_statement
25+
(string) @name.definition.field) @definition.field
3026
31-
; Database definitions
32-
(database_definition
33-
name: (identifier) @name.definition.database) @definition.database
27+
(update_table_statement
28+
(string) @name.definition.table) @definition.table
29+
30+
; String literals for values
31+
(string) @string
32+
33+
; Comments
34+
(comment) @comment
3435
`

0 commit comments

Comments
 (0)