Codegen: move ql.hideable to pragmas

This commit is contained in:
Paolo Tranquilli
2024-09-20 12:24:54 +02:00
parent 8d291ab938
commit 2533f18a6e
6 changed files with 14 additions and 16 deletions

View File

@@ -115,7 +115,7 @@ def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dic
is_unordered=prop.is_unordered,
description=prop.description,
synth=bool(cls.synth) or prop.synth,
type_is_hideable=lookup[prop.type].hideable if prop.type in lookup else False,
type_is_hideable="ql_hideable" in lookup[prop.type].pragmas if prop.type in lookup else False,
internal="ql_internal" in prop.pragmas,
)
if prop.is_single:
@@ -169,7 +169,7 @@ def get_ql_class(cls: schema.Class, lookup: typing.Dict[str, schema.Class]) -> q
properties=properties,
dir=pathlib.Path(cls.group or ""),
doc=cls.doc,
hideable=cls.hideable,
hideable="ql_hideable" in cls.pragmas,
internal="ql_internal" in cls.pragmas,
)

View File

@@ -94,7 +94,6 @@ class Class:
group: str = ""
pragmas: List[str] | Dict[str, object] = field(default_factory=dict)
doc: List[str] = field(default_factory=list)
hideable: bool = False
def __post_init__(self):
if not isinstance(self.pragmas, dict):

View File

@@ -241,7 +241,7 @@ qltest.add(_ClassPragma("uncollapse_hierarchy"))
qltest.add(_ParametrizedClassPragma("test_with", inherited=True, factory=_schema.get_type_name))
ql.add(_ParametrizedClassPragma("default_doc_name", factory=lambda doc: doc))
ql.hideable = _annotate(hideable=True) # inheritable
ql.add(_ClassPragma("hideable", inherited=True))
ql.add(_Pragma("internal"))
cpp.add(_Pragma("skip"))

View File

@@ -52,7 +52,6 @@ def _get_class(cls: type) -> schema.Class:
derived={d.__name__ for d in cls.__subclasses__()},
# getattr to inherit from bases
group=getattr(cls, "_group", ""),
hideable=getattr(cls, "_hideable", False),
pragmas=pragmas,
# in the following we don't use `getattr` to avoid inheriting
properties=[
@@ -110,13 +109,13 @@ def _fill_synth_information(classes: typing.Dict[str, schema.Class]):
def _fill_hideable_information(classes: typing.Dict[str, schema.Class]):
""" Update the class map propagating the `hideable` attribute upwards in the hierarchy """
todo = [cls for cls in classes.values() if cls.hideable]
todo = [cls for cls in classes.values() if "ql_hideable" in cls.pragmas]
while todo:
cls = todo.pop()
for base in cls.bases:
supercls = classes[base]
if not supercls.hideable:
supercls.hideable = True
if "ql_hideable" not in supercls.pragmas:
supercls.pragmas["ql_hideable"] = None
todo.append(supercls)

View File

@@ -986,7 +986,7 @@ def test_synth_property(generate_classes):
def test_hideable_class(generate_classes):
assert generate_classes([
schema.Class("MyObject", hideable=True),
schema.Class("MyObject", pragmas=["ql_hideable"]),
]) == {
"MyObject.qll": (a_ql_class_public(name="MyObject"), a_ql_stub(name="MyObject"), a_ql_class(name="MyObject", final=True, hideable=True, imports=[stub_import_prefix + "MyObject"])),
}
@@ -994,7 +994,7 @@ def test_hideable_class(generate_classes):
def test_hideable_property(generate_classes):
assert generate_classes([
schema.Class("MyObject", hideable=True),
schema.Class("MyObject", pragmas=["ql_hideable"]),
schema.Class("Other", properties=[
schema.SingleProperty("x", "MyObject"),
]),

View File

@@ -726,11 +726,11 @@ def test_hideable():
pass
assert data.classes == {
"Root": schema.Class("Root", derived={"A", "IndirectlyHideable", "NonHideable"}, hideable=True),
"A": schema.Class("A", bases=["Root"], derived={"B"}, hideable=True),
"IndirectlyHideable": schema.Class("IndirectlyHideable", bases=["Root"], derived={"B"}, hideable=True),
"B": schema.Class("B", bases=["A", "IndirectlyHideable"], hideable=True),
"NonHideable": schema.Class("NonHideable", bases=["Root"], hideable=False),
"Root": schema.Class("Root", derived={"A", "IndirectlyHideable", "NonHideable"}, pragmas=["ql_hideable"]),
"A": schema.Class("A", bases=["Root"], derived={"B"}, pragmas=["ql_hideable"]),
"IndirectlyHideable": schema.Class("IndirectlyHideable", bases=["Root"], derived={"B"}, pragmas=["ql_hideable"]),
"B": schema.Class("B", bases=["A", "IndirectlyHideable"], pragmas=["ql_hideable"]),
"NonHideable": schema.Class("NonHideable", bases=["Root"]),
}
@@ -808,7 +808,7 @@ def test_annotate_decorations():
pass
assert data.classes == {
"Root": schema.Class("Root", hideable=True, pragmas=["qltest_skip", "cpp_skip", "qltest_collapse_hierarchy"]),
"Root": schema.Class("Root", pragmas=["qltest_skip", "cpp_skip", "ql_hideable", "qltest_collapse_hierarchy"]),
}