Coverage for lobster/tools/trlc/hierarchy_tree.py: 100%
11 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-09-22 04:43 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-09-22 04:43 +0000
1# LOBSTER - Lightweight Open BMW Software Traceability Evidence Report
2# Copyright (C) 2025 Bayerische Motoren Werke Aktiengesellschaft (BMW AG)
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU Affero General Public License as
6# published by the Free Software Foundation, either version 3 of the
7# License, or (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful, but
10# WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12# Affero General Public License for more details.
13#
14# You should have received a copy of the GNU Affero General Public
15# License along with this program. If not, see
16# <https://www.gnu.org/licenses/>.
18from collections import defaultdict
19from typing import Dict, Set
20from trlc import ast
23HierarchyTree = Dict[ast.Record_Type, Set[ast.Record_Type]]
26def build_children_lookup(symbol_table: ast.Symbol_Table) -> HierarchyTree:
27 """Builds a lookup dictionary for child record types of each record type in the
28 symbol table."""
29 lookup = defaultdict(set)
30 for n_pkg in symbol_table.values(ast.Package):
31 for n_typ in n_pkg.symbols.values(ast.Record_Type):
32 if n_typ.parent:
33 lookup[n_typ.parent].add(n_typ)
34 return dict(lookup)