1
1
use serde:: { Deserialize , Serialize } ;
2
- use tree_sitter as ts;
3
- use crate :: wasm_lang:: WasmLang ;
2
+ use crate :: wasm_lang:: { WasmDoc , WasmLang } ;
4
3
use ast_grep_core:: {
5
- Language , Pattern , Node , StrDoc ,
6
- matcher:: PatternNode
4
+ matcher:: PatternNode , AstGrep , Language , Node , Pattern
7
5
} ;
8
6
use wasm_bindgen:: prelude:: JsError ;
7
+ use web_tree_sitter_sg:: { Point , TreeCursor } ;
9
8
10
9
#[ derive( Deserialize , Serialize ) ]
11
10
#[ serde( rename_all = "camelCase" ) ]
12
11
pub struct DumpNode {
13
- id : usize ,
12
+ id : u32 ,
14
13
field : Option < String > ,
15
14
kind : String ,
16
15
start : Pos ,
@@ -26,26 +25,25 @@ pub struct Pos {
26
25
column : u32 ,
27
26
}
28
27
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 ( ) ,
35
33
}
36
34
}
37
35
}
38
36
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 ( ) ;
41
39
let kind = if node. is_missing ( ) {
42
- format ! ( "MISSING {}" , node. kind ( ) )
40
+ format ! ( "MISSING {}" , node. type_ ( ) )
43
41
} else {
44
- node. kind ( ) . to_string ( )
42
+ format ! ( "{}" , node. type_ ( ) )
45
43
} ;
46
44
let start = node. start_position ( ) . into ( ) ;
47
45
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 ) ) ;
49
47
let mut children = vec ! [ ] ;
50
48
if cursor. goto_first_child ( ) {
51
49
dump_nodes ( cursor, & mut children) ;
@@ -62,7 +60,7 @@ pub fn dump_one_node(cursor: &mut ts::TreeCursor, target: &mut Vec<DumpNode>) {
62
60
} )
63
61
}
64
62
65
- fn dump_nodes ( cursor : & mut ts :: TreeCursor , target : & mut Vec < DumpNode > ) {
63
+ fn dump_nodes ( cursor : & mut TreeCursor , target : & mut Vec < DumpNode > ) {
66
64
loop {
67
65
dump_one_node ( cursor, target) ;
68
66
if !cursor. goto_next_sibling ( ) {
@@ -74,7 +72,8 @@ fn dump_nodes(cursor: &mut ts::TreeCursor, target: &mut Vec<DumpNode>) {
74
72
pub fn dump_pattern ( query : String , selector : Option < String > ) -> Result < PatternTree , JsError > {
75
73
let lang = WasmLang :: get_current ( ) ;
76
74
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) ;
78
77
let pattern = if let Some ( sel) = selector {
79
78
Pattern :: contextual ( & query, & sel, lang) ?
80
79
} else {
@@ -85,12 +84,12 @@ pub fn dump_pattern(query: String, selector: Option<String>) -> Result<PatternTr
85
84
Ok ( ret)
86
85
}
87
86
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 {
89
88
if node. node_id ( ) == node_id {
90
89
return dump_pattern_impl ( node, pattern)
91
90
}
92
91
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 ;
94
93
let text = if children. is_empty ( ) {
95
94
Some ( node. text ( ) . into ( ) )
96
95
} else {
@@ -112,9 +111,9 @@ fn dump_pattern_tree(node: Node<StrDoc<WasmLang>>, node_id: usize, pattern: &Pat
112
111
}
113
112
}
114
113
115
- fn dump_pattern_impl ( node : Node < StrDoc < WasmLang > > , pattern : & PatternNode ) -> PatternTree {
114
+ fn dump_pattern_impl ( node : Node < WasmDoc > , pattern : & PatternNode ) -> PatternTree {
116
115
use PatternNode as PN ;
117
- let ts = node. get_ts_node ( ) ;
116
+ let ts = node. get_inner_node ( ) . 0 ;
118
117
let kind = if ts. is_missing ( ) {
119
118
format ! ( "MISSING {}" , node. kind( ) )
120
119
} else {
0 commit comments