MCPcopy Create free account
hub / github.com/Snapchat/Valdi / _diff_interfaces

Function _diff_interfaces

tools/api_surface/check_api_surface.py:66–116  ·  view source on GitHub ↗

Compare interface definitions. Returns (warnings, errors).

(baseline: dict, current: dict)

Source from the content-addressed store, hash-verified

64
65
66def _diff_interfaces(baseline: dict, current: dict):
67 """Compare interface definitions. Returns (warnings, errors)."""
68 warnings = []
69 errors = []
70
71 baseline_names = set(baseline.keys())
72 current_names = set(current.keys())
73
74 for name in sorted(baseline_names - current_names):
75 errors.append(f"Removed interface '{name}'")
76
77 for name in sorted(current_names - baseline_names):
78 prop_count = len(current[name].get("properties", {}))
79 warnings.append(f"Added interface '{name}' ({prop_count} properties)")
80
81 for name in sorted(baseline_names & current_names):
82 b_iface = baseline[name]
83 c_iface = current[name]
84
85 # Check extends chain changes
86 b_ext = b_iface.get("extends", [])
87 c_ext = c_iface.get("extends", [])
88 removed_ext = set(b_ext) - set(c_ext)
89 added_ext = set(c_ext) - set(b_ext)
90 for ext in sorted(removed_ext):
91 errors.append(f"'{name}' no longer extends '{ext}'")
92 for ext in sorted(added_ext):
93 warnings.append(f"'{name}' now extends '{ext}'")
94
95 # Check properties
96 b_props = b_iface.get("properties", {})
97 c_props = c_iface.get("properties", {})
98
99 b_keys = set(b_props.keys())
100 c_keys = set(c_props.keys())
101
102 for prop in sorted(b_keys - c_keys):
103 errors.append(f"Removed '{name}.{prop}' (was: {b_props[prop]})")
104
105 for prop in sorted(c_keys - b_keys):
106 warnings.append(f"Added '{name}.{prop}': {c_props[prop]}")
107
108 for prop in sorted(b_keys & c_keys):
109 if b_props[prop] != c_props[prop]:
110 warnings.append(
111 f"Changed '{name}.{prop}':\n"
112 f" baseline: {b_props[prop]}\n"
113 f" current: {c_props[prop]}"
114 )
115
116 return warnings, errors
117
118
119def _diff_classes(baseline: dict, current: dict):

Callers 1

checkFunction · 0.85

Calls 4

keysMethod · 0.65
appendMethod · 0.65
getMethod · 0.65
setFunction · 0.50

Tested by

no test coverage detected