@@ -75,17 +75,17 @@ Extract function signatures from Rust. `Type` references itself to handle nested
7575
7676``` clojure
7777Type = [
78- Simple: [(type_identifier ) (primitive_type )] @name :: string
78+ Simple: [(type_identifier ) (primitive_type )] @name
7979 Generic: (generic_type
80- type: (type_identifier ) @name :: string
80+ type: (type_identifier ) @name
8181 type_arguments: (type_arguments (Type )* @args))
8282]
8383
8484Func = (function_item
85- name: (identifier ) @name :: string
85+ name: (identifier ) @name
8686 parameters: (parameters
8787 (parameter
88- pattern: (identifier ) @param :: string
88+ pattern: (identifier ) @param
8989 type: (Type ) @type
9090 )* @params))
9191
@@ -104,13 +104,32 @@ Plotnik infers TypeScript types from the query structure. `Type` is recursive: `
104104
105105``` sh
106106❯ plotnik infer query.ptk --lang rust
107- export type Type =
108- | { $tag : " Simple" ; $data : { name: string } }
109- | { $tag : " Generic" ; $data : { name: string; args: Type[] } };
107+ export interface Node {
108+ kind: string;
109+ text: string;
110+ span: [number, number];
111+ }
112+
113+ export interface TypeSimple {
114+ $tag : " Simple" ;
115+ $data : { name: Node };
116+ }
117+
118+ export interface TypeGeneric {
119+ $tag : " Generic" ;
120+ $data : { args: Type[]; name: Node };
121+ }
122+
123+ export type Type = TypeSimple | TypeGeneric;
124+
125+ export interface FuncParams {
126+ param: Node;
127+ type: Type;
128+ }
110129
111130export interface Func {
112- name: string ;
113- params: { param: string ; type: Type } [];
131+ name: Node ;
132+ params: FuncParams [];
114133}
115134
116135export interface Funcs {
@@ -121,33 +140,42 @@ export interface Funcs {
121140Run the query against ` lib.rs` to extract structured JSON:
122141
123142` ` ` sh
124- ❯ plotnik exec query.ptk lib.rs
143+ ❯ plotnik exec query.ptk lib.rs --entry Funcs
125144{
126145 " funcs" : [
127146 {
128- " name" : " get" ,
147+ " name" : { " kind " : " identifier " , " text " : " get" , " span " : [3, 6] } ,
129148 " params" : [{
130- " param" : " key" ,
149+ " param" : { " kind " : " identifier " , " text " : " key" , " span " : [7, 10] } ,
131150 " type" : {
132151 " $tag " : " Generic" ,
133152 " $data " : {
134- " name" : " Option" ,
153+ " name" : { " kind " : " type_identifier " , " text " : " Option" , " span " : [12, 18] } ,
135154 " args" : [{
136155 " $tag " : " Generic" ,
137156 " $data " : {
138- " name" : " Vec" ,
139- " args" : [{ " $tag " : " Simple" , " $data " : { " name" : " String" } }]
157+ " name" : { " kind" : " type_identifier" , " text" : " Vec" , " span" : [19, 22] },
158+ " args" : [{
159+ " $tag " : " Simple" ,
160+ " $data " : { " name" : { " kind" : " type_identifier" , " text" : " String" , " span" : [23, 29] } }
161+ }]
140162 }
141163 }]
142164 }
143165 }
144166 }]
145167 },
146168 {
147- " name" : " set" ,
169+ " name" : { " kind " : " identifier " , " text " : " set" , " span " : [40, 43] } ,
148170 " params" : [
149- { " param" : " key" , " type" : { " $tag " : " Simple" , " $data " : { " name" : " String" } } },
150- { " param" : " val" , " type" : { " $tag " : " Simple" , " $data " : { " name" : " i32" } } }
171+ {
172+ " param" : { " kind" : " identifier" , " text" : " key" , " span" : [44, 47] },
173+ " type" : { " $tag " : " Simple" , " $data " : { " name" : { " kind" : " type_identifier" , " text" : " String" , " span" : [49, 55] } } }
174+ },
175+ {
176+ " param" : { " kind" : " identifier" , " text" : " val" , " span" : [57, 60] },
177+ " type" : { " $tag " : " Simple" , " $data " : { " name" : { " kind" : " primitive_type" , " text" : " i32" , " span" : [62, 65] } } }
178+ }
151179 ]
152180 }
153181 ]
0 commit comments