11use serde:: { Deserialize , Serialize } ;
2- use tree_sitter as ts;
3- use crate :: wasm_lang:: WasmLang ;
2+ use crate :: wasm_lang:: { WasmDoc , WasmLang } ;
43use ast_grep_core:: {
5- Language , Pattern , Node , StrDoc ,
6- matcher:: PatternNode
4+ matcher:: PatternNode , AstGrep , Language , Node , Pattern
75} ;
86use wasm_bindgen:: prelude:: JsError ;
7+ use web_tree_sitter_sg:: { Point , TreeCursor } ;
98
109#[ derive( Deserialize , Serialize ) ]
1110#[ serde( rename_all = "camelCase" ) ]
1211pub 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>) {
7472pub 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 {
0 commit comments