Skip to content

Commit d2ebe00

Browse files
author
Paolo Tranquilli
committed
Codegen: move group to parametrized pragmas
1 parent 2533f18 commit d2ebe00

File tree

7 files changed

+28
-28
lines changed

7 files changed

+28
-28
lines changed

misc/codegen/lib/schema.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ class Class:
9191
bases: List[str] = field(default_factory=list)
9292
derived: Set[str] = field(default_factory=set)
9393
properties: List[Property] = field(default_factory=list)
94-
group: str = ""
9594
pragmas: List[str] | Dict[str, object] = field(default_factory=dict)
9695
doc: List[str] = field(default_factory=list)
9796

@@ -125,6 +124,10 @@ def synth(self) -> SynthInfo | bool | None:
125124
def mark_synth(self):
126125
self.pragmas.setdefault("synth", True)
127126

127+
@property
128+
def group(self) -> str:
129+
return typing.cast(str, self.pragmas.get("group", ""))
130+
128131

129132
@dataclass
130133
class Schema:

misc/codegen/lib/schemadefs.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,7 @@ def f(cls: type) -> type:
250250

251251
rust.add(_ParametrizedClassPragma("doc_test_signature", factory=lambda signature: signature))
252252

253-
254-
def group(name: str = "") -> _ClassDecorator:
255-
return _annotate(group=name)
253+
group = _ParametrizedClassPragma("group", inherited=True, factory=lambda group: group)
256254

257255

258256
synth.add(_ParametrizedClassPragma("from_class", factory=lambda ref: _schema.SynthInfo(

misc/codegen/loaders/schemaloader.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ def _get_class(cls: type) -> schema.Class:
3737
if cls.__name__ != to_underscore_and_back:
3838
raise schema.Error(f"Class name must be upper camel-case, without capitalized acronyms, found {cls.__name__} "
3939
f"instead of {to_underscore_and_back}")
40-
if len({b._group for b in cls.__bases__ if hasattr(b, "_group")}) > 1:
40+
if len({g for g in (getattr(b, f"{schema.inheritable_pragma_prefix}group", None)
41+
for b in cls.__bases__) if g}) > 1:
4142
raise schema.Error(f"Bases with mixed groups for {cls.__name__}")
4243
if any(getattr(b, "_null", False) for b in cls.__bases__):
4344
raise schema.Error(f"Null class cannot be derived")
@@ -50,8 +51,6 @@ def _get_class(cls: type) -> schema.Class:
5051
return schema.Class(name=cls.__name__,
5152
bases=[b.__name__ for b in cls.__bases__ if b is not object],
5253
derived={d.__name__ for d in cls.__subclasses__()},
53-
# getattr to inherit from bases
54-
group=getattr(cls, "_group", ""),
5554
pragmas=pragmas,
5655
# in the following we don't use `getattr` to avoid inheriting
5756
properties=[

misc/codegen/test/test_cppgen.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,10 @@ def test_classes_with_dirs(generate_grouped):
156156
cbase = cpp.Class(name="CBase")
157157
assert generate_grouped([
158158
schema.Class(name="A"),
159-
schema.Class(name="B", group="foo"),
160-
schema.Class(name="CBase", derived={"C"}, group="bar"),
161-
schema.Class(name="C", bases=["CBase"], group="bar"),
162-
schema.Class(name="D", group="foo/bar/baz"),
159+
schema.Class(name="B", pragmas={"group": "foo"}),
160+
schema.Class(name="CBase", derived={"C"}, pragmas={"group": "bar"}),
161+
schema.Class(name="C", bases=["CBase"], pragmas={"group": "bar"}),
162+
schema.Class(name="D", pragmas={"group": "foo/bar/baz"}),
163163
]) == {
164164
".": [cpp.Class(name="A", trap_name="As", final=True)],
165165
"foo": [cpp.Class(name="B", trap_name="Bs", final=True)],

misc/codegen/test/test_dbschemegen.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def test_includes(input, opts, generate):
5656

5757
def test_empty_final_class(generate, dir_param):
5858
assert generate([
59-
schema.Class("Object", group=dir_param.input),
59+
schema.Class("Object", pragmas={"group": dir_param.input}),
6060
]) == dbscheme.Scheme(
6161
src=schema_file.name,
6262
includes=[],
@@ -74,7 +74,7 @@ def test_empty_final_class(generate, dir_param):
7474

7575
def test_final_class_with_single_scalar_field(generate, dir_param):
7676
assert generate([
77-
schema.Class("Object", group=dir_param.input, properties=[
77+
schema.Class("Object", pragmas={"group": dir_param.input}, properties=[
7878
schema.SingleProperty("foo", "bar"),
7979
]),
8080
]) == dbscheme.Scheme(
@@ -94,7 +94,7 @@ def test_final_class_with_single_scalar_field(generate, dir_param):
9494

9595
def test_final_class_with_single_class_field(generate, dir_param):
9696
assert generate([
97-
schema.Class("Object", group=dir_param.input, properties=[
97+
schema.Class("Object", pragmas={"group": dir_param.input}, properties=[
9898
schema.SingleProperty("foo", "Bar"),
9999
]),
100100
]) == dbscheme.Scheme(
@@ -114,7 +114,7 @@ def test_final_class_with_single_class_field(generate, dir_param):
114114

115115
def test_final_class_with_optional_field(generate, dir_param):
116116
assert generate([
117-
schema.Class("Object", group=dir_param.input, properties=[
117+
schema.Class("Object", pragmas={"group": dir_param.input}, properties=[
118118
schema.OptionalProperty("foo", "bar"),
119119
]),
120120
]) == dbscheme.Scheme(
@@ -142,7 +142,7 @@ def test_final_class_with_optional_field(generate, dir_param):
142142
@pytest.mark.parametrize("property_cls", [schema.RepeatedProperty, schema.RepeatedOptionalProperty])
143143
def test_final_class_with_repeated_field(generate, property_cls, dir_param):
144144
assert generate([
145-
schema.Class("Object", group=dir_param.input, properties=[
145+
schema.Class("Object", pragmas={"group": dir_param.input}, properties=[
146146
property_cls("foo", "bar"),
147147
]),
148148
]) == dbscheme.Scheme(
@@ -170,7 +170,7 @@ def test_final_class_with_repeated_field(generate, property_cls, dir_param):
170170

171171
def test_final_class_with_repeated_unordered_field(generate, dir_param):
172172
assert generate([
173-
schema.Class("Object", group=dir_param.input, properties=[
173+
schema.Class("Object", pragmas={"group": dir_param.input}, properties=[
174174
schema.RepeatedUnorderedProperty("foo", "bar"),
175175
]),
176176
]) == dbscheme.Scheme(
@@ -196,7 +196,7 @@ def test_final_class_with_repeated_unordered_field(generate, dir_param):
196196

197197
def test_final_class_with_predicate_field(generate, dir_param):
198198
assert generate([
199-
schema.Class("Object", group=dir_param.input, properties=[
199+
schema.Class("Object", pragmas={"group": dir_param.input}, properties=[
200200
schema.PredicateProperty("foo"),
201201
]),
202202
]) == dbscheme.Scheme(
@@ -222,7 +222,7 @@ def test_final_class_with_predicate_field(generate, dir_param):
222222

223223
def test_final_class_with_more_fields(generate, dir_param):
224224
assert generate([
225-
schema.Class("Object", group=dir_param.input, properties=[
225+
schema.Class("Object", pragmas={"group": dir_param.input}, properties=[
226226
schema.SingleProperty("one", "x"),
227227
schema.SingleProperty("two", "y"),
228228
schema.OptionalProperty("three", "z"),
@@ -309,7 +309,7 @@ def test_class_with_derived_and_single_property(generate, dir_param):
309309
schema.Class(
310310
name="Base",
311311
derived={"Left", "Right"},
312-
group=dir_param.input,
312+
pragmas={"group": dir_param.input},
313313
properties=[
314314
schema.SingleProperty("single", "Prop"),
315315
]),
@@ -349,7 +349,7 @@ def test_class_with_derived_and_optional_property(generate, dir_param):
349349
schema.Class(
350350
name="Base",
351351
derived={"Left", "Right"},
352-
group=dir_param.input,
352+
pragmas={"group": dir_param.input},
353353
properties=[
354354
schema.OptionalProperty("opt", "Prop"),
355355
]),
@@ -388,7 +388,7 @@ def test_class_with_derived_and_repeated_property(generate, dir_param):
388388
assert generate([
389389
schema.Class(
390390
name="Base",
391-
group=dir_param.input,
391+
pragmas={"group": dir_param.input},
392392
derived={"Left", "Right"},
393393
properties=[
394394
schema.RepeatedProperty("rep", "Prop"),

misc/codegen/test/test_qlgen.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ def test_class_with_doc(generate_classes):
467467
def test_class_dir(generate_classes):
468468
dir = "another/rel/path"
469469
assert generate_classes([
470-
schema.Class("A", derived={"B"}, group=dir),
470+
schema.Class("A", derived={"B"}, pragmas={"group": dir}),
471471
schema.Class("B", bases=["A"]),
472472
]) == {
473473
f"{dir}/A.qll": (
@@ -489,7 +489,7 @@ def test_root_element_cannot_have_children(generate_classes):
489489
def test_class_dir_imports(generate_import_list):
490490
dir = "another/rel/path"
491491
assert generate_import_list([
492-
schema.Class("A", derived={"B"}, group=dir),
492+
schema.Class("A", derived={"B"}, pragmas={"group": dir}),
493493
schema.Class("B", bases=["A"]),
494494
]) == ql.ImportList([
495495
stub_import_prefix + "B",
@@ -583,7 +583,7 @@ def test_test_source_present(opts, generate_tests):
583583
def test_test_source_present_with_dir(opts, generate_tests):
584584
write(opts.ql_test_output / "foo" / "A" / "test.swift")
585585
assert generate_tests([
586-
schema.Class("A", group="foo"),
586+
schema.Class("A", pragmas={"group": "foo"}),
587587
]) == {
588588
"foo/A/A.ql": a_ql_class_tester(class_name="A"),
589589
}

misc/codegen/test/test_schemaloader.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ class A:
101101
pass
102102

103103
assert data.classes == {
104-
'A': schema.Class('A', group="xxx"),
104+
'A': schema.Class('A', pragmas={"group": "xxx"}),
105105
}
106106

107107

@@ -124,8 +124,8 @@ class D(B, C):
124124
assert data.classes == {
125125
'A': schema.Class('A', derived={'B', 'C'}),
126126
'B': schema.Class('B', bases=['A'], derived={'D'}),
127-
'C': schema.Class('C', bases=['A'], derived={'D'}, group='xxx'),
128-
'D': schema.Class('D', bases=['B', 'C'], group='xxx'),
127+
'C': schema.Class('C', bases=['A'], derived={'D'}, pragmas={"group": "xxx"}),
128+
'D': schema.Class('D', bases=['B', 'C'], pragmas={"group": "xxx"}),
129129
}
130130

131131

0 commit comments

Comments
 (0)