1use tree_sitter::Parser;
2use tsift_graph::lang::Lang;
3
4fn dump(lang_name: &str, lang: Lang, source: &str, _depth: usize) {
5 let mut parser = Parser::new();
6 parser.set_language(&lang.tree_sitter_language()).unwrap();
7 let tree = parser.parse(source.as_bytes(), None).unwrap();
8 println!("=== {} ===", lang_name);
9 println!("Source:\n{}\n", source);
10 fn walk(node: tree_sitter::Node, source: &str, indent: usize) {
11 let text = &source[node.byte_range()];
12 let short = if text.len() > 60 { &text[..60] } else { text };
13 let short = short.replace('\n', "\\n");
14 println!(
15 "{}{} [{}-{}] {:?}",
16 " ".repeat(indent),
17 node.kind(),
18 node.start_position().row,
19 node.end_position().row,
20 short
21 );
22 let mut cursor = node.walk();
23 if cursor.goto_first_child() {
24 loop {
25 walk(cursor.node(), source, indent + 1);
26 if !cursor.goto_next_sibling() {
27 break;
28 }
29 }
30 }
31 }
32 walk(tree.root_node(), source, 0);
33 println!();
34}
35
36fn main() {
37 #[cfg(feature = "lang-zig")]
38 dump(
39 "Zig",
40 Lang::Zig,
41 r#"
42const std = @import("std");
43pub fn main() !void {}
44const Point = struct { x: i32, y: i32 };
45const Color = enum { red, green, blue };
46const Result = union(enum) { ok: i32, err: []const u8 };
47"#
48 .trim(),
49 4,
50 );
51
52 #[cfg(feature = "lang-bash")]
53 dump(
54 "Bash",
55 Lang::Bash,
56 r#"
57#!/bin/bash
58hello() { echo hi; }
59function world { echo world; }
60alias ll='ls -la'
61alias grep='grep --color=auto'
62"#
63 .trim(),
64 4,
65 );
66
67 #[cfg(feature = "lang-gdscript")]
68 dump(
69 "GDScript",
70 Lang::GdScript,
71 "class_name Player\nextends CharacterBody2D\n\nsignal died(cause)\nenum State { IDLE, RUNNING }\nconst SPEED = 300.0\n@export var health := 100\n\nfunc _ready():\n\tset_physics_process(true)\n\t$Sprite2D.play(\"walk\")\n",
72 4,
73 );
74
75 #[cfg(feature = "lang-markdown")]
76 dump(
77 "Markdown",
78 Lang::Markdown,
79 r#"
80# Title
81
82## Section
83
84```rust
85fn main() {}
86```
87
88```python
89def hello():
90 pass
91```
92
93### Subsection
94"#
95 .trim(),
96 4,
97 );
98}