mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
Codegen: move ql.hideable to pragmas
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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"),
|
||||
]),
|
||||
|
||||
@@ -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"]),
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user