Skip to content
Snippets Groups Projects

Improved Source File and Code Structure Modelling

Merged Frederik Hennig requested to merge fhennig/source-files into master
Viewing commit 3be468c2
Prev
Show latest version
4 files
+ 40
18
Preferences
Compare changes
Files
4
from __future__ import annotations
from __future__ import annotations
from functools import reduce
from ..lang import HeaderFile, includes
from ..lang import HeaderFile, includes
from .syntax import (
from .syntax import (
SfgSourceFile,
SfgSourceFile,
@@ -35,9 +33,7 @@ def collect_includes(file: SfgSourceFile) -> set[HeaderFile]:
@@ -35,9 +33,7 @@ def collect_includes(file: SfgSourceFile) -> set[HeaderFile]:
| SfgMethod(_, _, parameters)
| SfgMethod(_, _, parameters)
| SfgConstructor(_, parameters, _, _)
| SfgConstructor(_, parameters, _, _)
):
):
incls: set[HeaderFile] = reduce(
incls: set[HeaderFile] = set().union(*(includes(p) for p in parameters))
lambda accu, p: accu | includes(p), parameters, set()
)
if isinstance(entity, (SfgFunction, SfgMethod)):
if isinstance(entity, (SfgFunction, SfgMethod)):
incls |= includes(entity.return_type)
incls |= includes(entity.return_type)
return incls
return incls
@@ -61,10 +57,8 @@ def collect_includes(file: SfgSourceFile) -> set[HeaderFile]:
@@ -61,10 +57,8 @@ def collect_includes(file: SfgSourceFile) -> set[HeaderFile]:
return set()
return set()
case SfgCallTreeNode():
case SfgCallTreeNode():
return reduce(
return obj.required_includes.union(
lambda accu, child: accu | walk_syntax(child),
*(walk_syntax(child) for child in obj.children),
obj.children,
obj.required_includes,
)
)
case SfgEntityDecl(entity):
case SfgEntityDecl(entity):
@@ -92,16 +86,12 @@ def collect_includes(file: SfgSourceFile) -> set[HeaderFile]:
@@ -92,16 +86,12 @@ def collect_includes(file: SfgSourceFile) -> set[HeaderFile]:
assert False, "unexpected entity"
assert False, "unexpected entity"
case SfgNamespaceBlock(_, elements) | SfgVisibilityBlock(_, elements):
case SfgNamespaceBlock(_, elements) | SfgVisibilityBlock(_, elements):
return reduce(
return set().union(*(walk_syntax(elem) for elem in elements)) # type: ignore
lambda accu, elem: accu | walk_syntax(elem), elements, set()
) # type: ignore
case SfgClassBody(_, vblocks):
case SfgClassBody(_, vblocks):
return reduce(
return set().union(*(walk_syntax(vb) for vb in vblocks))
lambda accu, vblock: accu | walk_syntax(vblock), vblocks, set()
)
case _:
case _:
assert False, "unexpected syntax element"
assert False, "unexpected syntax element"
return reduce(lambda accu, elem: accu | walk_syntax(elem), file.elements, set())
return set().union(*(walk_syntax(elem) for elem in file.elements))