1
0
mirror of https://github.com/esphome/esphome.git synced 2025-09-06 05:12:21 +01:00

[api] Fix missing ifdef guards for AreaInfo and DeviceInfo messages

This commit is contained in:
J. Nick Koston
2025-07-19 22:01:22 -10:00
parent 5b3d61b4a6
commit a5ed8db5bd
4 changed files with 30 additions and 3 deletions

View File

@@ -995,6 +995,11 @@ def build_type_usage_map(
}
# Analyze field usage
# Also track field_ifdef for message types
message_field_ifdefs: dict[
str, set[str | None]
] = {} # message_name -> set of field_ifdefs that use it
for message in file_desc.message_type:
for field in message.field:
type_name = field.type_name.split(".")[-1] if field.type_name else None
@@ -1007,6 +1012,9 @@ def build_type_usage_map(
# Track message usage
elif field.type == 11: # TYPE_MESSAGE
message_usage.setdefault(type_name, set()).add(message.name)
# Also track the field_ifdef if present
field_ifdef = get_field_opt(field, pb.field_ifdef)
message_field_ifdefs.setdefault(type_name, set()).add(field_ifdef)
# Helper to get unique ifdef from a set of messages
def get_unique_ifdef(message_names: set[str]) -> str | None:
@@ -1032,9 +1040,16 @@ def build_type_usage_map(
message_ifdef_map[message.name] = explicit_ifdef
elif message.name in message_usage:
# Inherit ifdef if all parent messages have the same one
message_ifdef_map[message.name] = get_unique_ifdef(
message_usage[message.name]
)
if parent_ifdef := get_unique_ifdef(message_usage[message.name]):
message_ifdef_map[message.name] = parent_ifdef
elif message.name in message_field_ifdefs:
# If no parent message ifdef, check if all fields using this message have the same field_ifdef
field_ifdefs = message_field_ifdefs[message.name] - {None}
message_ifdef_map[message.name] = (
field_ifdefs.pop() if len(field_ifdefs) == 1 else None
)
else:
message_ifdef_map[message.name] = None
else:
message_ifdef_map[message.name] = None