From 2852d86a2f27739e09dd1a6e642ec59710a9af21 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Fri, 6 Mar 2026 11:18:11 -1000 Subject: [PATCH] Address review: robust regex and comment accuracy - Fix extract_packed_value regex to handle commas in entity names by matching C++ string literals instead of [^,]+ - Only describe dc/uom/icon in comments when their index is actually non-zero, so comment matches what was packed --- esphome/core/entity_helpers.py | 6 +++--- tests/component_tests/helpers.py | 6 +++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/esphome/core/entity_helpers.py b/esphome/core/entity_helpers.py index a3d6a3b2fe7..f9eea8a4680 100644 --- a/esphome/core/entity_helpers.py +++ b/esphome/core/entity_helpers.py @@ -250,11 +250,11 @@ def _describe_packed_flags(config: ConfigType, entity_category: int) -> str: cat_name := entity_cat_keys[entity_category] ): parts.append(f"category:{cat_name}") - if dc := config.get(CONF_DEVICE_CLASS): + if config.get(_KEY_DC_IDX, 0) and (dc := config.get(CONF_DEVICE_CLASS)): parts.append(f"dc:{_sanitize_comment(dc)}") - if uom := config.get(CONF_UNIT_OF_MEASUREMENT): + if config.get(_KEY_UOM_IDX, 0) and (uom := config.get(CONF_UNIT_OF_MEASUREMENT)): parts.append(f"uom:{_sanitize_comment(uom)}") - if icon := config.get(CONF_ICON): + if config.get(_KEY_ICON_IDX, 0) and (icon := config.get(CONF_ICON)): parts.append(f"icon:{_sanitize_comment(icon)}") return ", ".join(parts) diff --git a/tests/component_tests/helpers.py b/tests/component_tests/helpers.py index e9fbb331732..568d1639d0c 100644 --- a/tests/component_tests/helpers.py +++ b/tests/component_tests/helpers.py @@ -9,7 +9,11 @@ INTERNAL_BIT = 1 << 24 def extract_packed_value(main_cpp: str, var_name: str) -> int: """Extract the third (packed) argument from a configure_entity_ call.""" - pattern = rf"{re.escape(var_name)}->configure_entity_\([^,]+,\s*\w+,\s*(\d+)\)" + pattern = ( + rf"{re.escape(var_name)}->configure_entity_\(" + r'"(?:\\.|[^"\\])*"' + r",\s*\w+,\s*(\d+)\)" + ) match = re.search(pattern, main_cpp) assert match, f"configure_entity_ call not found for {var_name}" return int(match.group(1))