11const std = @import ("std" );
22const parse = @import ("parse.zig" );
33const utils = @import ("utils.zig" );
4+
45pub fn main () ! void {
56 var gpa = std .heap .GeneralPurposeAllocator (.{}){};
67 defer _ = gpa .deinit ();
@@ -26,6 +27,7 @@ pub fn main() !void {
2627 defer utils .deinitParseResult (& res , allocator );
2728 try outputJson (res );
2829}
30+
2931fn outputJson (res : parse.ParseResult ) ! void {
3032 const stdout = std .io .getStdOut ().writer ();
3133 try stdout .print ("{{" , .{});
@@ -58,6 +60,17 @@ fn outputJson(res: parse.ParseResult) !void {
5860 try std .json .encodeJsonString (entry .value_ptr .* , .{}, stdout );
5961 }
6062 try stdout .print ("}}," , .{});
63+ try stdout .print ("\" local_vars\" :{{" , .{});
64+ first = true ;
65+ var local_vars_it = res .local_vars .iterator ();
66+ while (local_vars_it .next ()) | entry | {
67+ if (! first ) try stdout .print ("," , .{});
68+ first = false ;
69+ try std .json .encodeJsonString (entry .key_ptr .* , .{}, stdout );
70+ try stdout .print (":" , .{});
71+ try std .json .encodeJsonString (entry .value_ptr .* , .{}, stdout );
72+ }
73+ try stdout .print ("}}," , .{});
6174 try stdout .print ("\" cmds\" :[" , .{});
6275 first = true ;
6376 for (res .cmds .items ) | c | {
@@ -87,9 +100,30 @@ fn outputJson(res: parse.ParseResult) !void {
87100 for (res .plugins .items ) | p | {
88101 if (! first ) try stdout .print ("," , .{});
89102 first = false ;
90- try std .json .encodeJsonString (p , .{}, stdout );
103+ try stdout .print ("{{" , .{});
104+ try stdout .print ("\" path\" :" , .{});
105+ try std .json .encodeJsonString (p .path , .{}, stdout );
106+ try stdout .print (",\" super\" :{}" , .{p .is_super });
107+ try stdout .print ("}}" , .{});
91108 }
92109 try stdout .print ("]," , .{});
110+ try stdout .print ("\" functions\" :{{" , .{});
111+ first = true ;
112+ var func_it = res .functions .iterator ();
113+ while (func_it .next ()) | entry | {
114+ if (! first ) try stdout .print ("," , .{});
115+ first = false ;
116+ try std .json .encodeJsonString (entry .key_ptr .* , .{}, stdout );
117+ try stdout .print (":[" , .{});
118+ var first2 = true ;
119+ for (entry .value_ptr .items ) | c | {
120+ if (! first2 ) try stdout .print ("," , .{});
121+ first2 = false ;
122+ try std .json .encodeJsonString (c , .{}, stdout );
123+ }
124+ try stdout .print ("]" , .{});
125+ }
126+ try stdout .print ("}}," , .{});
93127 try stdout .print ("\" errors\" :[" , .{});
94128 first = true ;
95129 for (res .errors .items ) | e | {
0 commit comments