Compare interface definitions. Returns (warnings, errors).
(baseline: dict, current: dict)
| 64 | |
| 65 | |
| 66 | def _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 | |
| 119 | def _diff_classes(baseline: dict, current: dict): |