|
4 | 4 |
|
5 | 5 | use core::cell::RefCell;
|
6 | 6 | use js_sys::{Array, Error, Function, JsString, Object, Promise, Reflect, Uint8Array};
|
7 |
| -use wasm_bindgen::{prelude::*, JsCast}; |
| 7 | +use wasm_bindgen::{JsCast, prelude::*}; |
8 | 8 | use wasm_bindgen_futures::JsFuture;
|
9 | 9 |
|
10 | 10 | trait JsValueExt {
|
@@ -41,15 +41,21 @@ thread_local! {
|
41 | 41 | pub struct TreeSitter;
|
42 | 42 |
|
43 | 43 | impl TreeSitter {
|
44 |
| - pub async fn init() -> Result<(), JsError> { |
| 44 | + pub async fn init(locate_file: Option<Function>) -> Result<(), JsError> { |
45 | 45 | #![allow(non_snake_case)]
|
46 | 46 |
|
47 | 47 | // Exit early if `web-tree-sitter` is already initialized
|
48 | 48 | if TREE_SITTER_INITIALIZED.with(|cell| *cell.borrow()) {
|
49 | 49 | return Ok(());
|
50 | 50 | }
|
51 | 51 |
|
52 |
| - JsFuture::from(Parser::init()).await.lift_error()?; |
| 52 | + if let Some(locate_file) = locate_file { |
| 53 | + let options = Object::new(); |
| 54 | + Reflect::set(&options, &"locateFile".into(), &locate_file.into()).unwrap(); |
| 55 | + JsFuture::from(Parser::init(Some(&options))).await.lift_error()?; |
| 56 | + } else { |
| 57 | + JsFuture::from(Parser::init(None)).await.lift_error()?; |
| 58 | + } |
53 | 59 |
|
54 | 60 | // Set `web-tree-sitter` to initialized
|
55 | 61 | TREE_SITTER_INITIALIZED.with(|cell| cell.replace(true));
|
@@ -154,7 +160,7 @@ extern {
|
154 | 160 | fn delete(this: &LoggerParams, val: &JsString);
|
155 | 161 | }
|
156 | 162 |
|
157 |
| -#[wasm_bindgen(module="web-tree-sitter")] |
| 163 | +#[wasm_bindgen(module = "web-tree-sitter")] |
158 | 164 | extern {
|
159 | 165 | #[derive(Clone, Debug, PartialEq)]
|
160 | 166 | pub type Language;
|
@@ -292,8 +298,7 @@ impl Default for Point {
|
292 | 298 | }
|
293 | 299 | }
|
294 | 300 |
|
295 |
| -impl Eq for Point { |
296 |
| -} |
| 301 | +impl Eq for Point {} |
297 | 302 |
|
298 | 303 | impl std::hash::Hash for Point {
|
299 | 304 | fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
@@ -538,8 +543,7 @@ impl Default for Range {
|
538 | 543 | }
|
539 | 544 | }
|
540 | 545 |
|
541 |
| -impl Eq for Range { |
542 |
| -} |
| 546 | +impl Eq for Range {} |
543 | 547 |
|
544 | 548 | impl std::hash::Hash for Range {
|
545 | 549 | fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
@@ -743,8 +747,7 @@ impl PartialEq<SyntaxNode> for SyntaxNode {
|
743 | 747 | }
|
744 | 748 | }
|
745 | 749 |
|
746 |
| -impl Eq for SyntaxNode { |
747 |
| -} |
| 750 | +impl Eq for SyntaxNode {} |
748 | 751 |
|
749 | 752 | impl std::hash::Hash for SyntaxNode {
|
750 | 753 | fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
@@ -850,14 +853,14 @@ extern {
|
850 | 853 | pub fn reset(this: &TreeCursor, node: &SyntaxNode);
|
851 | 854 | }
|
852 | 855 |
|
853 |
| -#[wasm_bindgen(module="web-tree-sitter")] |
| 856 | +#[wasm_bindgen(module = "web-tree-sitter")] |
854 | 857 | extern {
|
855 | 858 | #[derive(Clone, Debug)]
|
856 | 859 | pub type Parser;
|
857 | 860 |
|
858 | 861 | // Static Methods
|
859 | 862 | #[wasm_bindgen(static_method_of = Parser)]
|
860 |
| - pub fn init() -> Promise; |
| 863 | + pub fn init(options: Option<&Object>) -> Promise; |
861 | 864 |
|
862 | 865 | // Constructor
|
863 | 866 |
|
|
0 commit comments