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

1from dataclasses import dataclass 

2from typing import Dict, Iterable, List 

3from trlc import ast 

4 

5from lobster.tools.trlc.instruction import Instruction 

6from lobster.tools.trlc.text_generation import parse_instructions 

7 

8 

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]] 

15 

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 ) 

24 

25 

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