ESPHome is a system to control your ESP32, ESP8266, BK72xx, RP2040 by simple yet powerful configuration files and control them remotely through Home Automation systems.
This report presents the forensic synthetic code analysis of esphome/esphome, a C++ project with 11,380 GitHub stars. SynthScan v2.0 examined 721,652 lines of code across 7703 source files, recording 5435 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 9.1 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 5435 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit_tests/test_upload_targets.py | 19 | def test_get_port_type_serial(port: str) -> None: | CODE |
| LOW⚡ | tests/unit_tests/test_upload_targets.py | 24 | def test_get_port_type_bootsel() -> None: | CODE |
| LOW⚡ | tests/unit_tests/test_upload_targets.py | 34 | def test_get_port_type_mqttip() -> None: | CODE |
| LOW | tests/unit_tests/test_upload_targets.py | 48 | def test_get_port_type_network(port: str) -> None: | CODE |
| LOW | tests/unit_tests/test_upload_targets.py | 53 | def test_port_type_values_are_stable() -> None: | CODE |
| LOW | tests/unit_tests/test_upload_targets.py | 67 | def test_main_re_exports_for_backwards_compat() -> None: | CODE |
| LOW | tests/unit_tests/test_wizard.py | 44 | def test_sanitize_quotes_replaces_with_escaped_char(): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 58 | def test_config_file_fallback_ap_includes_descriptive_name( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 91 | def test_config_file_should_include_ota(default_config: dict[str, Any]): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 104 | def test_config_file_should_include_ota_when_password_set( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 121 | def test_config_file_should_include_api_encryption_key( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 139 | def test_wizard_write_sets_platform( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 178 | def test_wizard_upload_config(tmp_path: Path, monkeypatch: MonkeyPatch): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 329 | def test_safe_print_step_prints_step_number_and_description(monkeypatch: MonkeyPatch): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 353 | def test_default_input_uses_default_if_no_input_supplied(monkeypatch: MonkeyPatch): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 369 | def test_default_input_uses_user_supplied_value(monkeypatch: MonkeyPatch): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 386 | def test_strip_accents_removes_diacritics(): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 402 | def test_wizard_rejects_path_with_invalid_extension(): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 417 | def test_wizard_rejects_existing_files(tmp_path): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 507 | def test_wizard_offers_better_node_name( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 540 | def test_wizard_requires_correct_platform( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 564 | def test_wizard_requires_correct_board( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 588 | def test_wizard_requires_valid_ssid( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 612 | def test_wizard_write_protects_existing_config( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 633 | def test_wizard_accepts_ota_password( | CODE |
| LOW | tests/unit_tests/test_wizard.py | 660 | def test_wizard_accepts_rpipico_board(tmp_path: Path, monkeypatch: MonkeyPatch): | CODE |
| LOW | tests/unit_tests/test_wizard.py | 691 | def test_fallback_psk_uses_secrets_choice( | CODE |
| LOW⚡ | tests/unit_tests/test_address_cache.py | 13 | def test_normalize_simple_hostname() -> None: | CODE |
| LOW⚡ | tests/unit_tests/test_address_cache.py | 20 | def test_normalize_removes_trailing_dots() -> None: | CODE |
| LOW⚡ | tests/unit_tests/test_address_cache.py | 28 | def test_normalize_converts_to_lowercase() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 102 | def test_get_addresses_auto_detection() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 124 | def test_add_mdns_addresses_stores_and_normalizes() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 137 | def test_add_mdns_addresses_empty_is_noop() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 173 | def test_from_cli_args_single_entry() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 184 | def test_from_cli_args_multiple_ips() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 195 | def test_from_cli_args_multiple_entries() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 215 | def test_from_cli_args_normalization() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 233 | def test_from_cli_args_whitespace_handling() -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 244 | def test_from_cli_args_invalid_format(caplog: LogCaptureFixture) -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 307 | def test_normalize_hostname_parametrized(hostname: str, expected: str) -> None: | CODE |
| LOW | tests/unit_tests/test_address_cache.py | 320 | def test_parse_cache_args_parametrized( | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 56 | def test_idf_component_sanitized_name(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 61 | def test_idf_component_require_name(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 66 | def test_collect_filtered_files_basic(tmp_path): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 375 | def test_node_key_registry_owner_name(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 380 | def test_node_key_registry_bare_name(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 385 | def test_normalize_dependencies_none(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 389 | def test_normalize_dependencies_list_form(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 394 | def test_normalize_dependencies_dict_form(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 400 | def test_normalize_dependencies_dict_form_nested_spec(): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 439 | def test_resolve_registry_version_intersects_constraints(monkeypatch): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 448 | def test_resolve_registry_version_picks_highest_satisfying(monkeypatch): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 454 | def test_resolve_registry_version_conflict_raises(monkeypatch): | CODE |
| LOW⚡ | tests/unit_tests/test_espidf_component.py | 460 | def test_generate_idf_components_dedupes_shared_dependency( | CODE |
| LOW | tests/unit_tests/test_espidf_component.py | 78 | def test_collect_filtered_files_exclude(tmp_path): | CODE |
| LOW | tests/unit_tests/test_espidf_component.py | 89 | def test_split_list_by_condition(): | CODE |
| LOW | tests/unit_tests/test_espidf_component.py | 101 | def test_generate_cmakelists_txt_basic(tmp_component): | CODE |
| LOW | tests/unit_tests/test_espidf_component.py | 115 | def test_generate_cmakelists_txt_with_flags(tmp_component, tmp_path): | CODE |
| LOW | tests/unit_tests/test_espidf_component.py | 262 | def test_extra_script_libpath_absolute_outside_library_dir(tmp_path): | CODE |
| LOW | tests/unit_tests/test_espidf_component.py | 273 | def test_extra_script_failure_returns_empty_result(tmp_path, caplog): | CODE |
| 3192 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ker/ha-addon-rootfs/etc/cont-init.d/30-esphome-fork.sh | 2 | # ============================================================================== | COMMENT |
| MEDIUM | …ker/ha-addon-rootfs/etc/cont-init.d/30-esphome-fork.sh | 7 | # ============================================================================== | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_loader.py | 535 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_loader.py | 537 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_loader.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_loader.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_loader.py | 178 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_loader.py | 182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_loader.py | 342 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_loader.py | 344 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_substitutions.py | 681 | # ── IncludeFile / package loading tests ──────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit_tests/test_config_normalization.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_config_normalization.py | 123 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_web_server_ota.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_web_server_ota.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_web_server_ota.py | 167 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_web_server_ota.py | 169 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 136 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 138 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 190 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 192 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 230 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 232 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 317 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 319 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 463 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 465 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 512 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 514 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 599 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 601 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 1142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 1144 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 1176 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_bundle.py | 1178 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 35 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 99 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 211 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 213 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 1353 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit_tests/test_bundle.py | 1355 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1169 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1171 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1411 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1413 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1454 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1456 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1497 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1499 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1519 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1521 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1550 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1552 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1582 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1584 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_config_validation.py | 1597 | # --------------------------------------------------------------------------- | COMMENT |
| 295 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/components/test_rp2_generate_boards.py | 21 | #define PIN_WIRE1_SCL (27u) | COMMENT |
| LOW | tests/integration/test_status_flags.py | 141 | COMMENT | |
| LOW | tests/components/psram/validate.esp32-idf.yaml | 1 | # Config-only: with no options the single-mode ESP32 resolves mode -> quad and | COMMENT |
| LOW | tests/components/psram/validate.esp32-p4-idf.yaml | 1 | # Config-only: the ESP32-P4 has a distinct value set (hex mode, 20/100/200MHz). | COMMENT |
| LOW | …ts/mitsubishi_cn105/climate/mitsubishi_cn105_tests.cpp | 181 | // ───────────────────────────── | COMMENT |
| LOW | …ts/mitsubishi_cn105/climate/mitsubishi_cn105_tests.cpp | 201 | COMMENT | |
| LOW | tests/components/camera/common.yaml | 1 | # Camera is a base component auto-loaded by esp32_camera | COMMENT |
| LOW | tests/components/packet_transport/common.h | 1 | #pragma once | COMMENT |
| LOW | tests/components/time/is_valid.cpp | 1 | // Regression tests for ESPTime::is_valid() optional checks. | COMMENT |
| LOW | tests/components/time/posix_tz_parser.cpp | 1 | // Tests for the POSIX TZ parser, time conversion functions, and ESPTime::strptime. | COMMENT |
| LOW | tests/components/modbus/heap_probe_test.cpp | 1 | #include <gtest/gtest.h> | COMMENT |
| LOW | tests/benchmarks/core/bench_scheduler.cpp | 1 | #include <benchmark/benchmark.h> | COMMENT |
| LOW | tests/benchmarks/components/api/bench_helpers.h | 1 | #pragma once | COMMENT |
| LOW | …uild_components/common/uart_bridge_2/esp32-s3-idf.yaml | 1 | # Common configuration for 2-channel UART bridge/expander chips | COMMENT |
| LOW | …t_build_components/common/uart_bridge_2/esp32-idf.yaml | 1 | # Common configuration for 2-channel UART bridge/expander chips | COMMENT |
| LOW | …uild_components/common/uart_bridge_4/esp32-s3-idf.yaml | 1 | # Common configuration for 4-channel UART bridge/expander chips | COMMENT |
| LOW | …t_build_components/common/uart_bridge_4/esp32-idf.yaml | 1 | # Common configuration for 4-channel UART bridge/expander chips | COMMENT |
| LOW | script/build_language_schema.py | 1141 | else: | COMMENT |
| LOW | script/build_language_schema.py | 1181 | COMMENT | |
| LOW | script/merge_component_configs.py | 161 | return data | COMMENT |
| LOW | script/determine-jobs.py | 701 | benchmarked_components = { | COMMENT |
| LOW | script/list-components.py | 61 | # When --changed* is passed, only get the changed files | COMMENT |
| LOW | script/split_components_for_ci.py | 101 | COMMENT | |
| LOW | script/split_components_for_ci.py | 161 | # Components with the same signature stay in the same batches | COMMENT |
| LOW | .github/workflows/sync-device-classes.yml | 61 | uv pip install --system -r requirements.txt -r requirements_test.txt pre-commit | COMMENT |
| LOW | .github/workflows/codeql.yml | 1 | # For most projects, this workflow file will not need changing; you simply need | COMMENT |
| LOW | .github/workflows/codeql.yml | 41 | # - language: c-cpp | COMMENT |
| LOW | .github/workflows/codeql.yml | 61 | languages: ${{ matrix.language }} | COMMENT |
| LOW | .github/workflows/ci.yml | 181 | # reuse; dev pushes seed the shared copy instead. | COMMENT |
| LOW | .github/workflows/ci.yml | 1401 | steps: | COMMENT |
| LOW | esphome/yaml_util.py | 561 | # We found some merge keys along the way, merge them into base pairs | COMMENT |
| LOW | esphome/coroutine.py | 81 | # Examples: async_tcp (200) | COMMENT |
| LOW | esphome/coroutine.py | 121 | WEB_SERVER_OTA = 52 | COMMENT |
| LOW | esphome/loader.py | 321 | # imports and resolves them against the canonical component so external | COMMENT |
| LOW | esphome/__main__.py | 1481 | # Legacy substring redaction fallback for unmigrated schemas; removed in | COMMENT |
| LOW | esphome/core/time.h | 1 | #pragma once | COMMENT |
| LOW | esphome/core/helpers.cpp | 1 | #include "esphome/core/helpers.h" | COMMENT |
| LOW | esphome/core/progmem.h | 1 | #pragma once | COMMENT |
| LOW | esphome/core/progmem.h | 21 | #define ESPHOME_snprintf_P snprintf_P | COMMENT |
| LOW | esphome/core/progmem.h | 41 | #define ESPHOME_PSTR(s) (s) | COMMENT |
| LOW | esphome/core/version.h | 1 | #pragma once | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 1 | // Fast socket monitoring for ESP32 and LibreTiny (LwIP >= 2.1.3) | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 21 | // - event_callback (static, same for all sockets): L327 | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 41 | // lwip_close() -> lwip_close_internal() -> free_socket_free_elements() -> free_socket() | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 61 | // - lwip_close_internal (only caller of free_socket_free_elements): L2355 | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 81 | // sock->conn->callback (netconn_callback, 4-byte function pointer): | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 101 | // FreeRTOS task notification value: | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 121 | #include <FreeRTOS.h> | COMMENT |
| LOW | esphome/core/lwip_fast_select.c | 181 | // Wake the main loop task if sleeping in ulTaskNotifyTake(). | COMMENT |
| LOW | esphome/core/config.py | 501 | #undef delay | COMMENT |
| LOW | esphome/core/event_pool.h | 1 | #pragma once | COMMENT |
| LOW | esphome/core/entity_base.h | 1 | #pragma once | COMMENT |
| LOW | esphome/core/entity_base.h | 261 | uint8_t reserved : 2; // Reserved for future use | COMMENT |
| LOW | esphome/core/hal.h | 1 | #pragma once | COMMENT |
| LOW | esphome/core/hal.h | 21 | #include "esphome/components/libretiny/hal.h" | COMMENT |
| LOW | esphome/core/application.h | 1 | #pragma once | COMMENT |
| LOW | esphome/core/application.h | 21 | #include "esphome/core/string_ref.h" | COMMENT |
| LOW | esphome/core/application.h | 101 | void register_device(Device *device) { this->devices_.push_back(device); } | COMMENT |
| LOW | esphome/core/application.h | 221 | COMMENT | |
| LOW | esphome/core/application.h | 241 | // Auto-scale to 1/5 of the configured ESP32 task WDT timeout so the safety | COMMENT |
| 807 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/test_address_cache.py | 3 | CODE | |
| LOW | tests/unit_tests/test_compiled_config.py | 3 | CODE | |
| LOW | tests/unit_tests/test_dashboard_import.py | 10 | CODE | |
| LOW | tests/unit_tests/test_size_summary.py | 3 | CODE | |
| LOW | tests/unit_tests/test_mqtt.py | 3 | CODE | |
| LOW | tests/unit_tests/test_espota2.py | 3 | CODE | |
| LOW | tests/unit_tests/test_util.py | 3 | CODE | |
| LOW | tests/unit_tests/test_web_server_ota.py | 3 | CODE | |
| LOW | tests/unit_tests/test_bundle.py | 3 | CODE | |
| LOW | tests/unit_tests/test_zeroconf.py | 11 | CODE | |
| LOW | tests/unit_tests/test_main.py | 3 | CODE | |
| LOW | tests/unit_tests/test_resolver.py | 3 | CODE | |
| LOW | tests/unit_tests/components/test_rp2_generate_boards.py | 3 | CODE | |
| LOW | tests/unit_tests/components/api/test_client.py | 3 | CODE | |
| LOW | tests/unit_tests/build_gen/test_platformio.py | 3 | CODE | |
| LOW | tests/unit_tests/build_gen/test_espidf.py | 3 | CODE | |
| LOW | tests/integration/test_large_message_batching.py | 3 | CODE | |
| LOW | tests/integration/test_host_mode_many_entities.py | 3 | CODE | |
| LOW | tests/integration/test_wait_until_ordering.py | 10 | CODE | |
| LOW | tests/integration/test_select_stringref_trigger.py | 3 | CODE | |
| LOW | …sts/integration/test_binary_sensor_invalidate_state.py | 10 | CODE | |
| LOW | tests/integration/test_gpio_expander_cache.py | 3 | CODE | |
| LOW | tests/integration/test_text_command.py | 8 | CODE | |
| LOW | tests/integration/test_api_action_responses.py | 6 | CODE | |
| LOW | tests/integration/test_host_mode_basic.py | 3 | CODE | |
| LOW | tests/integration/test_script_array_params.py | 10 | CODE | |
| LOW | …ts/integration/test_logger_buffered_recursion_guard.py | 24 | CODE | |
| LOW | tests/integration/test_addressable_light_transition.py | 19 | CODE | |
| LOW | tests/integration/test_uart_mock_modbus.py | 14 | CODE | |
| LOW | tests/integration/conftest.py | 3 | CODE | |
| LOW | tests/integration/host_prefs.py | 12 | CODE | |
| LOW | tests/integration/test_runtime_stats.py | 3 | CODE | |
| LOW | tests/integration/test_script_queued.py | 3 | CODE | |
| LOW | tests/integration/test_object_id_no_friendly_name.py | 16 | CODE | |
| LOW | tests/integration/test_legacy_fan_compat.py | 10 | CODE | |
| LOW | …sts/integration/test_host_mode_empty_string_options.py | 3 | CODE | |
| LOW | tests/integration/test_scheduler_blocking_warning.py | 9 | CODE | |
| LOW | …egration/test_object_id_friendly_name_no_mac_suffix.py | 10 | CODE | |
| LOW | tests/integration/test_api_custom_services.py | 3 | CODE | |
| LOW | tests/integration/test_syslog.py | 3 | CODE | |
| LOW | tests/integration/test_water_heater_template.py | 3 | CODE | |
| LOW | tests/integration/test_host_logger_thread_safety.py | 7 | CODE | |
| LOW | tests/integration/test_oversized_payloads.py | 3 | CODE | |
| LOW | tests/integration/test_loop_interval_decoupling.py | 17 | CODE | |
| LOW | tests/integration/test_uart_mock_ld2412.py | 25 | CODE | |
| LOW | tests/integration/test_build_info.py | 3 | CODE | |
| LOW | tests/integration/test_climate_control_action.py | 8 | CODE | |
| LOW | tests/integration/test_legacy_area.py | 3 | CODE | |
| LOW | tests/integration/test_host_mode_entity_fields.py | 3 | CODE | |
| LOW | tests/integration/test_varint_five_byte_device_id.py | 10 | CODE | |
| LOW | tests/integration/test_safe_mode_loop_runs.py | 24 | CODE | |
| LOW | tests/integration/test_valve_control_action.py | 7 | CODE | |
| LOW | tests/integration/test_cover_control_action.py | 8 | CODE | |
| LOW | tests/integration/test_legacy_climate_compat.py | 11 | CODE | |
| LOW | tests/integration/test_host_mode_reconnect.py | 3 | CODE | |
| LOW | tests/integration/test_scheduler_pool.py | 3 | CODE | |
| LOW | tests/integration/test_api_message_size_batching.py | 3 | CODE | |
| LOW | tests/integration/test_crc8_helper.py | 3 | CODE | |
| LOW | tests/integration/test_object_id_api_verification.py | 24 | CODE | |
| LOW | tests/integration/test_api_homeassistant.py | 11 | CODE | |
| 273 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/unit_tests/test_loader.py | 122 | # Create a mock module with FILTER_SOURCE_FILES function | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 850 | # Create a real file with markers | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 940 | # Create a file with begin marker but no end marker | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 962 | # Create a file with duplicate begin markers | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 1095 | # Create an absolute custom build path directory with contents | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 1193 | # Create a file in cwd that must NOT be cleaned | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 1558 | # Create a read-only file (simulating git pack files on Windows) | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 1592 | # Create a subdirectory with read-only files | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 2237 | # Create a source file | COMMENT |
| MEDIUM | tests/unit_tests/test_writer.py | 2358 | # Create an existing source file in the build tree | COMMENT |
| MEDIUM | tests/unit_tests/test_substitutions.py | 207 | # Create an OrderedDict config with substitutions | COMMENT |
| MEDIUM | tests/unit_tests/test_substitutions.py | 297 | # Create a minimal valid config | COMMENT |
| MEDIUM | tests/unit_tests/test_substitutions.py | 327 | # Create a minimal valid config | COMMENT |
| MEDIUM | tests/unit_tests/test_espota2.py | 538 | # Create a real firmware file | COMMENT |
| MEDIUM | tests/unit_tests/test_espota2.py | 571 | # Create a real firmware file | COMMENT |
| MEDIUM | tests/unit_tests/test_espota2.py | 586 | # Create a real firmware file | COMMENT |
| MEDIUM | tests/unit_tests/test_git.py | 59 | # Create a simple git repo to test with | COMMENT |
| MEDIUM | tests/unit_tests/test_git.py | 216 | # Create the git repo directory structure | COMMENT |
| MEDIUM | tests/unit_tests/test_git.py | 280 | # Create the git repo directory structure | COMMENT |
| MEDIUM | tests/unit_tests/test_git.py | 328 | # Create the git repo directory structure | COMMENT |
| MEDIUM | tests/unit_tests/test_git.py | 404 | # Create the git repo directory structure | COMMENT |
| MEDIUM | tests/unit_tests/test_git.py | 289 | fetch_head.touch() # Create the file | CODE |
| MEDIUM | tests/unit_tests/test_git.py | 337 | fetch_head.touch() # Create the file | CODE |
| MEDIUM | tests/unit_tests/test_git.py | 413 | fetch_head.touch() # Create the file | CODE |
| MEDIUM | tests/unit_tests/test_util.py | 587 | # Create the expected directory structure | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_yaml_util.py | 135 | # Create an empty secrets file | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_yaml_util.py | 145 | # Create a YAML file with a secret but no secrets.yaml | COMMENT |
| MEDIUM | tests/unit_tests/test_yaml_util.py | 123 | # Create a YAML file with a secret that doesn't exist | COMMENT |
| MEDIUM | tests/unit_tests/test_yaml_util.py | 166 | # Create a subdirectory with a YAML file that uses secrets | COMMENT |
| MEDIUM | tests/unit_tests/test_yaml_util.py | 324 | # Create a dict with unsorted keys | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_helpers.py | 733 | # Create a file | COMMENT |
| MEDIUM⚡ | tests/unit_tests/test_helpers.py | 744 | # Create a file where we want to create a directory | COMMENT |
| MEDIUM | tests/unit_tests/test_helpers.py | 838 | # Create a directory and make it read-only | COMMENT |
| MEDIUM | tests/unit_tests/test_main.py | 1532 | # Create the actual firmware files so they exist | COMMENT |
| MEDIUM | tests/unit_tests/test_main.py | 1634 | # Create a test firmware file | COMMENT |
| MEDIUM | tests/unit_tests/test_main.py | 4728 | # Create a mock OSError with a specific message | COMMENT |
| MEDIUM | tests/unit_tests/test_main.py | 4756 | # Create a mock OSError without a message | COMMENT |
| MEDIUM | tests/unit_tests/test_config_helpers.py | 35 | # Create the filter function | COMMENT |
| MEDIUM | tests/unit_tests/test_config_helpers.py | 74 | # Create the filter function | COMMENT |
| MEDIUM | tests/unit_tests/test_config_helpers.py | 103 | # Create the filter function | COMMENT |
| MEDIUM⚡ | tests/unit_tests/core/test_config.py | 718 | # Create a mock os module with process_cpu_count | COMMENT |
| MEDIUM | tests/unit_tests/core/test_config.py | 750 | # Create a file (not a directory) | COMMENT |
| MEDIUM | tests/unit_tests/core/test_config.py | 753 | # Create a directory without __init__.py | COMMENT |
| MEDIUM | tests/integration/conftest.py | 88 | # Create the test cache directory if it doesn't exist | COMMENT |
| MEDIUM | tests/integration/conftest.py | 369 | # Create a future to signal when connected | COMMENT |
| MEDIUM | tests/integration/conftest.py | 515 | # Create a pseudo-terminal to make the binary think it's running interactively | COMMENT |
| MEDIUM | tests/integration/test_oversized_payloads.py | 42 | # Create an oversized payload (>32768 bytes which is our new limit) | COMMENT |
| MEDIUM | tests/integration/test_oversized_payloads.py | 47 | # Create a message with oversized payload | COMMENT |
| MEDIUM | tests/integration/test_oversized_payloads.py | 170 | # Create an oversized payload (>32768 bytes which is our new limit) | COMMENT |
| MEDIUM | tests/integration/test_host_mode_entity_fields.py | 25 | # Create a map of entity names to entity info | COMMENT |
| MEDIUM | tests/integration/test_object_id_api_verification.py | 98 | # Create a map of entity names to entity info | COMMENT |
| MEDIUM | tests/integration/test_scheduler_rapid_cancellation.py | 31 | # Create a future to signal test completion | COMMENT |
| MEDIUM | tests/integration/test_scheduler_recursive_timeout.py | 30 | # Create a future to signal test completion | COMMENT |
| MEDIUM | tests/integration/test_scheduler_heap_stress.py | 31 | # Create a future to signal test completion | COMMENT |
| MEDIUM | …s/integration/test_scheduler_simultaneous_callbacks.py | 31 | # Create a future to signal test completion | COMMENT |
| MEDIUM | tests/integration/test_device_id_in_state.py | 108 | # Create a mapping of entity key to expected device_id | COMMENT |
| MEDIUM | tests/integration/test_entity_icon.py | 25 | # Create a map of entity names to entity info | COMMENT |
| MEDIUM | tests/integration/test_scheduler_bulk_cleanup.py | 31 | # Create a future to signal test completion | COMMENT |
| MEDIUM | tests/integration/test_scheduler_defer_stress.py | 31 | # Create a future to signal test completion | COMMENT |
| MEDIUM | tests/integration/test_host_mode_fan_preset.py | 28 | # Create a map of fan names to entity info | COMMENT |
| 32 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/build.py | 102 | CODE | |
| LOW | docker/generate_tags.py | 35 | CODE | |
| LOW | tests/unit_tests/test_compiled_config.py | 182 | CODE | |
| LOW | tests/unit_tests/test_substitutions.py | 42 | CODE | |
| LOW | tests/integration/test_scheduler_defer_cancel.py | 12 | CODE | |
| LOW | tests/integration/test_scheduler_self_keyed.py | 19 | CODE | |
| LOW | tests/integration/test_scheduler_self_keyed.py | 36 | CODE | |
| LOW | tests/integration/test_api_action_responses.py | 19 | CODE | |
| LOW | tests/integration/test_api_action_responses.py | 49 | CODE | |
| LOW | tests/integration/test_scheduler_string_test.py | 12 | CODE | |
| LOW | tests/integration/test_scheduler_string_test.py | 41 | CODE | |
| LOW | tests/integration/conftest.py | 506 | CODE | |
| LOW | tests/integration/test_api_custom_services.py | 16 | CODE | |
| LOW | tests/integration/test_api_custom_services.py | 58 | CODE | |
| LOW | …integration/test_scheduler_internal_id_no_collision.py | 18 | CODE | |
| LOW | …integration/test_scheduler_internal_id_no_collision.py | 47 | CODE | |
| LOW | tests/integration/test_scheduler_numeric_id_test.py | 12 | CODE | |
| LOW | tests/integration/test_scheduler_numeric_id_test.py | 46 | CODE | |
| LOW | tests/integration/test_scheduler_pool.py | 14 | CODE | |
| LOW | tests/integration/test_scheduler_pool.py | 54 | CODE | |
| LOW | tests/integration/test_api_message_size_batching.py | 14 | CODE | |
| LOW | tests/integration/test_crc8_helper.py | 14 | CODE | |
| LOW | tests/integration/test_crc8_helper.py | 44 | CODE | |
| LOW | tests/integration/test_api_homeassistant.py | 23 | CODE | |
| LOW | tests/integration/test_api_homeassistant.py | 116 | CODE | |
| LOW | tests/integration/test_scheduler_retry_test.py | 12 | CODE | |
| LOW | tests/integration/test_scheduler_retry_test.py | 46 | CODE | |
| LOW | tests/integration/test_loop_disable_enable.py | 15 | CODE | |
| LOW | tests/integration/test_loop_disable_enable.py | 61 | CODE | |
| LOW | tests/integration/test_sensor_filters_sliding_window.py | 15 | CODE | |
| LOW | tests/integration/test_sensor_filters_sliding_window.py | 39 | CODE | |
| LOW | tests/integration/test_scheduler_rapid_cancellation.py | 14 | CODE | |
| LOW | tests/integration/test_scheduler_rapid_cancellation.py | 45 | CODE | |
| LOW | tests/integration/test_sensor_timeout_filter.py | 15 | CODE | |
| LOW | tests/integration/test_sensor_timeout_filter.py | 35 | CODE | |
| LOW | tests/integration/test_scheduler_recursive_timeout.py | 13 | CODE | |
| LOW | tests/integration/test_scheduler_recursive_timeout.py | 43 | CODE | |
| LOW | tests/integration/state_utils.py | 333 | CODE | |
| LOW | tests/integration/test_script_wait_on_boot.py | 31 | CODE | |
| LOW | tests/integration/test_script_wait_on_boot.py | 61 | CODE | |
| LOW | tests/integration/test_light_automations.py | 15 | CODE | |
| LOW | tests/integration/test_light_automations.py | 36 | CODE | |
| LOW | tests/integration/test_scheduler_defer_fifo_simple.py | 12 | CODE | |
| LOW | tests/integration/test_api_conditional_memory.py | 15 | CODE | |
| LOW | tests/integration/test_api_conditional_memory.py | 39 | CODE | |
| LOW | tests/integration/test_sensor_filters_value_list.py | 16 | CODE | |
| LOW | tests/integration/test_sensor_filters_value_list.py | 44 | CODE | |
| LOW | …egration/test_alarm_control_panel_state_transitions.py | 23 | CODE | |
| LOW | tests/integration/test_script_delay_params.py | 27 | CODE | |
| LOW | tests/integration/test_script_delay_params.py | 55 | CODE | |
| LOW | tests/integration/test_action_concurrent_reentry.py | 15 | CODE | |
| LOW | tests/integration/test_action_concurrent_reentry.py | 42 | CODE | |
| LOW | tests/integration/test_api_action_timeout.py | 20 | CODE | |
| LOW | tests/integration/test_api_action_timeout.py | 54 | CODE | |
| LOW | tests/integration/test_automations.py | 14 | CODE | |
| LOW | tests/integration/test_automations.py | 38 | CODE | |
| LOW | tests/integration/test_sensor_filters_delta.py | 15 | CODE | |
| LOW | tests/integration/test_sensor_filters_delta.py | 36 | CODE | |
| LOW | tests/component_tests/conftest.py | 108 | CODE | |
| LOW | tests/component_tests/conftest.py | 121 | CODE | |
| 165 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/core/test_entity_helpers.py | 811 | # Set friendly_name to a specific value | COMMENT |
| LOW | tests/unit_tests/core/test_entity_helpers.py | 841 | # Set friendly_name to empty | COMMENT |
| LOW | tests/integration/test_host_mode_many_entities.py | 42 | # Check if we have received minimum expected states | COMMENT |
| LOW | tests/integration/test_gpio_expander_cache.py | 100 | # Check if this line contains a read operation we're tracking | COMMENT |
| LOW | tests/integration/conftest.py | 85 | # Check if the native platform is installed (the actual indicator of a populated cache) | COMMENT |
| LOW | tests/integration/conftest.py | 611 | # Check if process died | COMMENT |
| LOW | tests/integration/test_api_message_size_batching.py | 174 | # Check if we've received states from all expected entities | COMMENT |
| LOW | tests/integration/test_api_homeassistant.py | 99 | # Check if this service call is one we're waiting for | COMMENT |
| LOW | tests/integration/test_loop_disable_enable.py | 82 | # Check if component was re-enabled (count > 10) | COMMENT |
| LOW | tests/integration/test_sensor_filters_sliding_window.py | 55 | # Check if we received the expected final value | COMMENT |
| LOW | tests/integration/test_sensor_filters_sliding_window.py | 230 | # Check if both have received their final values | COMMENT |
| LOW | tests/integration/test_sensor_filters_ring_buffer.py | 50 | # Check if we've received enough updates from all sensors | COMMENT |
| LOW | tests/integration/state_utils.py | 254 | # Check if we've now seen all entities | COMMENT |
| LOW | tests/integration/test_scheduler_heap_stress.py | 72 | # Check if we've executed all 1000 callbacks (0-999) | COMMENT |
| LOW | tests/integration/test_areas_and_devices.py | 100 | # Check if we have all initial states | COMMENT |
| LOW | tests/integration/test_scheduler_defer_stress.py | 67 | # Check if we've executed all 1000 defers (0-999) | COMMENT |
| LOW | tests/integration/test_automations.py | 123 | # Check if we have all 3 completions | COMMENT |
| LOW | tests/component_tests/conftest.py | 41 | # Check if config directory exists, if not use parent directory | COMMENT |
| LOW | tests/component_tests/conftest.py | 43 | # Set config_path to a dummy yaml file in the config directory | COMMENT |
| LOW | tests/component_tests/esp32/test_esp32.py | 56 | # Check if the variant is valid | COMMENT |
| LOW | tests/component_tests/sntp/test_init.py | 140 | # Check if merging occurred | COMMENT |
| LOW | script/determine-jobs.py | 690 | # Check if benchmark infrastructure changed | COMMENT |
| LOW | script/determine-jobs.py | 697 | # Check if any directly changed component has benchmarks | COMMENT |
| LOW | script/determine-jobs.py | 978 | # Check if this is a platform-specific file | COMMENT |
| LOW | script/analyze_component_buses.py | 238 | # Check if buses are defined directly (not via packages) | COMMENT |
| LOW⚡ | script/analyze_component_buses.py | 363 | # Check if component is explicitly isolated | COMMENT |
| LOW⚡ | script/analyze_component_buses.py | 368 | # Check if component is a base bus component | COMMENT |
| LOW⚡ | script/analyze_component_buses.py | 374 | # Check if component uses !extend or !remove directives | COMMENT |
| LOW⚡ | script/analyze_component_buses.py | 381 | # Check if component defines buses directly in test files | COMMENT |
| LOW | script/analyze_component_buses.py | 511 | # Check if buses are compatible | COMMENT |
| LOW | script/analyze_component_buses.py | 645 | # Output results | COMMENT |
| LOW | script/test_build_components.py | 178 | # Check if last part is a number (version) | COMMENT |
| LOW | script/helpers.py | 569 | # Check if any core C++ or header files changed first | COMMENT |
| LOW | script/helpers.py | 904 | # Check if we found any new components | STRING |
| LOW | script/split_components_for_ci.py | 191 | # Check if adding this component would exceed the batch size | COMMENT |
| LOW | script/split_components_for_ci.py | 312 | # Check if this is a merged signature (contains +) | COMMENT |
| LOW⚡ | script/api_protobuf/api_protobuf.py | 502 | # Check if this is a packed_buffer field (zero-copy packed repeated) | COMMENT |
| LOW⚡ | script/api_protobuf/api_protobuf.py | 505 | # Check if this repeated field has fixed_array_with_length_define option | COMMENT |
| LOW⚡ | script/api_protobuf/api_protobuf.py | 510 | # Check if this repeated field has fixed_array_size option | COMMENT |
| LOW⚡ | script/api_protobuf/api_protobuf.py | 513 | # Check if this repeated field has fixed_array_size_define option | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 877 | # Check if this is being called from a repeated field context | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 1601 | # Check if underlying type can use dump_field | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 1715 | # Check if we should skip encoding when all elements are zero | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 1929 | # Check if underlying type can use dump_field | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 1970 | # Check if this is a pointer field by looking for container_pointer option | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 1979 | # Check if this should use FixedVector instead of std::vector | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2117 | # Check if this is const char* elements | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2159 | # Check if this is a fixed-size type | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2168 | # Check if inner type produces a constant size (doesn't depend on value) | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2309 | # Check if this message is used by other messages | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2495 | # Check if this message has a base class | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2709 | # Check if this message uses inline_encode — if so, skip generating standalone | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2718 | # Check if this message wants speed-optimized encode/calculate_size. | COMMENT |
| LOW | script/api_protobuf/api_protobuf.py | 2784 | # Check if message has any non-deprecated fields | COMMENT |
| LOW | .github/workflows/ci.yml | 874 | # Check if /mnt has more free space than / before bind mounting | COMMENT |
| LOW | .github/workflows/ci.yml | 1101 | # Check if memory impact extraction script exists on target branch | COMMENT |
| LOW | .github/workflows/ci.yml | 1113 | # Check if test files exist on the target branch for the requested | COMMENT |
| LOW | esphome/yaml_util.py | 506 | # Check if key is hashable | COMMENT |
| LOW | esphome/yaml_util.py | 517 | # Check if it is a duplicate key | COMMENT |
| LOW | esphome/config_helpers.py | 150 | # Check if logger config exists | COMMENT |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …ts/component_tests/binary_sensor/test_binary_sensor.py | 0 | when the gpio binary sensor is set in the yaml file, it should be registered in main | STRING |
| HIGH | tests/component_tests/text/test_text.py | 0 | when the gpio binary sensor is set in the yaml file, it should be registered in main | STRING |
| HIGH | tests/component_tests/gpio/test_gpio_binary_sensor.py | 0 | when the gpio binary sensor is set in the yaml file, it should be registered in main | STRING |
| HIGH | …ts/component_tests/binary_sensor/test_binary_sensor.py | 0 | when the mandatory fields are set in the yaml, they should be set in main | STRING |
| HIGH | tests/component_tests/text_sensor/test_text_sensor.py | 0 | when the mandatory fields are set in the yaml, they should be set in main | STRING |
| HIGH | tests/component_tests/button/test_button.py | 0 | when the mandatory fields are set in the yaml, they should be set in main | STRING |
| HIGH | tests/component_tests/text/test_text.py | 0 | when the mandatory fields are set in the yaml, they should be set in main | STRING |
| HIGH | …ts/component_tests/binary_sensor/test_binary_sensor.py | 0 | test that the "internal" config value is correctly set | STRING |
| HIGH | tests/component_tests/text_sensor/test_text_sensor.py | 0 | test that the "internal" config value is correctly set | STRING |
| HIGH | tests/component_tests/button/test_button.py | 0 | test that the "internal" config value is correctly set | STRING |
| HIGH | tests/component_tests/text/test_text.py | 0 | test that the "internal" config value is correctly set | STRING |
| HIGH | …s/component_tests/mipi_spi/test_padding_and_offsets.py | 0 | run schema + final validation and return the validated config. | STRING |
| HIGH | tests/component_tests/mipi_spi/test_page_selection.py | 0 | run schema + final validation and return the validated config. | STRING |
| HIGH | tests/component_tests/mipi_spi/test_display_metadata.py | 0 | run schema + final validation and return the validated config. | STRING |
| HIGH | esphome/components/qspi_dbi/__init__.py | 0 | the 'ili9xxx' component is deprecated and no new models will be added to it. new model prs should target the newer and m | STRING |
| HIGH | esphome/components/st7735/__init__.py | 0 | the 'ili9xxx' component is deprecated and no new models will be added to it. new model prs should target the newer and m | STRING |
| HIGH | esphome/components/ili9xxx/__init__.py | 0 | the 'ili9xxx' component is deprecated and no new models will be added to it. new model prs should target the newer and m | STRING |
| HIGH | esphome/components/mipi_rgb/display.py | 0 | it is safe to use strapping pins as rgb output data bits, as they are outputs only, and not initialised until after boot | STRING |
| HIGH | esphome/components/rpi_dpi_rgb/display.py | 0 | it is safe to use strapping pins as rgb output data bits, as they are outputs only, and not initialised until after boot | STRING |
| HIGH | esphome/components/st7701s/display.py | 0 | it is safe to use strapping pins as rgb output data bits, as they are outputs only, and not initialised until after boot | STRING |
| HIGH | esphome/components/ln882x/__init__.py | 0 | ██╗ ██╗ █████╗ ██████╗ ███╗ ██╗██╗███╗ ██╗ ██████╗ ██║ ██║██╔══██╗██╔══██╗████╗ ██║██║████╗ ██║██╔════╝ ██║ █╗ ██║██████ | STRING |
| HIGH | esphome/components/bk72xx/__init__.py | 0 | ██╗ ██╗ █████╗ ██████╗ ███╗ ██╗██╗███╗ ██╗ ██████╗ ██║ ██║██╔══██╗██╔══██╗████╗ ██║██║████╗ ██║██╔════╝ ██║ █╗ ██║██████ | STRING |
| HIGH | esphome/components/rtl87xx/__init__.py | 0 | ██╗ ██╗ █████╗ ██████╗ ███╗ ██╗██╗███╗ ██╗ ██████╗ ██║ ██║██╔══██╗██╔══██╗████╗ ██║██║████╗ ██║██╔════╝ ██║ █╗ ██║██████ | STRING |
| HIGH | esphome/components/ln882x/boards.py | 0 | ██╗ ██╗ █████╗ ██████╗ ███╗ ██╗██╗███╗ ██╗ ██████╗ ██║ ██║██╔══██╗██╔══██╗████╗ ██║██║████╗ ██║██╔════╝ ██║ █╗ ██║██████ | STRING |
| HIGH | esphome/components/bk72xx/boards.py | 0 | ██╗ ██╗ █████╗ ██████╗ ███╗ ██╗██╗███╗ ██╗ ██████╗ ██║ ██║██╔══██╗██╔══██╗████╗ ██║██║████╗ ██║██╔════╝ ██║ █╗ ██║██████ | STRING |
| HIGH | esphome/components/rtl87xx/boards.py | 0 | ██╗ ██╗ █████╗ ██████╗ ███╗ ██╗██╗███╗ ██╗ ██████╗ ██║ ██║██╔══██╗██╔══██╗████╗ ██║██║████╗ ██║██╔════╝ ██║ █╗ ██║██████ | STRING |
| HIGH | esphome/components/esp32/__init__.py | 0 | binary-download entries for a built libretiny firmware. used by device-builder (esphome/device-builder), via ``importlib | STRING |
| HIGH | esphome/components/esp8266/__init__.py | 0 | binary-download entries for a built libretiny firmware. used by device-builder (esphome/device-builder), via ``importlib | STRING |
| HIGH | esphome/components/rp2/__init__.py | 0 | binary-download entries for a built libretiny firmware. used by device-builder (esphome/device-builder), via ``importlib | STRING |
| HIGH | esphome/components/libretiny/__init__.py | 0 | binary-download entries for a built libretiny firmware. used by device-builder (esphome/device-builder), via ``importlib | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | tests/unit_tests/test_compiled_config.py | 422 | '{"storage_version": 1, "name": "lite_test", "friendly_name": null, ' | CODE |
| HIGH⚡ | tests/unit_tests/test_compiled_config.py | 423 | '"comment": null, "esphome_version": null, "src_version": 1, ' | CODE |
| HIGH⚡ | tests/unit_tests/test_compiled_config.py | 424 | '"address": null, "web_port": null, "esp_platform": null, ' | CODE |
| HIGH⚡ | tests/unit_tests/test_compiled_config.py | 425 | '"build_path": null, "firmware_bin_path": null, ' | CODE |
| HIGH⚡ | tests/unit_tests/test_compiled_config.py | 427 | '"framework": null, "core_platform": null}' | CODE |
| HIGH⚡ | tests/unit_tests/test_substitutions.py | 568 | yaml_util.add_context(inner, {"a": "${undefined}"}) | CODE |
| HIGH⚡ | tests/unit_tests/test_yaml_util.py | 816 | value = _located("${undefined}", "root.yaml", 5, 10) | CODE |
| HIGH⚡ | tests/unit_tests/test_yaml_util.py | 1309 | """An empty (null) frontmatter document is treated as no frontmatter.""" | STRING |
| HIGH | tests/unit_tests/test_cpp_generator.py | 13 | (cg.RawExpression("foo && bar"), "foo && bar"), | CODE |
| HIGH | tests/unit_tests/test_cpp_generator.py | 324 | (cg.RawStatement("foo && bar"), "foo && bar"), | CODE |
| HIGH | esphome/mqtt.py | 240 | _LOGGER.error("MQTT log topic set to null, can't start MQTT logs") | CODE |
| HIGH | esphome/cpp_helpers.py | 116 | cond = "index == 0" if count >= 255 else f"index == 0 || index > {count}" | CODE |
| HIGH | esphome/core/config.py | 230 | # DEVICE_CLASS_MAX_LENGTH == MAX_DEVICE_CLASS_LENGTH - 1 (C++ includes the null) | COMMENT |
| HIGH | esphome/core/entity_helpers.py | 139 | lines.append(f" if (index == 0 || index > {count}) return {empty_var};") | CODE |
| HIGH | esphome/core/entity_helpers.py | 149 | f' if (index == 0 || index > {count}) return "";\n' | CODE |
| HIGH | esphome/core/entity_helpers.py | 341 | - If !has_own_name && is_name_add_mac_suffix_enabled(): | STRING |
| HIGH | esphome/components/rp2040_pio_led_strip/light.py | 90 | ; out null, 24 ; discard the byte lane replication of the FIFO since we only need 8 bits (not needed????) | CODE |
| HIGH⚡ | esphome/components/uart/__init__.py | 353 | # - Serial (UART0): TX=1 or null, RX=3 or null | COMMENT |
| HIGH⚡ | esphome/components/uart/__init__.py | 354 | # - Serial (UART0 swap): TX=15 or null, RX=13 or null | COMMENT |
| HIGH⚡ | esphome/components/uart/__init__.py | 355 | # - Serial1: TX=2 or null, RX=8 or null | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/integration/conftest.py | 563 | print(f"Error reading from PTY: {result[0]}", file=sys.stderr) | CODE |
| LOW | tests/integration/test_syslog.py | 113 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_udp.py | 83 | except Exception: # noqa: BLE001 | CODE |
| LOW | tests/integration/test_online_image_bmp.py | 51 | except Exception as exc: | CODE |
| MEDIUM | tests/integration/test_online_image_bmp.py | 22 | def handler(reader, writer): | CODE |
| LOW | script/merge_component_configs.py | 485 | except Exception as e: # noqa: BLE001 | CODE |
| MEDIUM | script/merge_component_configs.py | 486 | print(f"Error merging configs: {e}", file=sys.stderr) | CODE |
| MEDIUM⚡ | script/ci_add_metadata_to_json.py | 43 | print(f"Error: JSON file not found: {args.json_file}", file=sys.stderr) | CODE |
| MEDIUM⚡ | script/ci_add_metadata_to_json.py | 50 | print(f"Error loading JSON: {e}", file=sys.stderr) | CODE |
| MEDIUM⚡ | script/ci_add_metadata_to_json.py | 57 | print("Error: --components must be a JSON array", file=sys.stderr) | CODE |
| MEDIUM | script/ci_add_metadata_to_json.py | 68 | print(f"Error parsing components: {e}", file=sys.stderr) | CODE |
| MEDIUM | script/ci_add_metadata_to_json.py | 81 | print(f"Error writing JSON: {e}", file=sys.stderr) | CODE |
| LOW | script/build_helpers.py | 114 | except Exception: # noqa: BLE001 | CODE |
| MEDIUM⚡ | script/build_helpers.py | 402 | print(f"Error compiling {label} for {', '.join(components)}") | CODE |
| LOW⚡ | script/build_helpers.py | 404 | except Exception as e: # noqa: BLE001 | CODE |
| MEDIUM⚡ | script/build_helpers.py | 405 | print(f"Error compiling {label} for {', '.join(components)}: {e}") | CODE |
| MEDIUM | script/build_helpers.py | 485 | print(f"Error obtaining platform components: {e}") | CODE |
| LOW | script/stress_test_connect.py | 24 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | script/ci-custom.py | 128 | except Exception: | CODE |
| LOW | script/analyze_component_buses.py | 138 | except Exception: # noqa: BLE001 # pylint: disable=broad-exception-caught | CODE |
| LOW | script/analyze_component_buses.py | 174 | except Exception: # noqa: BLE001 # pylint: disable=broad-exception-caught | CODE |
| LOW | script/analyze_component_buses.py | 232 | except Exception: # noqa: BLE001 # pylint: disable=broad-exception-caught | CODE |
| MEDIUM | script/analyze_component_buses.py | 341 | print(f"Error: {tests_dir} does not exist", file=sys.stderr) | CODE |
| MEDIUM | script/ci_memory_impact_comment.py | 655 | print("Error: Failed to load PR analysis JSON", file=sys.stderr) | CODE |
| LOW | script/test_build_components.py | 509 | except Exception as e: # pylint: disable=broad-exception-caught | CODE |
| MEDIUM | script/test_build_components.py | 510 | print(f"Error merging configs for {components}: {e}") | CODE |
| LOW | script/helpers.py | 264 | except Exception: # noqa: BLE001 - never let a bad test config crash grouping | CODE |
| LOW | script/helpers.py | 486 | except Exception as e: | CODE |
| MEDIUM | script/split_components_for_ci.py | 251 | print(f"Error parsing components JSON: {e}", file=sys.stderr) | CODE |
| MEDIUM | script/split_components_for_ci.py | 264 | print(f"Error parsing directly-changed JSON: {e}", file=sys.stderr) | CODE |
| LOW | script/test_component_grouping.py | 66 | except Exception as e: # noqa: BLE001 | CODE |
| MEDIUM | script/test_component_grouping.py | 67 | print(f"Error running test: {e}") | CODE |
| LOW | esphome/config.py | 1350 | except Exception: | CODE |
| LOW | esphome/storage_json.py | 285 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/storage_json.py | 387 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/storage_json.py | 416 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| MEDIUM | esphome/storage_json.py | 381 | def last_update_check(self) -> datetime | None: | CODE |
| LOW | esphome/util.py | 274 | except Exception as err: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/util.py | 321 | except Exception as err: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/framework_helpers.py | 632 | except Exception as e: # noqa: BLE001 # pylint: disable=broad-exception-caught | CODE |
| LOW | esphome/vscode.py | 137 | except Exception as err: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/vscode.py | 144 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/compiled_config.py | 46 | except Exception as err: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/compiled_config.py | 65 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/zeroconf.py | 339 | except Exception as err: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/loader.py | 276 | except Exception: # pylint: disable=broad-except | CODE |
| LOW | esphome/async_thread.py | 45 | except Exception as exc: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| MEDIUM | esphome/async_thread.py | 42 | def _runner(self) -> None: | CODE |
| LOW | esphome/__main__.py | 1008 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/__main__.py | 1924 | except Exception as e: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/platformio/runner.py | 97 | except Exception: # noqa: BLE001 | CODE |
| MEDIUM | esphome/components/esp32/__init__.py | 1047 | def _parse_pio_platform_version(value): | CODE |
| LOW | esphome/components/esp32/__init__.py | 3086 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/components/esp8266/__init__.py | 490 | except Exception: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| MEDIUM | esphome/components/esp8266/__init__.py | 192 | def _parse_platform_version(value): | CODE |
| LOW | esphome/components/ili9xxx/display.py | 285 | except Exception as e: | CODE |
| LOW | esphome/components/sdl/display.py | 45 | except Exception as e: | CODE |
| MEDIUM | esphome/components/rp2/generate_boards.py | 192 | print(f"Error: {arduino_pico_path}/tools/json not found", file=sys.stderr) | CODE |
| LOW | esphome/components/nrf52/__init__.py | 707 | except Exception as err: # noqa: BLE001 # pylint: disable=broad-except | CODE |
| LOW | esphome/components/bme68x_bsec2/__init__.py | 174 | except Exception as e: | CODE |
| 4 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/integration/state_utils.py | 30 | Subscribe to states and wait for one matching ``predicate``. Resolves with the first :class:`EntityState` for which | STRING |
| HIGH | tests/integration/state_utils.py | 94 | Find an entity or raise AssertionError if not found. Args: entities: List of entity info objects from the A | STRING |
| HIGH | script/merge_component_configs.py | 184 | Deduplicate list items with the same ID. Identical items sharing an ID (e.g. a shared bus from a common package pul | STRING |
| HIGH | script/determine-jobs.py | 304 | Determine if clang-tidy should run based on changed files. This function is used by the CI workflow to intelligentl | STRING |
| HIGH | script/determine-jobs.py | 927 | Determine memory impact analysis configuration. Always runs memory impact analysis when there are changed component | STRING |
| HIGH | script/analyze_component_buses.py | 147 | Check if a component is a platform component (abstract base class). Platform components have IS_PLATFORM_COMPONENT | STRING |
| HIGH | script/ci_memory_impact_comment.py | 29 | Run a gh CLI command with error handling. Args: args: Command arguments (including 'gh') operation: | STRING |
| HIGH | script/ci_memory_impact_comment.py | 461 | Find existing memory impact comment on the PR. Args: pr_number: PR number Returns: Comment num | STRING |
| HIGH | esphome/bundle.py | 423 | Extract a bundle archive and return the path to the config YAML. Sanity checks reject path traversal, symlinks, abs | STRING |
| HIGH | esphome/bundle.py | 474 | Read and validate the manifest from a bundle without full extraction. Args: bundle_path: Path to the .tar.g | STRING |
| HIGH | esphome/framework_helpers.py | 63 | Remove a directory and its contents recursively if it exists. Args: directory: Path to the directory t | STRING |
| HIGH | esphome/framework_helpers.py | 197 | Create a Python virtual environment. Args: root: Path to the virtual environment directory msg | STRING |
| HIGH | esphome/framework_helpers.py | 561 | Download file from multiple mirrors with substitution support. Args: mirrors: list of mirror URLs | STRING |
| HIGH | esphome/analyze_memory/__init__.py | 609 | Build mapping from heuristic pattern categories to discovered libraries. Heuristic categories like ``mdns_lib`` | STRING |
| HIGH | esphome/espidf/framework.py | 235 | Get the ESP-IDF version from the specified framework root. Args: idf_framework_root: Path to the ESP-I | STRING |
| HIGH | esphome/espidf/framework.py | 275 | Get ESP-IDF tool paths and environment variables needed for building. Args: idf_framework_root: Path t | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/unit_tests/core/test_entity_helpers.py | 166 | # Empty name is handled specially - it doesn't just use sanitize(snake_case("")) | COMMENT |
| MEDIUM | tests/integration/test_script_queued.py | 19 | """Test comprehensive queued script functionality.""" | STRING |
| MEDIUM | tests/script/test_determine_jobs.py | 987 | # Workflow / harness files | COMMENT |
| LOW | script/merge_component_configs.py | 232 | # No ID, just add it | COMMENT |
| MEDIUM | script/determine-jobs.py | 504 | # - script/test_build_components.py -- the harness the job invokes | COMMENT |
| MEDIUM | script/list-components.py | 65 | # BUT only for --changed (used by clang-tidy for comprehensive checking) | COMMENT |
| MEDIUM | script/list-components.py | 91 | # This is for --changed (clang-tidy) which needs comprehensive checking | COMMENT |
| MEDIUM | .github/workflows/ci.yml | 797 | # (no --all-headers; the comprehensive esp32-idf pass covers the shared tree). | COMMENT |
| MEDIUM | esphome/components/opentherm/opentherm_macros.h | 156 | // These macros utilize the structure of *_LIST macros in order | COMMENT |
| MEDIUM | esphome/components/epaper_spi/models/jd79660.py | 59 | # Device may have specific factory provisioned MTP content to facilitate vendor register features like fast init. | COMMENT |
| LOW | esphome/components/epaper_spi/models/__init__.py | 63 | # Explicit dimensions, just use as is | COMMENT |
| MEDIUM | esphome/components/shelly_dimmer/shelly_dimmer.cpp | 54 | // Essentially std::size() for pre c++17 | COMMENT |
| LOW | esphome/components/esp32_ble_server/__init__.py | 578 | # Static value - just set it directly without action infrastructure | COMMENT |
| LOW | esphome/components/mipi/__init__.py | 449 | # Explicit dimensions, just use as is | COMMENT |
| LOW | esphome/components/substitutions/__init__.py | 334 | # This node does not define any vars itself, so just return parent context | COMMENT |
| LOW | esphome/components/mipi_spi/display.py | 131 | # No exact divisor, just use the closest. | COMMENT |
| MEDIUM | esphome/components/lvgl/animation.py | 58 | # It would be better to have a more robust way of passing arguments to the timing classes. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/component_tests/motion/test_motion.py | 611 | # Step 1: Device flat — gravity in enclosure frame is [0, 0, 1] | COMMENT |
| LOW⚡ | tests/component_tests/motion/test_motion.py | 621 | # Step 2: Tilt enclosure around Y by 20° | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 33 | # Step 1: Software Reset (0x12) - REQUIRED per SSD1680, but works without it as well, so it's commented out | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 35 | # Step 2: Wait 10ms after SWRESET (?) not sure how to implement wht waiting for 10ms after SWRESET, so it's | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 36 | # Step 3: DRV_OUT_CTL - driver output control (height-dependent) | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 39 | # Step 4: DATA_ENTRY - data entry mode (0x03 = decrement Y, increment X) | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 41 | # Step 5: BORDER_FULL - border waveform control | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 43 | # Step 6: TEMP_SENS - internal temperature sensor | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 45 | # Step 7: DISPLAY_UPDATE - display update control | COMMENT |
| LOW | esphome/components/async_tcp/async_tcp_socket.h | 17 | /// NOTE: This class is NOT thread-safe. All methods must be called from the main loop. | COMMENT |
| LOW⚡ | esphome/components/sen6x/sen6x.cpp | 77 | // Step 1: Read serial number (~25ms with I2C delay) | COMMENT |
| LOW⚡ | esphome/components/sen6x/sen6x.cpp | 87 | // Step 2: Read product name in next loop iteration | COMMENT |
| LOW | esphome/components/sen6x/sen6x.cpp | 134 | // Step 3: Read firmware version and start measurements in next loop iteration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/component_tests/motion/test_motion.py | 611 | # Step 1: Device flat — gravity in enclosure frame is [0, 0, 1] | COMMENT |
| LOW⚡ | tests/component_tests/motion/test_motion.py | 621 | # Step 2: Tilt enclosure around Y by 20° | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 33 | # Step 1: Software Reset (0x12) - REQUIRED per SSD1680, but works without it as well, so it's commented out | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 35 | # Step 2: Wait 10ms after SWRESET (?) not sure how to implement wht waiting for 10ms after SWRESET, so it's | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 36 | # Step 3: DRV_OUT_CTL - driver output control (height-dependent) | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 39 | # Step 4: DATA_ENTRY - data entry mode (0x03 = decrement Y, increment X) | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 41 | # Step 5: BORDER_FULL - border waveform control | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 43 | # Step 6: TEMP_SENS - internal temperature sensor | COMMENT |
| LOW⚡ | esphome/components/epaper_spi/models/weact_bwr.py | 45 | # Step 7: DISPLAY_UPDATE - display update control | COMMENT |
| LOW⚡ | esphome/components/sen6x/sen6x.cpp | 77 | // Step 1: Read serial number (~25ms with I2C delay) | COMMENT |
| LOW⚡ | esphome/components/sen6x/sen6x.cpp | 87 | // Step 2: Read product name in next loop iteration | COMMENT |
| LOW | esphome/components/sen6x/sen6x.cpp | 134 | // Step 3: Read firmware version and start measurements in next loop iteration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/testing_helpers.py | 57 | def set_testing_manifest(domain: str, manifest: ComponentManifestOverride) -> None: | CODE |
| LOW | tests/unit_tests/test_preferences.py | 26 | def _set_platform(platform: str) -> None: | CODE |
| LOW | tests/unit_tests/test_preferences.py | 30 | def _set_esp32(variant: str) -> None: | CODE |
| LOW | tests/unit_tests/test_compiled_config.py | 87 | def _set_cache_mtime(cache_path: Path, yaml_path: Path, *, offset: int) -> None: | CODE |
| LOW | tests/unit_tests/test_git.py | 22 | def _setup_old_repo(repo_dir: Path, days_old: int = 2) -> None: | CODE |
| LOW⚡ | tests/unit_tests/test_config_validation.py | 1397 | def _set_core_target(platform: str, framework: str) -> None: | CODE |
| LOW⚡ | tests/unit_tests/test_config_validation.py | 1405 | def _set_framework_version(platform: str, framework: str, version: cv.Version) -> None: | CODE |
| LOW | tests/unit_tests/test_config_validation.py | 602 | def _setup_core_for_framework(platform: str, framework: str) -> None: | CODE |
| LOW | tests/component_tests/mipi_rgb/test_mipi_rgb_config.py | 41 | def _set_s3(set_core_config: SetCoreConfigCallable) -> None: | CODE |
| LOW⚡ | tests/component_tests/time/test_init.py | 43 | def _set_platform(platform: Platform) -> None: | CODE |
| LOW | script/ci_memory_impact_comment.py | 526 | def update_existing_comment(comment_id: str, comment_body: str) -> None: | CODE |
| LOW | esphome/yaml_util.py | 195 | def set_context(self, vars: dict[str, Any]) -> None: | CODE |
| LOW⚡ | esphome/writer.py | 135 | def update_storage_json() -> None: | CODE |
| LOW | esphome/cpp_generator.py | 716 | def set_cpp_standard(standard: str) -> None: | CODE |
| LOW | esphome/core/entity_helpers.py | 416 | async def _setup_entity_impl(var: MockObj, config: ConfigType, platform: str) -> None: | CODE |
| LOW | esphome/components/image/__init__.py | 117 | def set_big_endian(self, big_endian: bool) -> None: | CODE |
| LOW | esphome/components/esp32/__init__.py | 2006 | async def _set_libc_picolibc_newlib_compat() -> None: | CODE |
| LOW | esphome/components/esp32/__init__.py | 2039 | def set_opt(name: str, value: SdkconfigValueType) -> None: | CODE |
| LOW | esphome/components/nrf52/clang_tidy.py | 154 | def _setup_core(work_dir: Path) -> None: | CODE |
| LOW | esphome/components/esp32_ble/__init__.py | 272 | __all__ = [ | CODE |
| LOW | esphome/components/lvgl/defines.py | 135 | def set_widgets_completed(value: bool) -> None: | CODE |
| LOW | esphome/components/lvgl/widgets/__init__.py | 552 | def _set_layout_options(w: Widget, layout: dict, base_name: str | None) -> None: | CODE |
| LOW | esphome/espidf/clang_tidy.py | 142 | def _setup_core(work_dir: Path, settings: _Settings) -> None: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | esphome/components/weikai/weikai.h | 56 | /// problem by asking users to rewrite their code, I have implemented this ring buffer that store the bytes received | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit_tests/components/test_rp2_generate_boards.py | 254 | _add_board(arduino_pico, "placeholder", pins_header=header) | STRING |
| LOW⚡ | tests/unit_tests/components/test_rp2_generate_boards.py | 258 | assert "SDA1" not in board_pins["placeholder"] | STRING |
| LOW⚡ | tests/unit_tests/components/test_rp2_generate_boards.py | 259 | assert "SCL1" not in board_pins["placeholder"] | STRING |
| LOW⚡ | tests/unit_tests/components/test_rp2_generate_boards.py | 260 | assert board_pins["placeholder"]["LED"] == 25 | STRING |
| LOW⚡ | tests/unit_tests/components/test_rp2_generate_boards.py | 261 | assert "max_virtual_pin" not in boards["placeholder"] | STRING |
| LOW | esphome/components/runtime_image/__init__.py | 19 | CONF_PLACEHOLDER = "placeholder" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/codeql.yml | 51 | # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize h | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | esphome/coroutine.py | 269 | CODE | |
| LOW | esphome/coroutine.py | 189 | CODE | |
| LOW | esphome/components/sensor/__init__.py | 365 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | esphome/components/sha256/sha256.h | 46 | /// Example usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | esphome/components/rp2/gpio.cpp | 96 | // TODO: implement | COMMENT |