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
« 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
7"""AI: Factory for building tree-sitter AST patterns from text."""
9from collections.abc import Sequence
11from renaissance.integrations.tree_sitter.adapter import TreeSitterAdapter
12from renaissance.integrations.tree_sitter.lst import LSTNode
13from renaissance.utils.ast_utils import replace_dollar
16class TreeSitterPatternFactory:
17 """AI: Factory for building tree-sitter AST patterns from text."""
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
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
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
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]
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]