@@ -44,6 +44,7 @@ pub fn generate_parser_in_directory(
44
44
abi_version : usize ,
45
45
generate_bindings : bool ,
46
46
report_symbol_name : Option < & str > ,
47
+ runtime : Option < & str > ,
47
48
) -> Result < ( ) > {
48
49
let src_path = repo_path. join ( "src" ) ;
49
50
let header_path = src_path. join ( "tree_sitter" ) ;
@@ -56,11 +57,11 @@ pub fn generate_parser_in_directory(
56
57
let grammar_json;
57
58
match grammar_path {
58
59
Some ( path) => {
59
- grammar_json = load_grammar_file ( path. as_ref ( ) ) ?;
60
+ grammar_json = load_grammar_file ( path. as_ref ( ) , runtime ) ?;
60
61
}
61
62
None => {
62
63
let grammar_js_path = grammar_path. map_or ( repo_path. join ( "grammar.js" ) , |s| s. into ( ) ) ;
63
- grammar_json = load_grammar_file ( & grammar_js_path) ?;
64
+ grammar_json = load_grammar_file ( & grammar_js_path, runtime ) ?;
64
65
fs:: write ( & src_path. join ( "grammar.json" ) , & grammar_json) ?;
65
66
}
66
67
}
@@ -155,9 +156,9 @@ fn generate_parser_for_grammar_with_opts(
155
156
} )
156
157
}
157
158
158
- pub fn load_grammar_file ( grammar_path : & Path ) -> Result < String > {
159
+ pub fn load_grammar_file ( grammar_path : & Path , runtime : Option < & str > ) -> Result < String > {
159
160
match grammar_path. extension ( ) . and_then ( |e| e. to_str ( ) ) {
160
- Some ( "js" ) => Ok ( load_js_grammar_file ( grammar_path) ?) ,
161
+ Some ( "js" ) => Ok ( load_js_grammar_file ( grammar_path, runtime ) ?) ,
161
162
Some ( "json" ) => Ok ( fs:: read_to_string ( grammar_path) ?) ,
162
163
_ => Err ( anyhow ! (
163
164
"Unknown grammar file extension: {:?}" ,
@@ -166,14 +167,15 @@ pub fn load_grammar_file(grammar_path: &Path) -> Result<String> {
166
167
}
167
168
}
168
169
169
- fn load_js_grammar_file ( grammar_path : & Path ) -> Result < String > {
170
+ fn load_js_grammar_file ( grammar_path : & Path , runtime : Option < & str > ) -> Result < String > {
170
171
let grammar_path = fs:: canonicalize ( grammar_path) ?;
171
- let mut node_process = Command :: new ( "node" )
172
+ let js_runtime = runtime. or ( Some ( "node" ) ) . unwrap ( ) ;
173
+ let mut node_process = Command :: new ( js_runtime)
172
174
. env ( "TREE_SITTER_GRAMMAR_PATH" , grammar_path)
173
175
. stdin ( Stdio :: piped ( ) )
174
176
. stdout ( Stdio :: piped ( ) )
175
177
. spawn ( )
176
- . expect ( "Failed to run `node`" ) ;
178
+ . expect ( format ! ( "Failed to run `{js_runtime}`" ) . as_str ( ) ) ;
177
179
178
180
let mut node_stdin = node_process
179
181
. stdin
0 commit comments