feat: add full supported API details for variants and enhance tests
This commit is contained in:
@@ -58,6 +58,35 @@ def _surface_counts(snap: Snapshot) -> dict[str, int]:
|
||||
return {axis: len(_keys(snap, axis)) for axis in _AXES}
|
||||
|
||||
|
||||
def surface_api(snap: Snapshot) -> dict[str, Any]:
|
||||
"""The full *supported* surface of one variant: every type, and per class the methods, events
|
||||
and fields it exposes. This is the baseline — 'what is there' — so the diff against the
|
||||
reference variant has a point of reference to read against."""
|
||||
classes: dict[str, dict[str, list]] = {}
|
||||
|
||||
def cls(owner: str | None) -> dict[str, list]:
|
||||
return classes.setdefault(owner or "?", {"methods": [], "events": [], "fields": []})
|
||||
|
||||
for m in snap.methods:
|
||||
cls(m.get("owner"))["methods"].append({"name": m["name"], "id": m.get("id")})
|
||||
for e in snap.events:
|
||||
cls(e.get("owner"))["events"].append({"name": e["name"], "order": e.get("order")})
|
||||
for f in snap.fields:
|
||||
cls(f.get("owner"))["fields"].append({"name": f["name"], "type": f.get("type")})
|
||||
|
||||
for d in classes.values():
|
||||
d["methods"].sort(key=lambda x: x["name"])
|
||||
d["events"].sort(key=lambda x: (x["order"] if x["order"] is not None else 1 << 30, x["name"]))
|
||||
d["fields"].sort(key=lambda x: x["name"])
|
||||
|
||||
types = sorted(
|
||||
({"script_name": t["script_name"], "cpp_class": t.get("cpp_class"),
|
||||
"object_size": t.get("object_size")} for t in snap.types),
|
||||
key=lambda x: x["script_name"],
|
||||
)
|
||||
return {"types": types, "classes": dict(sorted(classes.items()))}
|
||||
|
||||
|
||||
def _axis_counts(block: dict[str, Any]) -> dict[str, int]:
|
||||
return {
|
||||
"added": len(block["added"]),
|
||||
@@ -182,6 +211,7 @@ def _build_library(name: str, entries: list[Entry]) -> dict[str, Any]:
|
||||
"id": vid,
|
||||
"reference": is_ref,
|
||||
"surface": _surface_counts(sample),
|
||||
"api": surface_api(sample),
|
||||
"members": members,
|
||||
"vs_reference": None if is_ref else _vs_reference(reference_snap, sample),
|
||||
}
|
||||
@@ -344,10 +374,13 @@ def render_markdown(table: dict[str, Any]) -> str:
|
||||
m["game"], m["engine"] or "?", m["compiler"] or "?", _short(m["sha256"]))
|
||||
for m in v["members"]
|
||||
)
|
||||
class_names = list(v["api"]["classes"])
|
||||
out.append(
|
||||
"- **{0}** ({1}) — typy {2} / metody {3} / eventy {4} / pola {5}".format(
|
||||
v["id"], tag, s["types"], s["methods"], s["events"], s["fields"]))
|
||||
"- **{0}** ({1}) — klasy {2} / typy {3} / metody {4} / eventy {5} / pola {6}".format(
|
||||
v["id"], tag, len(class_names), s["types"], s["methods"], s["events"], s["fields"]))
|
||||
out.append(" - gry: {0}".format(games_str))
|
||||
if class_names:
|
||||
out.append(" - klasy: {0}".format(_signed("", class_names, cap=30)))
|
||||
vs = v["vs_reference"]
|
||||
if vs:
|
||||
ax = vs["axes"]
|
||||
|
||||
Reference in New Issue
Block a user