Coverage for lobster/tools/trlc/to_string_rules.py: 100%
22 statements
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-27 13:02 +0000
« prev ^ index » next coverage.py v7.10.5, created at 2025-08-27 13:02 +0000
1from dataclasses import dataclass
2from typing import Dict, Iterable, List
3from trlc import ast
5from lobster.tools.trlc.instruction import Instruction
6from lobster.tools.trlc.text_generation import parse_instructions
9@dataclass
10class ToStringRules:
11 """A set of rules for converting TRLC tuples to strings."""
12 tuple_type_name: str
13 package_name: str
14 rules: List[List[Instruction]]
16 @staticmethod
17 def from_dict(data: dict) -> "ToStringRules":
18 return ToStringRules(
19 tuple_type_name=data["tuple-type"],
20 package_name=data["package"],
21 rules=[parse_instructions(to_string_line)
22 for to_string_line in data.get("to-string", [])],
23 )
26def build_tuple_type_to_ruleset_map(
27 symbol_table: ast.Symbol_Table,
28 to_string_rule_sets: Iterable[ToStringRules],
29) -> Dict[ast.Tuple_Type, ToStringRules]:
30 """Iterates over all tuple types in the symbol table and returns a mapping
31 from tuple types to their corresponding ToStringRules.
32 """
33 result = {}
34 for n_pkg in symbol_table.values(ast.Package):
35 for tuple_type in n_pkg.symbols.values(ast.Tuple_Type):
36 for rule_set in to_string_rule_sets:
37 if (tuple_type.name == rule_set.tuple_type_name) \
38 and (n_pkg.name == rule_set.package_name):
39 result[tuple_type] = rule_set
40 break
41 return result