Skip to content

Commit 057ff20

Browse files
fix: try use new wasm lang
1 parent ecb762f commit 057ff20

File tree

5 files changed

+300
-266
lines changed

5 files changed

+300
-266
lines changed

Cargo.lock

Lines changed: 5 additions & 128 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "ast-grep-wasm"
3-
version = "0.26.3"
3+
version = "0.38.0"
44
authors = ["HerringtonDarkholme <2883231+HerringtonDarkholme@users.noreply.github.com>"]
55
edition = "2018"
66
description = "Search and Rewrite code at large scale using precise AST pattern"
@@ -28,11 +28,9 @@ console_error_panic_hook = { version = "0.1.7", optional = true }
2828

2929
once_cell = "1.19.0"
3030
wee_alloc = { version = "0.4.5" }
31-
ast-grep-core = { version = "0.36.3" }
32-
ast-grep-config = { version = "0.36.3" }
33-
ast-grep-language = { version = "0.36.3", default-features = false }
31+
ast-grep-core = { version = "0.38.1", default-features = false }
32+
ast-grep-config = { version = "0.38.1", default-features = false }
3433
web-tree-sitter-sg = "0.24.4"
35-
tree-sitter = { version = "0.24.5", package = "tree-sitter-facade-sg" }
3634
serde-wasm-bindgen = "0.6"
3735
serde_json = "1.0.116"
3836

src/dump_tree.rs

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
use serde::{Deserialize, Serialize};
2-
use tree_sitter as ts;
3-
use crate::wasm_lang::WasmLang;
2+
use crate::wasm_lang::{WasmDoc, WasmLang};
43
use ast_grep_core::{
5-
Language, Pattern, Node, StrDoc,
6-
matcher::PatternNode
4+
matcher::PatternNode, AstGrep, Language, Node, Pattern
75
};
86
use wasm_bindgen::prelude::JsError;
7+
use web_tree_sitter_sg::{Point, TreeCursor};
98

109
#[derive(Deserialize, Serialize)]
1110
#[serde(rename_all = "camelCase")]
1211
pub struct DumpNode {
13-
id: usize,
12+
id: u32,
1413
field: Option<String>,
1514
kind: String,
1615
start: Pos,
@@ -26,26 +25,25 @@ pub struct Pos {
2625
column: u32,
2726
}
2827

29-
impl From<ts::Point> for Pos {
30-
#[inline]
31-
fn from(pt: ts::Point) -> Self {
32-
Pos {
33-
row: pt.row(),
34-
column: pt.column(),
28+
impl From<Point> for Pos {
29+
fn from(point: Point) -> Self {
30+
Self {
31+
row: point.row(),
32+
column: point.column(),
3533
}
3634
}
3735
}
3836

39-
pub fn dump_one_node(cursor: &mut ts::TreeCursor, target: &mut Vec<DumpNode>) {
40-
let node = cursor.node();
37+
pub fn dump_one_node(cursor: &mut TreeCursor, target: &mut Vec<DumpNode>) {
38+
let node = cursor.current_node();
4139
let kind = if node.is_missing() {
42-
format!("MISSING {}", node.kind())
40+
format!("MISSING {}", node.type_())
4341
} else {
44-
node.kind().to_string()
42+
format!("{}", node.type_())
4543
};
4644
let start = node.start_position().into();
4745
let end = node.end_position().into();
48-
let field = cursor.field_name().map(|c| c.to_string());
46+
let field = cursor.current_field_name().map(|c| format!("{}", c));
4947
let mut children = vec![];
5048
if cursor.goto_first_child() {
5149
dump_nodes(cursor, &mut children);
@@ -62,7 +60,7 @@ pub fn dump_one_node(cursor: &mut ts::TreeCursor, target: &mut Vec<DumpNode>) {
6260
})
6361
}
6462

65-
fn dump_nodes(cursor: &mut ts::TreeCursor, target: &mut Vec<DumpNode>) {
63+
fn dump_nodes(cursor: &mut TreeCursor, target: &mut Vec<DumpNode>) {
6664
loop {
6765
dump_one_node(cursor, target);
6866
if !cursor.goto_next_sibling() {
@@ -74,7 +72,8 @@ fn dump_nodes(cursor: &mut ts::TreeCursor, target: &mut Vec<DumpNode>) {
7472
pub fn dump_pattern(query: String, selector: Option<String>) -> Result<PatternTree, JsError> {
7573
let lang = WasmLang::get_current();
7674
let processed = lang.pre_process_pattern(&query);
77-
let root = lang.ast_grep(processed);
75+
let doc = WasmDoc::try_new(processed.to_string(), lang)?;
76+
let root = AstGrep::doc(doc);
7877
let pattern = if let Some(sel) = selector {
7978
Pattern::contextual(&query, &sel, lang)?
8079
} else {
@@ -85,12 +84,12 @@ pub fn dump_pattern(query: String, selector: Option<String>) -> Result<PatternTr
8584
Ok(ret)
8685
}
8786

88-
fn dump_pattern_tree(node: Node<StrDoc<WasmLang>>, node_id: usize, pattern: &PatternNode) -> PatternTree {
87+
fn dump_pattern_tree(node: Node<WasmDoc>, node_id: usize, pattern: &PatternNode) -> PatternTree {
8988
if node.node_id() == node_id {
9089
return dump_pattern_impl(node, pattern)
9190
}
9291
let children: Vec<_> = node.children().map(|n| dump_pattern_tree(n, node_id, pattern)).collect();
93-
let ts = node.get_ts_node();
92+
let ts = node.get_inner_node().0;
9493
let text = if children.is_empty() {
9594
Some(node.text().into())
9695
} else {
@@ -112,9 +111,9 @@ fn dump_pattern_tree(node: Node<StrDoc<WasmLang>>, node_id: usize, pattern: &Pat
112111
}
113112
}
114113

115-
fn dump_pattern_impl(node: Node<StrDoc<WasmLang>>, pattern: &PatternNode) -> PatternTree {
114+
fn dump_pattern_impl(node: Node<WasmDoc>, pattern: &PatternNode) -> PatternTree {
116115
use PatternNode as PN;
117-
let ts = node.get_ts_node();
116+
let ts = node.get_inner_node().0;
118117
let kind = if ts.is_missing() {
119118
format!("MISSING {}", node.kind())
120119
} else {

src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use ast_grep_core::{AstGrep, Node as SgNode};
1111
use serde_wasm_bindgen::from_value as from_js_val;
1212
use std::collections::HashMap;
1313
use std::error::Error;
14-
use tree_sitter as ts;
14+
use web_tree_sitter_sg::TreeSitter;
1515
use wasm_bindgen::prelude::*;
1616

1717
type Node<'a> = SgNode<'a, WasmDoc>;
@@ -21,7 +21,7 @@ static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
2121

2222
#[wasm_bindgen(js_name = initializeTreeSitter)]
2323
pub async fn initialize_tree_sitter() -> Result<(), JsError> {
24-
ts::TreeSitter::init().await
24+
TreeSitter::init().await
2525
}
2626

2727
#[wasm_bindgen(js_name = setupParser)]
@@ -38,7 +38,7 @@ pub fn find_nodes(src: String, configs: Vec<JsValue>) -> Result<JsValue, JsError
3838
rules.push(finder);
3939
}
4040
let combined = CombinedScan::new(rules.iter().collect());
41-
let doc = WasmDoc::new(src.clone(), lang);
41+
let doc = WasmDoc::try_new(src.clone(), lang)?;
4242
let root = AstGrep::doc(doc);
4343
let ret: HashMap<_, _> = combined.scan(&root, false).matches.into_iter().map(|(rule, matches)| {
4444
let matches: Vec<_> = matches.into_iter().map(|m| {
@@ -59,7 +59,7 @@ pub fn fix_errors(src: String, configs: Vec<JsValue>) -> Result<String, JsError>
5959
rules.push(finder);
6060
}
6161
let combined = CombinedScan::new(rules.iter().collect());
62-
let doc = WasmDoc::new(src.clone(), lang);
62+
let doc = WasmDoc::try_new(src.clone(), lang)?;
6363
let root = AstGrep::doc(doc);
6464
let diffs = combined.scan(&root, true).diffs;
6565
if diffs.is_empty() {
@@ -85,7 +85,7 @@ pub fn fix_errors(src: String, configs: Vec<JsValue>) -> Result<String, JsError>
8585
}
8686

8787
fn convert_to_debug_node(n: Node) -> DumpNode {
88-
let mut cursor = n.get_ts_node().walk();
88+
let mut cursor = n.get_inner_node().0.walk();
8989
let mut target = vec![];
9090
dump_one_node(&mut cursor, &mut target);
9191
target.pop().expect_throw("found empty node")
@@ -94,7 +94,7 @@ fn convert_to_debug_node(n: Node) -> DumpNode {
9494
#[wasm_bindgen(js_name = dumpASTNodes)]
9595
pub fn dump_ast_nodes(src: String) -> Result<JsValue, JsError> {
9696
let lang = WasmLang::get_current();
97-
let doc = WasmDoc::new(src, lang);
97+
let doc = WasmDoc::try_new(src, lang)?;
9898
let root = AstGrep::doc(doc);
9999
let debug_node = convert_to_debug_node(root.root());
100100
let ret = serde_wasm_bindgen::to_value(&debug_node)?;

0 commit comments

Comments
 (0)