Coverage for src/renaissance/integrations/tree_sitter/factory.py: 95%

20 statements  

« prev     ^ index     » next       coverage.py v7.16.1, created at 2026-10-02 13:12 +0000

1"""AI: Factory for building tree-sitter AST patterns from text.""" 

2 

3from collections.abc import Sequence 

4 

5from renaissance.integrations.tree_sitter.adapter import TreeSitterAdapter 

6from renaissance.integrations.tree_sitter.lst import LSTNode 

7from renaissance.utils.ast_utils import replace_dollar 

8 

9 

10class TreeSitterPatternFactory: 

11 """AI: Factory for building tree-sitter AST patterns from text.""" 

12 

13 def __init__(self, adapter: TreeSitterAdapter, language: str = "python"): 

14 """AI: Prepare a pattern factory for creating tree-sitter AST patterns from text.""" 

15 self.adapter = adapter 

16 self.language = language 

17 

18 def create(self, text: str) -> LSTNode: 

19 """AI: Parse text with tree-sitter and return the root node of the resulting LST.""" 

20 text = replace_dollar(text) 

21 if isinstance(self.adapter, TreeSitterAdapter): 

22 tree = self.adapter.parse_code(text) 

23 return self.adapter.to_lst(text, tree).root 

24 return self.adapter.to_lst(text).root 

25 

26 def create_statements(self, text: str) -> Sequence[LSTNode]: 

27 """AI: Parse text and return its top-level statement nodes.""" 

28 return self.create(text).children 

29 

30 def create_statement(self, text: str) -> LSTNode: 

31 """AI: Parse text and return its last top-level statement node.""" 

32 return self.create_statements(text)[-1] 

33 

34 def create_expression(self, text: str) -> LSTNode: 

35 """AI: Parse text and return the last expression node of its last statement.""" 

36 return self.create_statement(text).children[-1]