Coverage for src / renaissance / integrations / tree_sitter / visualizer.py: 100%

24 statements  

« prev     ^ index     » next       coverage.py v7.13.4, created at 2026-09-09 14:04 +0000

1from renaissance.integrations.tree_sitter.lst import LST 

2from renaissance.utils.text_utils import signature2id 

3 

4 

5class LstVisualizer: 

6 def __init__(self): 

7 self.lines = ["graph TD"] 

8 self.counter = 0 

9 self.node_ids = {} 

10 

11 def _get_node_id(self, node): 

12 if node not in self.node_ids: 

13 self.counter += 1 

14 self.node_ids[node] = f"n{self.counter}" 

15 return self.node_ids[node] 

16 

17 def _render_node(self, node): 

18 node_id = self._get_node_id(node) 

19 label = f"""\ 

20 {node_id}: {node.ast_type.__name__} {{ 

21 offset: {node.offset} 

22 signature: {signature2id(node.signature)} 

23 }}""" 

24 label = label.replace("\n", "<br>") 

25 self.lines.append(f'{node_id}["{label}"]') 

26 for child in node.children: 

27 self._render_node(child) 

28 child_id = self._get_node_id(child) 

29 self.lines.append(f"{node_id} --> {child_id}") 

30 

31 def render(self, lst: LST): 

32 self._render_node(lst.root) 

33 return "\n".join(self.lines)