@@ -41,26 +41,57 @@ export interface LanguageParser {
41
41
42
42
async function loadLanguage ( langName : string , sourceDirectory ?: string ) {
43
43
const baseDir = sourceDirectory || __dirname
44
+ const { Language } = require ( "web-tree-sitter" )
44
45
45
- // Special handling for ABL and DF - load from node_modules
46
+ // Special handling for ABL and DF - try multiple loading strategies
46
47
if ( langName === "abl" || langName === "df" ) {
48
+ // Strategy 1: Try to load from dist directory (where build process copies them)
47
49
try {
48
- const { Language } = require ( "web-tree-sitter" )
49
- const packageName = `@usagi-coffee/tree-sitter-${ langName } `
50
- const wasmPath = require . resolve ( `${ packageName } /tree-sitter-${ langName } .wasm` )
50
+ const wasmPath = path . join ( baseDir , `tree-sitter-${ langName } .wasm` )
51
51
return await Language . load ( wasmPath )
52
- } catch ( error ) {
53
- console . error (
54
- `Error loading ${ langName } language from npm package: ${ error instanceof Error ? error . message : error } ` ,
52
+ } catch ( distError ) {
53
+ console . warn (
54
+ `Could not load ${ langName } from dist directory, trying npm package: ${ distError instanceof Error ? distError . message : distError } ` ,
55
55
)
56
- throw error
56
+
57
+ // Strategy 2: Try to load from node_modules using require.resolve
58
+ try {
59
+ const packageName = `@usagi-coffee/tree-sitter-${ langName } `
60
+ const wasmPath = require . resolve ( `${ packageName } /tree-sitter-${ langName } .wasm` )
61
+ return await Language . load ( wasmPath )
62
+ } catch ( npmError ) {
63
+ console . warn (
64
+ `Could not load ${ langName } from npm package, trying alternative path: ${ npmError instanceof Error ? npmError . message : npmError } ` ,
65
+ )
66
+
67
+ // Strategy 3: Try to load from node_modules with direct path
68
+ try {
69
+ const wasmPath = path . join (
70
+ __dirname ,
71
+ ".." ,
72
+ ".." ,
73
+ ".." ,
74
+ "node_modules" ,
75
+ `@usagi-coffee/tree-sitter-${ langName } ` ,
76
+ `tree-sitter-${ langName } .wasm` ,
77
+ )
78
+ return await Language . load ( wasmPath )
79
+ } catch ( fallbackError ) {
80
+ console . error (
81
+ `Failed to load ${ langName } language from all strategies: ${ fallbackError instanceof Error ? fallbackError . message : fallbackError } ` ,
82
+ )
83
+ throw new Error (
84
+ `Unable to load ${ langName } language parser. Please ensure the extension is properly installed.` ,
85
+ )
86
+ }
87
+ }
57
88
}
58
89
}
59
90
91
+ // Standard loading for other languages
60
92
const wasmPath = path . join ( baseDir , `tree-sitter-${ langName } .wasm` )
61
93
62
94
try {
63
- const { Language } = require ( "web-tree-sitter" )
64
95
return await Language . load ( wasmPath )
65
96
} catch ( error ) {
66
97
console . error ( `Error loading language: ${ wasmPath } : ${ error instanceof Error ? error . message : error } ` )
0 commit comments