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

20 statements  

« prev     ^ index     » next       coverage.py v7.16.2, created at 2026-10-15 10:34 +0000

1# Copyright (C) 2024-2026 TNO 

2# 

3# Licensed under the terms specified in the LICENSE file in the root directory 

4# of this repository, also available at: 

5# https://github.com/TNO/Renaissance.Py/blob/main/LICENSE 

6 

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

8 

9from collections.abc import Sequence 

10 

11from renaissance.integrations.tree_sitter.adapter import TreeSitterAdapter 

12from renaissance.integrations.tree_sitter.lst import LSTNode 

13from renaissance.utils.ast_utils import replace_dollar 

14 

15 

16class TreeSitterPatternFactory: 

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

18 

19 def __init__(self, adapter: TreeSitterAdapter, language: str = "python") -> None: 

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

21 self.adapter = adapter 

22 self.language = language 

23 

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

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

26 text = replace_dollar(text) 

27 if isinstance(self.adapter, TreeSitterAdapter): 

28 tree = self.adapter.parse_code(text) 

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

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

31 

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

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

34 return self.create(text).children 

35 

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

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

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

39 

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

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

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