-
Notifications
You must be signed in to change notification settings - Fork 42
More refactor #189
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
More refactor #189
Conversation
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the """ WalkthroughThis update introduces extensive refactoring and enhancements to the ESP32 Arduino and ESP-IDF PlatformIO build system. Key changes include robust path and file management, dynamic component handling via a new Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant PlatformIO
participant ArduinoPy as arduino.py
participant ComponentMgr as ComponentManager
participant FileSystem
participant Logger
User->>PlatformIO: Start build
PlatformIO->>ArduinoPy: Initialize build environment
ArduinoPy->>Logger: Setup logging (if enabled)
ArduinoPy->>FileSystem: Check and warn about Windows long path support
ArduinoPy->>ArduinoPy: Validate and clean framework directories
ArduinoPy->>ComponentMgr: Manage components (add/remove, handle lib_ignore)
ComponentMgr->>FileSystem: Backup/modify build scripts, remove components
ArduinoPy->>ArduinoPy: Install Python dependencies (if needed)
ArduinoPy->>ArduinoPy: Shorten include paths if too long
ArduinoPy->>PlatformIO: Proceed with build process
PlatformIO->>User: Build output/results
sequenceDiagram
participant User
participant PlatformIO
participant MainPy as main.py
participant MetricsTool as esp-idf-size
User->>PlatformIO: Run 'pio run --target metrics [-- extra args]'
PlatformIO->>MainPy: Invoke firmware_metrics action
MainPy->>MainPy: Parse custom_esp_idf_size_args and CLI arguments
MainPy->>MetricsTool: Run esp-idf-size with arguments
MetricsTool-->>MainPy: Output metrics or error
MainPy->>User: Display firmware size metrics or error messages
Possibly related PRs
Poem
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
🔭 Outside diff range comments (1)
builder/main.py (1)
213-250
: 🛠️ Refactor suggestionRemove unused variable and improve string formatting.
The function has an unused
sizes
variable and could benefit from f-string formatting.Apply this diff to fix the issues:
def _update_max_upload_size(env): """ Update the maximum upload size based on partition table configuration. Prioritizes user-specified partition names. """ if not env.get("PARTITIONS_TABLE_CSV"): return - - sizes = { - p["subtype"]: _parse_size(p["size"]) - for p in _parse_partitions(env) - if p["type"] in ("0", "app") - } partitions = {p["name"]: p for p in _parse_partitions(env)} # User-specified partition name has the highest priority custom_app_partition_name = board.get("build.app_partition_name", "") if custom_app_partition_name: selected_partition = partitions.get(custom_app_partition_name, {}) if selected_partition: board.update( "upload.maximum_size", _parse_size(selected_partition["size"]) ) return else: print( - "Warning! Selected partition `%s` is not available in the " - "partition table! Default partition will be used!" - % custom_app_partition_name + f"Warning! Selected partition `{custom_app_partition_name}` is not available in the " + f"partition table! Default partition will be used!" )🧰 Tools
🪛 Ruff (0.11.9)
221-221: Local variable
sizes
is assigned to but never usedRemove assignment to unused variable
sizes
(F841)
🪛 Pylint (3.3.7)
[convention] 220-220: Trailing whitespace
(C0303)
[warning] 213-213: Redefining name 'env' from outer scope (line 36)
(W0621)
[refactor] 233-243: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it
(R1705)
[convention] 240-241: Formatting a regular string which could be an f-string
(C0209)
[warning] 221-221: Unused variable 'sizes'
(W0612)
♻️ Duplicate comments (9)
builder/frameworks/espidf.py (2)
221-223
: MD5 hash truncation reduces collision resistance.This issue was already identified in previous reviews. The truncation to 16 characters significantly reduces the hash space and increases collision probability.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 222-222: Import outside toplevel (hashlib)
(C0415)
2300-2300
: Hardcoded partition offset reduces flexibility.This issue was already identified in previous reviews. The hardcoded value limits flexibility for boards with custom partition layouts.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 2300-2300: Constant name "bound" doesn't conform to UPPER_CASE naming style
(C0103)
builder/frameworks/component_manager.py (4)
195-196
:⚠️ Potential issueReplace bare except with specific exception handling.
Multiple locations in ComponentHandler use bare
except Exception
which can mask unexpected errors.Also applies to: 215-216, 298-299, 316-317, 488-489
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 195-195: Catching too general exception Exception
(W0718)
296-296
:⚠️ Potential issueAdd explicit encoding to file operations.
Multiple file open operations lack explicit encoding specification, which can cause issues on different systems.
Apply this fix to add encoding:
-with open(file_path, "r", encoding='utf-8') as f: +with open(file_path, "r", encoding='utf-8') as f:Note: Some operations already have encoding (lines 278, 296, 314), but lines 468 and 483 are missing it:
-with open(build_py_path, 'r', encoding='utf-8') as f: +with open(build_py_path, 'r', encoding='utf-8') as f:Also applies to: 314-314, 468-468, 483-483
590-591
:⚠️ Potential issueReplace bare except with specific exception handling in LibraryIgnoreHandler.
Multiple locations use bare
except Exception
which can mask unexpected errors.Also applies to: 620-621, 682-683, 710-711, 954-955
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 590-590: Catching too general exception Exception
(W0718)
705-705
:⚠️ Potential issueAdd explicit encoding to file operations in LibraryIgnoreHandler.
File operations at lines 705, 901, and 948 lack explicit encoding specification.
Also applies to: 901-901, 948-948
platform.py (1)
88-118
: Use lazy formatting in logging functions.The safe file operation implementation is excellent, but logging should use lazy formatting for better performance.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 94-94: Use lazy % formatting in logging functions
(W1203)
[warning] 97-97: Use lazy % formatting in logging functions
(W1203)
[warning] 107-107: Use lazy % formatting in logging functions
(W1203)
[warning] 116-116: Use lazy % formatting in logging functions
(W1203)
builder/frameworks/arduino.py (2)
107-116
: Consider more conservative default thresholds.The default threshold values significantly exceed the Windows command line limit, which could cause build failures.
517-522
: Potential issue with path parent comparison.The path comparison logic could fail on case-insensitive filesystems. Consider normalizing paths before comparison.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 521-521: Use lazy % formatting in logging functions
(W1203)
🧹 Nitpick comments (8)
builder/main.py (1)
162-211
: Clean up trailing whitespace in _parse_partitions function.The function logic is good, but there's trailing whitespace that should be removed.
Apply this diff to remove trailing whitespace:
- app_offset = 0x10000 # Default address for firmware - + app_offset = 0x10000 # Default address for firmware +And at line 203:
- +🧰 Tools
🪛 Pylint (3.3.7)
[convention] 179-179: Trailing whitespace
(C0303)
[convention] 203-203: Trailing whitespace
(C0303)
[warning] 162-162: Redefining name 'env' from outer scope (line 36)
(W0621)
[convention] 170-170: Formatting a regular string which could be an f-string
(C0209)
[warning] 180-180: Using open without explicitly specifying an encoding
(W1514)
[refactor] 162-162: Either all return statements in a function should return an expression, or none of them should.
(R1710)
platform.py (1)
284-294
: Simplify conditional logic.Remove unnecessary
else
afterreturn
to reduce nesting.if self._check_tool_version(tool_name): # Version matches, use tool self.packages[tool_name]["version"] = paths['tool_path'] self.packages[tool_name]["optional"] = False logger.debug(f"Tool {tool_name} found with correct version") return True -else: - # Wrong version, reinstall - logger.info(f"Reinstalling {tool_name} due to version mismatch") - safe_remove_directory(paths['tool_path']) - return self.install_tool(tool_name, retry_count + 1) + +# Wrong version, reinstall +logger.info(f"Reinstalling {tool_name} due to version mismatch") +safe_remove_directory(paths['tool_path']) +return self.install_tool(tool_name, retry_count + 1)🧰 Tools
🪛 Pylint (3.3.7)
[refactor] 284-294: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it
(R1705)
[warning] 288-288: Use lazy % formatting in logging functions
(W1203)
[warning] 292-292: Use lazy % formatting in logging functions
(W1203)
builder/frameworks/arduino.py (6)
31-37
: Fix import ordering to follow PEP8 conventions.Standard library imports should be placed before third-party imports.
Apply this diff to fix the import order:
import subprocess import json -import semantic_version import os import sys import shutil import hashlib import logging import threading from contextlib import suppress from os.path import join, exists, isabs, splitdrive, commonpath, relpath from pathlib import Path from typing import Union, List +import semantic_version from SCons.Script import DefaultEnvironment, SConscript🧰 Tools
🪛 Pylint (3.3.7)
[convention] 31-31: standard import "hashlib" should be placed before third party import "semantic_version"
(C0411)
[convention] 32-32: standard import "logging" should be placed before third party import "semantic_version"
(C0411)
[convention] 33-33: standard import "threading" should be placed before third party import "semantic_version"
(C0411)
[convention] 34-34: standard import "contextlib.suppress" should be placed before third party import "semantic_version"
(C0411)
[convention] 35-35: standard import "os.path.join" should be placed before third party import "semantic_version"
(C0411)
[convention] 36-36: standard import "pathlib.Path" should be placed before third party import "semantic_version"
(C0411)
[convention] 37-37: standard import "typing.Union" should be placed before third party import "semantic_version"
(C0411)
329-358
: Add docstrings to the PathCache class and its methods.The class implementation is clean, but it lacks documentation.
Add docstrings to improve code documentation:
class PathCache: + """Cache for frequently accessed framework directory paths. + + Provides lazy initialization of framework, library, and SDK directories + to avoid repeated path lookups. + """ def __init__(self, platform, mcu): self.platform = platform self.mcu = mcu self._framework_dir = None self._framework_lib_dir = None self._sdk_dir = None @property def framework_dir(self): + """Get the framework directory path, caching it on first access.""" if self._framework_dir is None: self._framework_dir = self.platform.get_package_dir( "framework-arduinoespressif32") return self._framework_dir🧰 Tools
🪛 Pylint (3.3.7)
[convention] 329-329: Missing class docstring
(C0115)
[warning] 330-330: Redefining name 'platform' from outer scope (line 599)
(W0621)
[warning] 330-330: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 338-338: Missing function or method docstring
(C0116)
[convention] 345-345: Missing function or method docstring
(C0116)
[convention] 352-352: Missing function or method docstring
(C0116)
719-721
: Rename function to follow snake_case convention.The function name should follow Python naming conventions.
-def get_MD5_hash(phrase): +def get_md5_hash(phrase): return hashlib.md5(phrase.encode('utf-8')).hexdigest()[:16]Also update the call site at line 743:
- expected_hash = get_MD5_hash(custom_options.strip() + mcu) + expected_hash = get_md5_hash(custom_options.strip() + mcu)🧰 Tools
🪛 Pylint (3.3.7)
[convention] 719-719: Missing function or method docstring
(C0116)
[convention] 719-719: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
738-738
: Specify encoding when opening file.Always specify encoding to ensure consistent behavior across platforms.
- with open(last_sdkconfig_path) as src: + with open(last_sdkconfig_path, encoding='utf-8') as src:🧰 Tools
🪛 Pylint (3.3.7)
[warning] 738-738: Using open without explicitly specifying an encoding
(W1514)
952-952
: Remove trailing whitespace.Static analysis detected trailing whitespace on these lines.
Clean up the trailing whitespace at the end of these lines to maintain code consistency.
Also applies to: 993-993, 1036-1036
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 952-952: Trailing whitespace
(C0303)
1-1042
: Excellent refactoring with significant improvements.This comprehensive refactoring brings substantial improvements to the ESP32 Arduino build system:
- Security: Path validation and secure deletion prevent accidental system damage
- Diagnostics: Enhanced logging and debug output help troubleshoot build issues
- Performance: Caching and smart include path optimization reduce build times
- Flexibility: Configurable thresholds adapt to different project needs
- Safety: Thread-safe operations support concurrent builds
The modular design with ComponentManager separation and robust error handling makes the system more maintainable. Consider documenting the bleeding edge threshold configuration in the project README to help users optimize their builds.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 952-952: Trailing whitespace
(C0303)
[convention] 993-993: Trailing whitespace
(C0303)
[convention] 1036-1036: Trailing whitespace
(C0303)
[convention] 1-1: Too many lines in module (1041/1000)
(C0302)
[error] 27-27: Unable to import 'semantic_version'
(E0401)
[error] 39-39: Unable to import 'SCons.Script'
(E0401)
[error] 40-40: Unable to import 'platformio'
(E0401)
[error] 41-41: Unable to import 'platformio.package.version'
(E0401)
[error] 42-42: Unable to import 'platformio.package.manager.tool'
(E0401)
[warning] 91-91: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 122-124: Use lazy % formatting in logging functions
(W1203)
[warning] 129-129: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 184-185: Use lazy % formatting in logging functions
(W1203)
[warning] 190-190: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 190-190: Redefining name 'config' from outer scope (line 600)
(W0621)
[warning] 190-190: Redefining name 'current_env_section' from outer scope (line 608)
(W0621)
[warning] 210-210: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 268-268: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 268-268: Redefining name 'config' from outer scope (line 600)
(W0621)
[warning] 268-268: Redefining name 'current_env_section' from outer scope (line 608)
(W0621)
[warning] 281-281: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 329-329: Missing class docstring
(C0115)
[warning] 330-330: Redefining name 'platform' from outer scope (line 599)
(W0621)
[warning] 330-330: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 338-338: Missing function or method docstring
(C0116)
[convention] 345-345: Missing function or method docstring
(C0116)
[convention] 352-352: Missing function or method docstring
(C0116)
[warning] 389-389: Catching too general exception Exception
(W0718)
[convention] 368-368: Import outside toplevel (winreg)
(C0415)
[error] 368-368: Unable to import 'winreg'
(E0401)
[warning] 430-430: Catching too general exception Exception
(W0718)
[warning] 415-415: Use lazy % formatting in logging functions
(W1203)
[warning] 424-424: Use lazy % formatting in logging functions
(W1203)
[warning] 428-428: Use lazy % formatting in logging functions
(W1203)
[warning] 431-431: Use lazy % formatting in logging functions
(W1203)
[warning] 450-450: Catching too general exception Exception
(W0718)
[warning] 443-443: Use lazy % formatting in logging functions
(W1203)
[warning] 447-447: Use lazy % formatting in logging functions
(W1203)
[warning] 451-451: Use lazy % formatting in logging functions
(W1203)
[warning] 485-485: Catching too general exception Exception
(W0718)
[warning] 486-486: Use lazy % formatting in logging functions
(W1203)
[warning] 521-521: Use lazy % formatting in logging functions
(W1203)
[warning] 525-525: Use lazy % formatting in logging functions
(W1203)
[warning] 533-533: Use lazy % formatting in logging functions
(W1203)
[warning] 534-534: Use lazy % formatting in logging functions
(W1203)
[warning] 536-536: Use lazy % formatting in logging functions
(W1203)
[warning] 547-548: Use lazy % formatting in logging functions
(W1203)
[warning] 551-552: Use lazy % formatting in logging functions
(W1203)
[warning] 560-561: Use lazy % formatting in logging functions
(W1203)
[warning] 566-567: Use lazy % formatting in logging functions
(W1203)
[warning] 570-571: Use lazy % formatting in logging functions
(W1203)
[warning] 579-580: Use lazy % formatting in logging functions
(W1203)
[convention] 608-608: Constant name "current_env_section" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 612-612: Constant name "entry_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 613-613: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 614-614: Constant name "flag_custom_component_remove" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 615-615: Constant name "flag_custom_component_add" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 616-616: Constant name "flag_lib_ignore" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 619-619: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 623-623: Constant name "flag_lib_ignore" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 627-627: Constant name "flag_custom_component_remove" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 632-632: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 635-635: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 639-639: Constant name "extra_flags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 641-641: Constant name "extra_flags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 643-643: Constant name "framework_reinstall" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 650-650: Constant name "flag_any_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 666-666: Constant name "build_unflags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 683-683: Missing function or method docstring
(C0116)
[warning] 695-695: Catching too general exception Exception
(W0718)
[convention] 719-719: Missing function or method docstring
(C0116)
[convention] 719-719: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
[warning] 738-738: Using open without explicitly specifying an encoding
(W1514)
[convention] 752-752: Missing function or method docstring
(C0116)
[convention] 766-766: Missing function or method docstring
(C0116)
[warning] 791-791: Access to a protected member _cache of a client class
(W0212)
[warning] 794-794: Access to a protected member _cache of a client class
(W0212)
[warning] 795-795: Access to a protected member _cache of a client class
(W0212)
[warning] 798-798: Access to a protected member _cache of a client class
(W0212)
[warning] 825-825: Redefining name 'env' from outer scope (line 597)
(W0621)
[refactor] 860-860: Too many local variables (20/15)
(R0914)
[warning] 860-860: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 926-926: Redefining name 'env' from outer scope (line 597)
(W0621)
[convention] 991-991: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 1012-1012: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 28-28: standard import "os" should be placed before third party import "semantic_version"
(C0411)
[convention] 29-29: standard import "sys" should be placed before third party import "semantic_version"
(C0411)
[convention] 30-30: standard import "shutil" should be placed before third party import "semantic_version"
(C0411)
[convention] 31-31: standard import "hashlib" should be placed before third party import "semantic_version"
(C0411)
[convention] 32-32: standard import "logging" should be placed before third party import "semantic_version"
(C0411)
[convention] 33-33: standard import "threading" should be placed before third party import "semantic_version"
(C0411)
[convention] 34-34: standard import "contextlib.suppress" should be placed before third party import "semantic_version"
(C0411)
[convention] 35-35: standard import "os.path.join" should be placed before third party import "semantic_version"
(C0411)
[convention] 36-36: standard import "pathlib.Path" should be placed before third party import "semantic_version"
(C0411)
[convention] 37-37: standard import "typing.Union" should be placed before third party import "semantic_version"
(C0411)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
builder/frameworks/arduino.py
(1 hunks)builder/frameworks/component_manager.py
(1 hunks)builder/frameworks/espidf.py
(8 hunks)builder/main.py
(17 hunks)examples/arduino-blink/platformio.ini
(7 hunks)examples/arduino-rmt-blink/platformio.ini
(1 hunks)examples/tasmota_platformio_override.ini
(0 hunks)platform.py
(6 hunks)
💤 Files with no reviewable changes (1)
- examples/tasmota_platformio_override.ini
🧰 Additional context used
🧬 Code Graph Analysis (2)
builder/main.py (1)
builder/frameworks/espidf.py (1)
_parse_size
(2281-2291)
builder/frameworks/espidf.py (2)
builder/frameworks/arduino.py (1)
get_MD5_hash
(719-720)builder/frameworks/component_manager.py (1)
ComponentManager
(1056-1145)
🪛 Pylint (3.3.7)
builder/main.py
[error] 23-30: Unable to import 'SCons.Script'
(E0401)
[error] 32-32: Unable to import 'platformio.project.helpers'
(E0401)
[error] 33-33: Unable to import 'platformio.util'
(E0401)
[convention] 45-45: Function name "BeforeUpload" doesn't conform to snake_case naming style
(C0103)
[warning] 45-45: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 45-45: Unused argument 'target'
(W0613)
[warning] 45-45: Unused argument 'source'
(W0613)
[warning] 95-95: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 101-101: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 110-110: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 119-119: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 133-133: Redefining name 'env' from outer scope (line 36)
(W0621)
[convention] 179-179: Trailing whitespace
(C0303)
[warning] 162-162: Redefining name 'env' from outer scope (line 36)
(W0621)
[convention] 170-170: Formatting a regular string which could be an f-string
(C0209)
[refactor] 162-162: Either all return statements in a function should return an expression, or none of them should.
(R1710)
[convention] 203-203: Trailing whitespace
(C0303)
[convention] 220-220: Trailing whitespace
(C0303)
[warning] 213-213: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 221-221: Unused variable 'sizes'
(W0612)
[convention] 240-241: Formatting a regular string which could be an f-string
(C0209)
[warning] 256-256: Redefining name 'env' from outer scope (line 36)
(W0621)
[convention] 276-276: Trailing whitespace
(C0303)
[warning] 289-289: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 306-306: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 306-306: Unused argument 'target'
(W0613)
[warning] 306-306: Unused argument 'source'
(W0613)
[warning] 340-340: Unused variable 'cli_args'
(W0612)
[convention] 363-363: Formatting a regular string which could be an f-string
(C0209)
[convention] 368-368: Constant name "toolchain_arch" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 382-382: Formatting a regular string which could be an f-string
(C0209)
[convention] 383-383: Formatting a regular string which could be an f-string
(C0209)
[convention] 384-384: Formatting a regular string which could be an f-string
(C0209)
[convention] 385-385: Formatting a regular string which could be an f-string
(C0209)
[convention] 562-562: Constant name "upload_protocol" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 676-676: Formatting a regular string which could be an f-string
(C0209)
[convention] 724-724: Formatting a regular string which could be an f-string
(C0209)
builder/frameworks/espidf.py
[warning] 158-158: Redefining name 'silent_action' from outer scope (line 2221)
(W0621)
[convention] 198-198: Trailing whitespace
(C0303)
[convention] 219-219: Trailing whitespace
(C0303)
[convention] 229-229: Trailing whitespace
(C0303)
[convention] 231-231: Trailing whitespace
(C0303)
[convention] 249-249: Trailing whitespace
(C0303)
[convention] 265-265: Trailing whitespace
(C0303)
[convention] 280-280: Trailing whitespace
(C0303)
[convention] 286-286: Trailing whitespace
(C0303)
[convention] 291-291: Trailing whitespace
(C0303)
[convention] 297-297: Trailing whitespace
(C0303)
[convention] 306-306: Trailing whitespace
(C0303)
[convention] 309-309: Trailing whitespace
(C0303)
[convention] 313-313: Trailing whitespace
(C0303)
[convention] 317-317: Trailing whitespace
(C0303)
[convention] 324-324: Trailing whitespace
(C0303)
[convention] 327-327: Trailing whitespace
(C0303)
[convention] 331-331: Trailing whitespace
(C0303)
[convention] 333-333: Trailing whitespace
(C0303)
[convention] 337-337: Trailing whitespace
(C0303)
[convention] 341-341: Trailing whitespace
(C0303)
[convention] 346-346: Trailing whitespace
(C0303)
[convention] 355-355: Trailing whitespace
(C0303)
[convention] 358-358: Trailing whitespace
(C0303)
[convention] 370-370: Trailing whitespace
(C0303)
[convention] 373-373: Trailing whitespace
(C0303)
[convention] 375-375: Trailing whitespace
(C0303)
[convention] 379-379: Trailing whitespace
(C0303)
[convention] 382-382: Trailing whitespace
(C0303)
[convention] 387-387: Trailing whitespace
(C0303)
[convention] 220-220: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
[convention] 222-222: Import outside toplevel (hashlib)
(C0415)
[warning] 241-241: Missing timeout argument for method 'requests.get' can cause your program to hang indefinitely
(W3101)
[warning] 257-257: Using open without explicitly specifying an encoding
(W1514)
[refactor] 225-225: Too many return statements (7/6)
(R0911)
[warning] 268-268: Redefining name 'line' from outer scope (line 2302)
(W0621)
[refactor] 271-274: Unnecessary "elif" after "return", remove the leading "el" from "elif"
(R1705)
[warning] 335-335: Redefining name 'line' from outer scope (line 2302)
(W0621)
[error] 322-322: Possibly using variable 'arduino_libs_mcu' before assignment
(E0606)
[warning] 328-328: Using open without explicitly specifying an encoding
(W1514)
[warning] 328-328: Using open without explicitly specifying an encoding
(W1514)
[convention] 392-392: Missing function or method docstring
(C0116)
[convention] 392-392: Function name "HandleCOMPONENTsettings" doesn't conform to snake_case naming style
(C0103)
[warning] 392-392: Redefining name 'env' from outer scope (line 56)
(W0621)
[convention] 393-393: Import outside toplevel (component_manager.ComponentManager)
(C0415)
[convention] 2218-2218: Import outside toplevel (component_manager.ComponentManager)
(C0415)
[convention] 2241-2241: Import outside toplevel (component_manager.ComponentManager)
(C0415)
[convention] 2300-2300: Constant name "bound" doesn't conform to UPPER_CASE naming style
(C0103)
builder/frameworks/component_manager.py
[convention] 28-28: Trailing whitespace
(C0303)
[convention] 53-53: Line too long (114/100)
(C0301)
[convention] 64-64: Trailing whitespace
(C0303)
[convention] 74-74: Trailing whitespace
(C0303)
[convention] 88-88: Trailing whitespace
(C0303)
[convention] 100-100: Trailing whitespace
(C0303)
[convention] 126-126: Trailing whitespace
(C0303)
[convention] 143-143: Trailing whitespace
(C0303)
[convention] 144-144: Line too long (111/100)
(C0301)
[convention] 160-160: Trailing whitespace
(C0303)
[convention] 165-165: Trailing whitespace
(C0303)
[convention] 168-168: Trailing whitespace
(C0303)
[convention] 171-171: Trailing whitespace
(C0303)
[convention] 173-173: Trailing whitespace
(C0303)
[convention] 177-177: Trailing whitespace
(C0303)
[convention] 197-197: Trailing whitespace
(C0303)
[convention] 217-217: Trailing whitespace
(C0303)
[convention] 235-235: Trailing whitespace
(C0303)
[convention] 241-241: Trailing whitespace
(C0303)
[convention] 245-245: Trailing whitespace
(C0303)
[convention] 260-260: Trailing whitespace
(C0303)
[convention] 277-277: Trailing whitespace
(C0303)
[convention] 280-280: Trailing whitespace
(C0303)
[convention] 300-300: Trailing whitespace
(C0303)
[convention] 318-318: Trailing whitespace
(C0303)
[convention] 319-319: Line too long (101/100)
(C0301)
[convention] 332-332: Trailing whitespace
(C0303)
[convention] 337-337: Trailing whitespace
(C0303)
[convention] 341-341: Trailing whitespace
(C0303)
[convention] 347-347: Trailing whitespace
(C0303)
[convention] 361-361: Trailing whitespace
(C0303)
[convention] 366-366: Trailing whitespace
(C0303)
[convention] 368-368: Trailing whitespace
(C0303)
[convention] 374-374: Trailing whitespace
(C0303)
[convention] 384-384: Line too long (102/100)
(C0301)
[convention] 393-393: Trailing whitespace
(C0303)
[convention] 408-408: Trailing whitespace
(C0303)
[convention] 419-419: Trailing whitespace
(C0303)
[convention] 422-422: Trailing whitespace
(C0303)
[convention] 425-425: Trailing whitespace
(C0303)
[convention] 436-436: Trailing whitespace
(C0303)
[convention] 438-438: Trailing whitespace
(C0303)
[convention] 450-450: Trailing whitespace
(C0303)
[convention] 453-453: Trailing whitespace
(C0303)
[convention] 463-463: Trailing whitespace
(C0303)
[convention] 466-466: Trailing whitespace
(C0303)
[convention] 470-470: Trailing whitespace
(C0303)
[convention] 472-472: Trailing whitespace
(C0303)
[convention] 480-480: Trailing whitespace
(C0303)
[convention] 483-483: Trailing whitespace
(C0303)
[convention] 487-487: Trailing whitespace
(C0303)
[convention] 500-500: Trailing whitespace
(C0303)
[convention] 519-519: Trailing whitespace
(C0303)
[convention] 531-531: Trailing whitespace
(C0303)
[convention] 534-534: Trailing whitespace
(C0303)
[convention] 539-539: Trailing whitespace
(C0303)
[convention] 554-554: Trailing whitespace
(C0303)
[convention] 559-559: Trailing whitespace
(C0303)
[convention] 568-568: Trailing whitespace
(C0303)
[convention] 582-582: Trailing whitespace
(C0303)
[convention] 587-587: Trailing whitespace
(C0303)
[convention] 589-589: Trailing whitespace
(C0303)
[convention] 592-592: Trailing whitespace
(C0303)
[convention] 607-607: Trailing whitespace
(C0303)
[convention] 612-612: Trailing whitespace
(C0303)
[convention] 615-615: Trailing whitespace
(C0303)
[convention] 619-619: Trailing whitespace
(C0303)
[convention] 622-622: Trailing whitespace
(C0303)
[convention] 638-638: Trailing whitespace
(C0303)
[convention] 653-653: Trailing whitespace
(C0303)
[convention] 666-666: Trailing whitespace
(C0303)
[convention] 669-669: Trailing whitespace
(C0303)
[convention] 672-672: Trailing whitespace
(C0303)
[convention] 681-681: Line too long (105/100)
(C0301)
[convention] 684-684: Trailing whitespace
(C0303)
[convention] 686-686: Trailing whitespace
(C0303)
[convention] 703-703: Trailing whitespace
(C0303)
[convention] 712-712: Trailing whitespace
(C0303)
[convention] 714-714: Trailing whitespace
(C0303)
[convention] 732-732: Trailing whitespace
(C0303)
[convention] 756-756: Trailing whitespace
(C0303)
[convention] 757-757: Line too long (105/100)
(C0301)
[convention] 813-813: Trailing whitespace
(C0303)
[convention] 817-817: Trailing whitespace
(C0303)
[convention] 821-821: Trailing whitespace
(C0303)
[convention] 824-824: Trailing whitespace
(C0303)
[convention] 842-842: Trailing whitespace
(C0303)
[convention] 844-844: Trailing whitespace
(C0303)
[convention] 848-848: Trailing whitespace
(C0303)
[convention] 851-851: Trailing whitespace
(C0303)
[convention] 857-857: Trailing whitespace
(C0303)
[convention] 863-863: Trailing whitespace
(C0303)
[convention] 867-867: Trailing whitespace
(C0303)
[convention] 874-874: Trailing whitespace
(C0303)
[convention] 877-877: Trailing whitespace
(C0303)
[convention] 879-879: Trailing whitespace
(C0303)
[convention] 890-890: Trailing whitespace
(C0303)
[convention] 894-894: Trailing whitespace
(C0303)
[convention] 899-899: Trailing whitespace
(C0303)
[convention] 903-903: Trailing whitespace
(C0303)
[convention] 906-906: Trailing whitespace
(C0303)
[convention] 913-913: Trailing whitespace
(C0303)
[convention] 918-918: Trailing whitespace
(C0303)
[convention] 930-930: Trailing whitespace
(C0303)
[convention] 937-937: Trailing whitespace
(C0303)
[convention] 941-941: Trailing whitespace
(C0303)
[convention] 945-945: Trailing whitespace
(C0303)
[convention] 951-951: Trailing whitespace
(C0303)
[convention] 956-956: Trailing whitespace
(C0303)
[convention] 975-975: Trailing whitespace
(C0303)
[convention] 978-978: Trailing whitespace
(C0303)
[convention] 989-989: Trailing whitespace
(C0303)
[convention] 992-992: Trailing whitespace
(C0303)
[convention] 1005-1005: Trailing whitespace
(C0303)
[convention] 1017-1017: Trailing whitespace
(C0303)
[convention] 1028-1028: Trailing whitespace
(C0303)
[convention] 1031-1031: Trailing whitespace
(C0303)
[convention] 1034-1034: Trailing whitespace
(C0303)
[convention] 1050-1050: Trailing whitespace
(C0303)
[convention] 1064-1064: Trailing whitespace
(C0303)
[convention] 1082-1082: Trailing whitespace
(C0303)
[convention] 1083-1083: Line too long (111/100)
(C0301)
[convention] 1097-1097: Trailing whitespace
(C0303)
[convention] 1102-1102: Trailing whitespace
(C0303)
[convention] 1111-1111: Trailing whitespace
(C0303)
[convention] 1125-1125: Trailing whitespace
(C0303)
[convention] 1137-1137: Trailing whitespace
(C0303)
[convention] 1-1: Too many lines in module (1145/1000)
(C0302)
[refactor] 20-20: Too many instance attributes (8/7)
(R0902)
[refactor] 20-20: Too few public methods (0/2)
(R0903)
[warning] 195-195: Catching too general exception Exception
(W0718)
[warning] 215-215: Catching too general exception Exception
(W0718)
[warning] 298-298: Catching too general exception Exception
(W0718)
[warning] 316-316: Catching too general exception Exception
(W0718)
[warning] 488-488: Catching too general exception Exception
(W0718)
[refactor] 118-118: Too few public methods (1/2)
(R0903)
[warning] 590-590: Catching too general exception Exception
(W0718)
[warning] 620-620: Catching too general exception Exception
(W0718)
[warning] 682-682: Catching too general exception Exception
(W0718)
[warning] 710-710: Catching too general exception Exception
(W0718)
[warning] 954-954: Catching too general exception Exception
(W0718)
[refactor] 492-492: Too few public methods (1/2)
(R0903)
[warning] 1035-1035: Unused argument 'target'
(W0613)
[warning] 1035-1035: Unused argument 'source'
(W0613)
[warning] 1035-1035: Unused argument 'env'
(W0613)
[convention] 16-16: standard import "os.path.join" should be placed before third party imports "yaml", "yaml.SafeLoader"
(C0411)
[convention] 17-17: standard import "typing.Set" should be placed before third party imports "yaml", "yaml.SafeLoader"
(C0411)
platform.py
[error] 25-25: Unable to import 'platformio.public'
(E0401)
[error] 26-26: Unable to import 'platformio.proc'
(E0401)
[error] 27-27: Unable to import 'platformio.project.config'
(E0401)
[error] 28-28: Unable to import 'platformio.package.manager.tool'
(E0401)
[warning] 94-94: Use lazy % formatting in logging functions
(W1203)
[warning] 97-97: Use lazy % formatting in logging functions
(W1203)
[warning] 107-107: Use lazy % formatting in logging functions
(W1203)
[warning] 116-116: Use lazy % formatting in logging functions
(W1203)
[warning] 194-194: Catching too general exception Exception
(W0718)
[warning] 192-192: Use lazy % formatting in logging functions
(W1203)
[warning] 195-195: Use lazy % formatting in logging functions
(W1203)
[warning] 203-203: Using open without explicitly specifying an encoding
(W1514)
[warning] 210-210: Use lazy % formatting in logging functions
(W1203)
[warning] 214-214: Use lazy % formatting in logging functions
(W1203)
[warning] 219-222: Use lazy % formatting in logging functions
(W1203)
[warning] 227-227: Use lazy % formatting in logging functions
(W1203)
[warning] 233-235: Use lazy % formatting in logging functions
(W1203)
[warning] 251-251: Use lazy % formatting in logging functions
(W1203)
[warning] 277-277: Use lazy % formatting in logging functions
(W1203)
[refactor] 284-294: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it
(R1705)
[warning] 288-288: Use lazy % formatting in logging functions
(W1203)
[warning] 292-292: Use lazy % formatting in logging functions
(W1203)
[warning] 314-314: Use lazy % formatting in logging functions
(W1203)
[warning] 362-362: Use lazy % formatting in logging functions
(W1203)
[warning] 409-409: Using open without explicitly specifying an encoding
(W1514)
[warning] 415-415: Use lazy % formatting in logging functions
(W1203)
[warning] 463-463: Unused argument 'for_download'
(W0613)
[warning] 505-505: Catching too general exception Exception
(W0718)
[warning] 506-506: Use lazy % formatting in logging functions
(W1203)
[convention] 19-19: standard import "subprocess" should be placed before third party import "requests"
(C0411)
[convention] 20-20: standard import "sys" should be placed before third party import "requests"
(C0411)
[convention] 21-21: standard import "shutil" should be placed before third party import "requests"
(C0411)
[convention] 22-22: standard import "logging" should be placed before third party import "requests"
(C0411)
[convention] 23-23: standard import "typing.Optional" should be placed before third party import "requests"
(C0411)
[refactor] 609-621: Unnecessary "elif" after "return", remove the leading "el" from "elif"
(R1705)
[refactor] 612-615: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it
(R1705)
builder/frameworks/arduino.py
[convention] 952-952: Trailing whitespace
(C0303)
[convention] 993-993: Trailing whitespace
(C0303)
[convention] 1036-1036: Trailing whitespace
(C0303)
[error] 39-39: Unable to import 'SCons.Script'
(E0401)
[error] 40-40: Unable to import 'platformio'
(E0401)
[error] 41-41: Unable to import 'platformio.package.version'
(E0401)
[error] 42-42: Unable to import 'platformio.package.manager.tool'
(E0401)
[warning] 91-91: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 122-124: Use lazy % formatting in logging functions
(W1203)
[warning] 129-129: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 184-185: Use lazy % formatting in logging functions
(W1203)
[warning] 190-190: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 190-190: Redefining name 'config' from outer scope (line 600)
(W0621)
[warning] 190-190: Redefining name 'current_env_section' from outer scope (line 608)
(W0621)
[warning] 210-210: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 268-268: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 268-268: Redefining name 'config' from outer scope (line 600)
(W0621)
[warning] 268-268: Redefining name 'current_env_section' from outer scope (line 608)
(W0621)
[warning] 281-281: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 329-329: Missing class docstring
(C0115)
[warning] 330-330: Redefining name 'platform' from outer scope (line 599)
(W0621)
[warning] 330-330: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 338-338: Missing function or method docstring
(C0116)
[convention] 345-345: Missing function or method docstring
(C0116)
[convention] 352-352: Missing function or method docstring
(C0116)
[warning] 389-389: Catching too general exception Exception
(W0718)
[convention] 368-368: Import outside toplevel (winreg)
(C0415)
[error] 368-368: Unable to import 'winreg'
(E0401)
[warning] 430-430: Catching too general exception Exception
(W0718)
[warning] 415-415: Use lazy % formatting in logging functions
(W1203)
[warning] 424-424: Use lazy % formatting in logging functions
(W1203)
[warning] 428-428: Use lazy % formatting in logging functions
(W1203)
[warning] 431-431: Use lazy % formatting in logging functions
(W1203)
[warning] 450-450: Catching too general exception Exception
(W0718)
[warning] 443-443: Use lazy % formatting in logging functions
(W1203)
[warning] 447-447: Use lazy % formatting in logging functions
(W1203)
[warning] 451-451: Use lazy % formatting in logging functions
(W1203)
[warning] 485-485: Catching too general exception Exception
(W0718)
[warning] 486-486: Use lazy % formatting in logging functions
(W1203)
[warning] 521-521: Use lazy % formatting in logging functions
(W1203)
[warning] 525-525: Use lazy % formatting in logging functions
(W1203)
[warning] 533-533: Use lazy % formatting in logging functions
(W1203)
[warning] 534-534: Use lazy % formatting in logging functions
(W1203)
[warning] 536-536: Use lazy % formatting in logging functions
(W1203)
[warning] 547-548: Use lazy % formatting in logging functions
(W1203)
[warning] 551-552: Use lazy % formatting in logging functions
(W1203)
[warning] 560-561: Use lazy % formatting in logging functions
(W1203)
[warning] 566-567: Use lazy % formatting in logging functions
(W1203)
[warning] 570-571: Use lazy % formatting in logging functions
(W1203)
[warning] 579-580: Use lazy % formatting in logging functions
(W1203)
[convention] 608-608: Constant name "current_env_section" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 612-612: Constant name "entry_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 613-613: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 614-614: Constant name "flag_custom_component_remove" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 615-615: Constant name "flag_custom_component_add" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 616-616: Constant name "flag_lib_ignore" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 619-619: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 623-623: Constant name "flag_lib_ignore" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 627-627: Constant name "flag_custom_component_remove" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 632-632: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 635-635: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 639-639: Constant name "extra_flags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 641-641: Constant name "extra_flags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 643-643: Constant name "framework_reinstall" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 650-650: Constant name "flag_any_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 666-666: Constant name "build_unflags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 683-683: Missing function or method docstring
(C0116)
[warning] 695-695: Catching too general exception Exception
(W0718)
[convention] 719-719: Missing function or method docstring
(C0116)
[convention] 719-719: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
[warning] 738-738: Using open without explicitly specifying an encoding
(W1514)
[convention] 752-752: Missing function or method docstring
(C0116)
[convention] 766-766: Missing function or method docstring
(C0116)
[warning] 791-791: Access to a protected member _cache of a client class
(W0212)
[warning] 794-794: Access to a protected member _cache of a client class
(W0212)
[warning] 795-795: Access to a protected member _cache of a client class
(W0212)
[warning] 798-798: Access to a protected member _cache of a client class
(W0212)
[warning] 825-825: Redefining name 'env' from outer scope (line 597)
(W0621)
[refactor] 860-860: Too many local variables (20/15)
(R0914)
[warning] 860-860: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 926-926: Redefining name 'env' from outer scope (line 597)
(W0621)
[convention] 991-991: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 1012-1012: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 31-31: standard import "hashlib" should be placed before third party import "semantic_version"
(C0411)
[convention] 32-32: standard import "logging" should be placed before third party import "semantic_version"
(C0411)
[convention] 33-33: standard import "threading" should be placed before third party import "semantic_version"
(C0411)
[convention] 34-34: standard import "contextlib.suppress" should be placed before third party import "semantic_version"
(C0411)
[convention] 35-35: standard import "os.path.join" should be placed before third party import "semantic_version"
(C0411)
[convention] 36-36: standard import "pathlib.Path" should be placed before third party import "semantic_version"
(C0411)
[convention] 37-37: standard import "typing.Union" should be placed before third party import "semantic_version"
(C0411)
🪛 Ruff (0.11.9)
builder/main.py
221-221: Local variable sizes
is assigned to but never used
Remove assignment to unused variable sizes
(F841)
344-344: Local variable cli_args
is assigned to but never used
Remove assignment to unused variable cli_args
(F841)
🔇 Additional comments (23)
examples/arduino-rmt-blink/platformio.ini (1)
5-7
: LGTM! Appropriate library exclusions for RMT blink example.The addition of
lib_ignore
directives to exclude WiFi, SPIFFS, and NetworkClientSecure libraries is appropriate for this RMT blink example, which only needs basic GPIO/RMT functionality. This will reduce build time and binary size.Also applies to: 15-17, 25-27, 35-37
examples/arduino-blink/platformio.ini (2)
15-18
: Library exclusions look good for reducing build size.The
lib_ignore
additions for WiFi, SPIFFS, and NetworkClientSecure are appropriate for a basic blink example.Also applies to: 38-40, 60-62, 111-113, 141-143
81-83
: Verify the intentional WiFi inclusion for these environments.Unlike other environments,
esp32s3-qio_opi_per
andesp32-h2-devkitm-1
don't exclude the WiFi library. This might be intentional:
- ESP32-H2 doesn't have WiFi hardware (designed for Thread/Zigbee)
- The esp32s3-qio_opi_per configuration might have specific requirements
Please confirm this difference is intentional.
Also applies to: 126-128
builder/main.py (2)
295-304
: Good addition for lib_archive configuration check.The
check_lib_archive_exists
function is a clean utility that properly checks all project sections for the lib_archive setting.
761-781
: Excellent addition of firmware metrics targets!The new
metrics
andmetrics-only
targets provide valuable firmware size analysis capabilities:
metrics
: Ensures the project is built before analysismetrics-only
: Allows quick analysis without rebuildingThe integration with
esp-idf-size
and support for CLI arguments after--
makes this very flexible.builder/frameworks/espidf.py (9)
156-160
: LGTM! Clean utility function for silent actions.The implementation correctly creates silent SCons actions by overriding the string function. This is a good pattern for suppressing verbose output during build processes.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 158-158: Redefining name 'silent_action' from outer scope (line 2221)
(W0621)
166-166
: Good improvement using join() for path construction.Using
join()
instead of string concatenation is the correct approach for cross-platform path handling.
179-179
: Clean variable introduction for MCU-specific path.The
arduino_libs_mcu
variable provides a cleaner reference to the MCU-specific Arduino libs directory.
190-200
: Excellent security enhancement for path traversal detection.The function comprehensively covers various path traversal attack vectors including URL-encoded and double-encoded patterns. This is a significant security improvement over the previous implementation.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 198-198: Trailing whitespace
(C0303)
215-389
: Excellent refactoring with improved modularity.The refactoring into helper functions significantly improves code organization and maintainability. The separation of concerns (loading files, building configs, writing output) makes the code much easier to understand and maintain.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 219-219: Trailing whitespace
(C0303)
[convention] 229-229: Trailing whitespace
(C0303)
[convention] 231-231: Trailing whitespace
(C0303)
[convention] 249-249: Trailing whitespace
(C0303)
[convention] 265-265: Trailing whitespace
(C0303)
[convention] 280-280: Trailing whitespace
(C0303)
[convention] 286-286: Trailing whitespace
(C0303)
[convention] 291-291: Trailing whitespace
(C0303)
[convention] 297-297: Trailing whitespace
(C0303)
[convention] 306-306: Trailing whitespace
(C0303)
[convention] 309-309: Trailing whitespace
(C0303)
[convention] 313-313: Trailing whitespace
(C0303)
[convention] 317-317: Trailing whitespace
(C0303)
[convention] 324-324: Trailing whitespace
(C0303)
[convention] 327-327: Trailing whitespace
(C0303)
[convention] 331-331: Trailing whitespace
(C0303)
[convention] 333-333: Trailing whitespace
(C0303)
[convention] 337-337: Trailing whitespace
(C0303)
[convention] 341-341: Trailing whitespace
(C0303)
[convention] 346-346: Trailing whitespace
(C0303)
[convention] 355-355: Trailing whitespace
(C0303)
[convention] 358-358: Trailing whitespace
(C0303)
[convention] 370-370: Trailing whitespace
(C0303)
[convention] 373-373: Trailing whitespace
(C0303)
[convention] 375-375: Trailing whitespace
(C0303)
[convention] 379-379: Trailing whitespace
(C0303)
[convention] 382-382: Trailing whitespace
(C0303)
[convention] 387-387: Trailing whitespace
(C0303)
[convention] 215-215: Function name "HandleArduinoIDFsettings" doesn't conform to snake_case naming style
(C0103)
[warning] 215-215: Redefining name 'env' from outer scope (line 56)
(W0621)
[convention] 220-220: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
[convention] 222-222: Import outside toplevel (hashlib)
(C0415)
[warning] 241-241: Missing timeout argument for method 'requests.get' can cause your program to hang indefinitely
(W3101)
[warning] 257-257: Using open without explicitly specifying an encoding
(W1514)
[refactor] 225-225: Too many return statements (7/6)
(R0911)
[warning] 268-268: Redefining name 'line' from outer scope (line 2302)
(W0621)
[refactor] 271-274: Unnecessary "elif" after "return", remove the leading "el" from "elif"
(R1705)
[warning] 335-335: Redefining name 'line' from outer scope (line 2302)
(W0621)
[error] 322-322: Possibly using variable 'arduino_libs_mcu' before assignment
(E0606)
[warning] 328-328: Using open without explicitly specifying an encoding
(W1514)
[warning] 328-328: Using open without explicitly specifying an encoding
(W1514)
[refactor] 215-215: Too many statements (89/50)
(R0915)
392-409
: Good simplification using ComponentManager delegation.The refactored function properly delegates component management to the specialized
ComponentManager
class, resulting in cleaner and more maintainable code. The action text generation is also well-implemented.🧰 Tools
🪛 Pylint (3.3.7)
[convention] 392-392: Missing function or method docstring
(C0116)
[convention] 392-392: Function name "HandleCOMPONENTsettings" doesn't conform to snake_case naming style
(C0103)
[warning] 392-392: Redefining name 'env' from outer scope (line 56)
(W0621)
[convention] 393-393: Import outside toplevel (component_manager.ComponentManager)
(C0415)
1845-1849
: Good simplification of linker flag logic.Removing the conditional check and always adding the map file linker flag simplifies the logic while ensuring consistent behavior.
217-221
: Clean integration with ComponentManager for backup restoration.The integration properly delegates backup restoration to the specialized
ComponentManager
class, maintaining separation of concerns and code modularity.🧰 Tools
🪛 Pylint (3.3.7)
[convention] 219-219: Trailing whitespace
(C0303)
[convention] 220-220: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
238-244
: Good use of ComponentManager for Arduino framework restoration.The conditional restoration logic is well-implemented and properly uses the ComponentManager for handling backup operations when the Arduino framework is present.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 241-241: Missing timeout argument for method 'requests.get' can cause your program to hang indefinitely
(W3101)
builder/frameworks/component_manager.py (3)
56-116
: Clean logging implementation.The ComponentLogger class provides a well-structured logging mechanism with change tracking capabilities.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 64-64: Trailing whitespace
(C0303)
[convention] 74-74: Trailing whitespace
(C0303)
[convention] 88-88: Trailing whitespace
(C0303)
[convention] 100-100: Trailing whitespace
(C0303)
569-581
: Excellent protection mechanisms for critical components.The implementation includes robust safeguards:
- Filters out critical ESP32 components that should never be ignored
- Dynamically protects BT/BLE libraries when BT dependencies are detected
- Hardcoded protection for DSP components
This defensive approach prevents accidental removal of essential system components.
Also applies to: 593-622, 909-917
1056-1146
: Well-designed orchestration using composition pattern.The ComponentManager class excellently coordinates between specialized handlers (ComponentHandler, LibraryIgnoreHandler, BackupManager) while maintaining clear separation of concerns. This design makes the code maintainable and testable.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 1064-1064: Trailing whitespace
(C0303)
[convention] 1082-1082: Trailing whitespace
(C0303)
[convention] 1083-1083: Line too long (111/100)
(C0301)
[convention] 1097-1097: Trailing whitespace
(C0303)
[convention] 1102-1102: Trailing whitespace
(C0303)
[convention] 1111-1111: Trailing whitespace
(C0303)
[convention] 1125-1125: Trailing whitespace
(C0303)
[convention] 1137-1137: Trailing whitespace
(C0303)
platform.py (2)
307-315
: Excellent network request handling.The implementation now properly handles timeouts and errors when fetching the Arduino framework configuration, addressing previous concerns about indefinite hanging.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 314-314: Use lazy % formatting in logging functions
(W1203)
463-468
: Fixed method signature resolves undefined variable issue.The
_handle_dfuutil_tool
method now correctly acceptsvariables
as a parameter, fixing the previous undefined variable reference.🧰 Tools
🪛 Pylint (3.3.7)
[warning] 463-463: Unused argument 'for_download'
(W0613)
builder/frameworks/arduino.py (4)
397-453
: Well-implemented secure deletion functions.The secure deletion functions provide robust error handling, proper logging, and support for write-protected files. Good security practices!
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 430-430: Catching too general exception Exception
(W0718)
[warning] 415-415: Use lazy % formatting in logging functions
(W1203)
[warning] 424-424: Use lazy % formatting in logging functions
(W1203)
[warning] 428-428: Use lazy % formatting in logging functions
(W1203)
[warning] 431-431: Use lazy % formatting in logging functions
(W1203)
[warning] 450-450: Catching too general exception Exception
(W0718)
[warning] 443-443: Use lazy % formatting in logging functions
(W1203)
[warning] 447-447: Use lazy % formatting in logging functions
(W1203)
[warning] 451-451: Use lazy % formatting in logging functions
(W1203)
541-594
: Excellent implementation of secure framework cleanup.The cleanup functions properly validate paths before deletion, use the secure deletion utilities, and provide clear success/failure feedback. The approach significantly improves safety compared to direct deletion.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 547-548: Use lazy % formatting in logging functions
(W1203)
[warning] 551-552: Use lazy % formatting in logging functions
(W1203)
[warning] 560-561: Use lazy % formatting in logging functions
(W1203)
[warning] 566-567: Use lazy % formatting in logging functions
(W1203)
[warning] 570-571: Use lazy % formatting in logging functions
(W1203)
[warning] 579-580: Use lazy % formatting in logging functions
(W1203)
663-664
: Correct implementation of BUILD_UNFLAGS initialization.The direct check
if not env.get('BUILD_UNFLAGS')
is the proper way to verify if the variable needs initialization. This addresses the previous concern about fragile string length checking.
1027-1034
: Clean integration with ComponentManager.Good separation of concerns by delegating component management to a dedicated module. The silent action implementation is properly documented.
@coderabbitai full review |
✅ Actions performedFull review triggered. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 6
♻️ Duplicate comments (6)
builder/main.py (1)
340-345
:⚠️ Potential issueRemove unused
cli_args
variable.The
cli_args
variable is assigned but never appended to the command.- # Command Line Parameter, after -- - cli_args = [] - if "--" in sys.argv: - dash_index = sys.argv.index("--") - if dash_index + 1 < len(sys.argv): - cli_args = sys.argv[dash_index + 1 :] + # Command Line Parameter, after -- + if "--" in sys.argv: + dash_index = sys.argv.index("--") + if dash_index + 1 < len(sys.argv): + cmd.extend(sys.argv[dash_index + 1 :])🧰 Tools
🪛 Ruff (0.11.9)
344-344: Local variable
cli_args
is assigned to but never usedRemove assignment to unused variable
cli_args
(F841)
🪛 Pylint (3.3.7)
[warning] 340-340: Unused variable 'cli_args'
(W0612)
builder/frameworks/espidf.py (3)
221-223
: Consider using full MD5 hash or SHA-256 for better collision resistanceTruncating the MD5 hash to 16 characters reduces the hash space significantly, increasing collision probability. Consider using the full hash or switching to SHA-256.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 222-222: Import outside toplevel (hashlib)
(C0415)
320-325
: Potential use of variable before assignment.The variable
arduino_libs_mcu
is defined only when "arduino" is in the framework (line 179), butwrite_sdkconfig_file
uses it unconditionally. This could cause a NameError if the function is called outside the Arduino framework context.🧰 Tools
🪛 Pylint (3.3.7)
[warning] 324-324: String statement has no effect
(W0105)
[error] 325-325: Possibly using variable 'arduino_libs_mcu' before assignment
(E0606)
2303-2303
: Avoid hardcoding partition offset value.The
bound
variable is hardcoded to0x10000
instead of reading from board configuration. This reduces flexibility for boards with custom partition layouts.🧰 Tools
🪛 Pylint (3.3.7)
[convention] 2303-2303: Constant name "bound" doesn't conform to UPPER_CASE naming style
(C0103)
platform.py (1)
94-97
: 🛠️ Refactor suggestionUse lazy formatting in logging functions.
The logging calls use f-string formatting which eagerly evaluates the message even if the log level is disabled.
Apply this diff to use lazy formatting:
- logger.error(f"Filesystem error in {operation_func.__name__}: {e}") + logger.error("Filesystem error in %s: %s", operation_func.__name__, e) - logger.error(f"Unexpected error in {operation_func.__name__}: {e}") + logger.error("Unexpected error in %s: %s", operation_func.__name__, e) - logger.debug(f"Directory removed: {path}") + logger.debug("Directory removed: %s", path) - logger.debug(f"File copied: {src} -> {dst}") + logger.debug("File copied: %s -> %s", src, dst)Also applies to: 107-107, 116-116
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 94-94: Use lazy % formatting in logging functions
(W1203)
[warning] 97-97: Use lazy % formatting in logging functions
(W1203)
builder/frameworks/arduino.py (1)
107-116
: Default threshold values exceed Windows command line limit.The default values (38000-50000) significantly exceed the Windows command line limit of ~32768 characters, which could cause build failures.
🧹 Nitpick comments (8)
examples/arduino-blink/platformio.ini (1)
126-128
: Consider addingwifi
to lib_ignore for ESP32-H2.The ESP32-H2 doesn't have built-in WiFi capabilities (it's designed for Thread/Zigbee), so the
wifi
library should likely be ignored here as well, similar to other environments.lib_ignore = + wifi spiffs NetworkClientSecure
builder/main.py (1)
276-276
: Remove trailing whitespace.env.Exit(1) return - + env["FS_START"] = _parse_size(fs["offset"])🧰 Tools
🪛 Pylint (3.3.7)
[convention] 276-276: Trailing whitespace
(C0303)
builder/frameworks/espidf.py (1)
190-201
: Good security addition for path traversal detection.The function provides protection against common path traversal patterns. Consider these enhancements for more comprehensive coverage:
- Add Unicode variations (e.g.,
%u002e%u002e%u002f
)- Check for null byte injections (
%00
)- Consider using
urllib.parse.urlparse()
to properly parse and validate URL components🧰 Tools
🪛 Pylint (3.3.7)
[convention] 198-198: Trailing whitespace
(C0303)
builder/frameworks/arduino.py (5)
329-358
: Add docstrings to PathCache class and its methods.The PathCache class provides good performance optimization, but lacks documentation. Consider adding docstrings to explain its purpose and usage.
# Cache class for frequently used paths class PathCache: + """Cache for frequently accessed framework-related paths. + + Provides lazy-loaded properties for framework directories to avoid + repeated package directory lookups. + + Args: + platform: PlatformIO platform instance + mcu: Target MCU type (e.g., 'esp32', 'esp32s2') + """ def __init__(self, platform, mcu): self.platform = platform self.mcu = mcu self._framework_dir = None self._framework_lib_dir = None self._sdk_dir = None @property def framework_dir(self): + """Get the framework directory path (lazy-loaded).""" if self._framework_dir is None: self._framework_dir = self.platform.get_package_dir( "framework-arduinoespressif32") return self._framework_dir🧰 Tools
🪛 Pylint (3.3.7)
[convention] 329-329: Missing class docstring
(C0115)
[warning] 330-330: Redefining name 'platform' from outer scope (line 599)
(W0621)
[warning] 330-330: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 338-338: Missing function or method docstring
(C0116)
[convention] 345-345: Missing function or method docstring
(C0116)
[convention] 352-352: Missing function or method docstring
(C0116)
415-451
: Use lazy % formatting in logging functions.The logging statements use f-strings which are evaluated immediately. For better performance, use lazy % formatting as recommended by pylint.
- logging.warning(f"File does not exist: {file_path}") + logging.warning("File does not exist: %s", file_path)- logging.info(f"File deleted: {file_path}") + logging.info("File deleted: %s", file_path)- logging.error(f"No permission to delete: {file_path}") + logging.error("No permission to delete: %s", file_path)- logging.error(f"Error deleting {file_path}: {e}") + logging.error("Error deleting %s: %s", file_path, e)Apply similar changes to all logging statements in both functions.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 430-430: Catching too general exception Exception
(W0718)
[warning] 415-415: Use lazy % formatting in logging functions
(W1203)
[warning] 424-424: Use lazy % formatting in logging functions
(W1203)
[warning] 428-428: Use lazy % formatting in logging functions
(W1203)
[warning] 431-431: Use lazy % formatting in logging functions
(W1203)
[warning] 450-450: Catching too general exception Exception
(W0718)
[warning] 443-443: Use lazy % formatting in logging functions
(W1203)
[warning] 447-447: Use lazy % formatting in logging functions
(W1203)
[warning] 451-451: Use lazy % formatting in logging functions
(W1203)
719-721
: Function name should follow snake_case convention.Rename
get_MD5_hash
toget_md5_hash
to follow Python naming conventions.-def get_MD5_hash(phrase): +def get_md5_hash(phrase): return hashlib.md5(phrase.encode('utf-8')).hexdigest()[:16]Also update the call site at line 743:
- expected_hash = get_MD5_hash(custom_options.strip() + mcu) + expected_hash = get_md5_hash(custom_options.strip() + mcu)🧰 Tools
🪛 Pylint (3.3.7)
[convention] 719-719: Missing function or method docstring
(C0116)
[convention] 719-719: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
738-738
: Specify encoding when opening file.Add explicit encoding to avoid potential issues with non-ASCII characters.
- with open(last_sdkconfig_path) as src: + with open(last_sdkconfig_path, encoding='utf-8') as src:🧰 Tools
🪛 Pylint (3.3.7)
[warning] 738-738: Using open without explicitly specifying an encoding
(W1514)
952-952
: Remove trailing whitespace.Line 952 has trailing whitespace that should be removed.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 952-952: Trailing whitespace
(C0303)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (8)
builder/frameworks/arduino.py
(1 hunks)builder/frameworks/component_manager.py
(1 hunks)builder/frameworks/espidf.py
(8 hunks)builder/main.py
(17 hunks)examples/arduino-blink/platformio.ini
(7 hunks)examples/arduino-rmt-blink/platformio.ini
(1 hunks)examples/tasmota_platformio_override.ini
(0 hunks)platform.py
(6 hunks)
💤 Files with no reviewable changes (1)
- examples/tasmota_platformio_override.ini
🧰 Additional context used
🧬 Code Graph Analysis (2)
builder/main.py (1)
builder/frameworks/espidf.py (1)
_parse_size
(2284-2294)
builder/frameworks/espidf.py (2)
builder/frameworks/arduino.py (1)
get_MD5_hash
(719-720)builder/frameworks/component_manager.py (1)
ComponentManager
(1056-1145)
🪛 Pylint (3.3.7)
builder/main.py
[error] 23-30: Unable to import 'SCons.Script'
(E0401)
[error] 32-32: Unable to import 'platformio.project.helpers'
(E0401)
[error] 33-33: Unable to import 'platformio.util'
(E0401)
[convention] 45-45: Function name "BeforeUpload" doesn't conform to snake_case naming style
(C0103)
[warning] 45-45: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 45-45: Unused argument 'target'
(W0613)
[warning] 45-45: Unused argument 'source'
(W0613)
[warning] 95-95: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 101-101: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 110-110: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 119-119: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 133-133: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 162-162: Redefining name 'env' from outer scope (line 36)
(W0621)
[convention] 170-170: Formatting a regular string which could be an f-string
(C0209)
[refactor] 162-162: Either all return statements in a function should return an expression, or none of them should.
(R1710)
[convention] 220-220: Trailing whitespace
(C0303)
[warning] 213-213: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 221-221: Unused variable 'sizes'
(W0612)
[convention] 240-241: Formatting a regular string which could be an f-string
(C0209)
[warning] 256-256: Redefining name 'env' from outer scope (line 36)
(W0621)
[convention] 276-276: Trailing whitespace
(C0303)
[warning] 289-289: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 306-306: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 306-306: Unused argument 'target'
(W0613)
[warning] 306-306: Unused argument 'source'
(W0613)
[warning] 340-340: Unused variable 'cli_args'
(W0612)
[convention] 363-363: Formatting a regular string which could be an f-string
(C0209)
[convention] 368-368: Constant name "toolchain_arch" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 382-382: Formatting a regular string which could be an f-string
(C0209)
[convention] 383-383: Formatting a regular string which could be an f-string
(C0209)
[convention] 384-384: Formatting a regular string which could be an f-string
(C0209)
[convention] 385-385: Formatting a regular string which could be an f-string
(C0209)
[convention] 562-562: Constant name "upload_protocol" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 676-676: Formatting a regular string which could be an f-string
(C0209)
[convention] 724-724: Formatting a regular string which could be an f-string
(C0209)
builder/frameworks/espidf.py
[warning] 158-158: Redefining name 'silent_action' from outer scope (line 2224)
(W0621)
[convention] 198-198: Trailing whitespace
(C0303)
[convention] 219-219: Trailing whitespace
(C0303)
[convention] 229-229: Trailing whitespace
(C0303)
[convention] 231-231: Trailing whitespace
(C0303)
[convention] 249-249: Trailing whitespace
(C0303)
[convention] 265-265: Trailing whitespace
(C0303)
[convention] 280-280: Trailing whitespace
(C0303)
[convention] 286-286: Trailing whitespace
(C0303)
[convention] 291-291: Trailing whitespace
(C0303)
[convention] 297-297: Trailing whitespace
(C0303)
[convention] 306-306: Trailing whitespace
(C0303)
[convention] 309-309: Trailing whitespace
(C0303)
[convention] 313-313: Trailing whitespace
(C0303)
[convention] 317-317: Trailing whitespace
(C0303)
[convention] 327-327: Trailing whitespace
(C0303)
[convention] 330-330: Trailing whitespace
(C0303)
[convention] 334-334: Trailing whitespace
(C0303)
[convention] 336-336: Trailing whitespace
(C0303)
[convention] 340-340: Trailing whitespace
(C0303)
[convention] 344-344: Trailing whitespace
(C0303)
[convention] 349-349: Trailing whitespace
(C0303)
[convention] 358-358: Trailing whitespace
(C0303)
[convention] 361-361: Trailing whitespace
(C0303)
[convention] 373-373: Trailing whitespace
(C0303)
[convention] 376-376: Trailing whitespace
(C0303)
[convention] 378-378: Trailing whitespace
(C0303)
[convention] 382-382: Trailing whitespace
(C0303)
[convention] 385-385: Trailing whitespace
(C0303)
[convention] 390-390: Trailing whitespace
(C0303)
[convention] 220-220: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
[convention] 222-222: Import outside toplevel (hashlib)
(C0415)
[warning] 257-257: Using open without explicitly specifying an encoding
(W1514)
[refactor] 225-225: Too many return statements (7/6)
(R0911)
[warning] 268-268: Redefining name 'line' from outer scope (line 2305)
(W0621)
[refactor] 271-274: Unnecessary "elif" after "return", remove the leading "el" from "elif"
(R1705)
[warning] 338-338: Redefining name 'line' from outer scope (line 2305)
(W0621)
[warning] 324-324: String statement has no effect
(W0105)
[error] 325-325: Possibly using variable 'arduino_libs_mcu' before assignment
(E0606)
[warning] 331-331: Using open without explicitly specifying an encoding
(W1514)
[warning] 331-331: Using open without explicitly specifying an encoding
(W1514)
[convention] 395-395: Missing function or method docstring
(C0116)
[convention] 395-395: Function name "HandleCOMPONENTsettings" doesn't conform to snake_case naming style
(C0103)
[warning] 395-395: Redefining name 'env' from outer scope (line 56)
(W0621)
[convention] 396-396: Import outside toplevel (component_manager.ComponentManager)
(C0415)
[convention] 2221-2221: Import outside toplevel (component_manager.ComponentManager)
(C0415)
[convention] 2244-2244: Import outside toplevel (component_manager.ComponentManager)
(C0415)
[convention] 2303-2303: Constant name "bound" doesn't conform to UPPER_CASE naming style
(C0103)
platform.py
[error] 25-25: Unable to import 'platformio.public'
(E0401)
[error] 26-26: Unable to import 'platformio.proc'
(E0401)
[error] 27-27: Unable to import 'platformio.project.config'
(E0401)
[error] 28-28: Unable to import 'platformio.package.manager.tool'
(E0401)
[warning] 94-94: Use lazy % formatting in logging functions
(W1203)
[warning] 97-97: Use lazy % formatting in logging functions
(W1203)
[warning] 107-107: Use lazy % formatting in logging functions
(W1203)
[warning] 116-116: Use lazy % formatting in logging functions
(W1203)
[warning] 192-192: Use lazy % formatting in logging functions
(W1203)
[warning] 195-195: Use lazy % formatting in logging functions
(W1203)
[warning] 203-203: Using open without explicitly specifying an encoding
(W1514)
[warning] 210-210: Use lazy % formatting in logging functions
(W1203)
[warning] 214-214: Use lazy % formatting in logging functions
(W1203)
[warning] 219-222: Use lazy % formatting in logging functions
(W1203)
[warning] 227-227: Use lazy % formatting in logging functions
(W1203)
[warning] 233-235: Use lazy % formatting in logging functions
(W1203)
[warning] 251-251: Use lazy % formatting in logging functions
(W1203)
[warning] 277-277: Use lazy % formatting in logging functions
(W1203)
[warning] 288-288: Use lazy % formatting in logging functions
(W1203)
[warning] 292-292: Use lazy % formatting in logging functions
(W1203)
[warning] 314-314: Use lazy % formatting in logging functions
(W1203)
[warning] 362-362: Use lazy % formatting in logging functions
(W1203)
[warning] 409-409: Using open without explicitly specifying an encoding
(W1514)
[warning] 415-415: Use lazy % formatting in logging functions
(W1203)
[warning] 463-463: Unused argument 'for_download'
(W0613)
[warning] 505-505: Catching too general exception Exception
(W0718)
[warning] 506-506: Use lazy % formatting in logging functions
(W1203)
[convention] 19-19: standard import "subprocess" should be placed before third party import "requests"
(C0411)
[convention] 20-20: standard import "sys" should be placed before third party import "requests"
(C0411)
[convention] 21-21: standard import "shutil" should be placed before third party import "requests"
(C0411)
[convention] 22-22: standard import "logging" should be placed before third party import "requests"
(C0411)
[convention] 23-23: standard import "typing.Optional" should be placed before third party import "requests"
(C0411)
[refactor] 609-621: Unnecessary "elif" after "return", remove the leading "el" from "elif"
(R1705)
[refactor] 612-615: Unnecessary "else" after "return", remove the "else" and de-indent the code inside it
(R1705)
builder/frameworks/arduino.py
[convention] 952-952: Trailing whitespace
(C0303)
[convention] 993-993: Trailing whitespace
(C0303)
[convention] 1036-1036: Trailing whitespace
(C0303)
[error] 38-38: Unable to import 'semantic_version'
(E0401)
[error] 39-39: Unable to import 'SCons.Script'
(E0401)
[error] 40-40: Unable to import 'platformio'
(E0401)
[error] 41-41: Unable to import 'platformio.package.version'
(E0401)
[error] 42-42: Unable to import 'platformio.package.manager.tool'
(E0401)
[warning] 91-91: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 122-124: Use lazy % formatting in logging functions
(W1203)
[warning] 129-129: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 184-185: Use lazy % formatting in logging functions
(W1203)
[warning] 190-190: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 190-190: Redefining name 'config' from outer scope (line 600)
(W0621)
[warning] 190-190: Redefining name 'current_env_section' from outer scope (line 608)
(W0621)
[warning] 210-210: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[warning] 268-268: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 268-268: Redefining name 'config' from outer scope (line 600)
(W0621)
[warning] 268-268: Redefining name 'current_env_section' from outer scope (line 608)
(W0621)
[warning] 281-281: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 329-329: Missing class docstring
(C0115)
[warning] 330-330: Redefining name 'platform' from outer scope (line 599)
(W0621)
[warning] 330-330: Redefining name 'mcu' from outer scope (line 604)
(W0621)
[convention] 338-338: Missing function or method docstring
(C0116)
[convention] 345-345: Missing function or method docstring
(C0116)
[convention] 352-352: Missing function or method docstring
(C0116)
[warning] 389-389: Catching too general exception Exception
(W0718)
[convention] 368-368: Import outside toplevel (winreg)
(C0415)
[error] 368-368: Unable to import 'winreg'
(E0401)
[warning] 430-430: Catching too general exception Exception
(W0718)
[warning] 415-415: Use lazy % formatting in logging functions
(W1203)
[warning] 424-424: Use lazy % formatting in logging functions
(W1203)
[warning] 428-428: Use lazy % formatting in logging functions
(W1203)
[warning] 431-431: Use lazy % formatting in logging functions
(W1203)
[warning] 450-450: Catching too general exception Exception
(W0718)
[warning] 443-443: Use lazy % formatting in logging functions
(W1203)
[warning] 447-447: Use lazy % formatting in logging functions
(W1203)
[warning] 451-451: Use lazy % formatting in logging functions
(W1203)
[warning] 485-485: Catching too general exception Exception
(W0718)
[warning] 486-486: Use lazy % formatting in logging functions
(W1203)
[warning] 521-521: Use lazy % formatting in logging functions
(W1203)
[warning] 525-525: Use lazy % formatting in logging functions
(W1203)
[warning] 533-533: Use lazy % formatting in logging functions
(W1203)
[warning] 534-534: Use lazy % formatting in logging functions
(W1203)
[warning] 536-536: Use lazy % formatting in logging functions
(W1203)
[warning] 547-548: Use lazy % formatting in logging functions
(W1203)
[warning] 551-552: Use lazy % formatting in logging functions
(W1203)
[warning] 560-561: Use lazy % formatting in logging functions
(W1203)
[warning] 566-567: Use lazy % formatting in logging functions
(W1203)
[warning] 570-571: Use lazy % formatting in logging functions
(W1203)
[warning] 579-580: Use lazy % formatting in logging functions
(W1203)
[convention] 608-608: Constant name "current_env_section" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 612-612: Constant name "entry_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 613-613: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 614-614: Constant name "flag_custom_component_remove" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 615-615: Constant name "flag_custom_component_add" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 616-616: Constant name "flag_lib_ignore" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 619-619: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 623-623: Constant name "flag_lib_ignore" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 627-627: Constant name "flag_custom_component_remove" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 632-632: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 635-635: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 639-639: Constant name "extra_flags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 641-641: Constant name "extra_flags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 643-643: Constant name "framework_reinstall" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 650-650: Constant name "flag_any_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 666-666: Constant name "build_unflags" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 683-683: Missing function or method docstring
(C0116)
[warning] 695-695: Catching too general exception Exception
(W0718)
[convention] 719-719: Missing function or method docstring
(C0116)
[convention] 719-719: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
[warning] 738-738: Using open without explicitly specifying an encoding
(W1514)
[convention] 752-752: Missing function or method docstring
(C0116)
[convention] 766-766: Missing function or method docstring
(C0116)
[warning] 791-791: Access to a protected member _cache of a client class
(W0212)
[warning] 794-794: Access to a protected member _cache of a client class
(W0212)
[warning] 795-795: Access to a protected member _cache of a client class
(W0212)
[warning] 798-798: Access to a protected member _cache of a client class
(W0212)
[warning] 825-825: Redefining name 'env' from outer scope (line 597)
(W0621)
[refactor] 860-860: Too many local variables (20/15)
(R0914)
[warning] 860-860: Redefining name 'env' from outer scope (line 597)
(W0621)
[warning] 926-926: Redefining name 'env' from outer scope (line 597)
(W0621)
[convention] 991-991: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
[convention] 1012-1012: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
builder/frameworks/component_manager.py
[convention] 28-28: Trailing whitespace
(C0303)
[convention] 53-53: Line too long (114/100)
(C0301)
[convention] 64-64: Trailing whitespace
(C0303)
[convention] 74-74: Trailing whitespace
(C0303)
[convention] 88-88: Trailing whitespace
(C0303)
[convention] 100-100: Trailing whitespace
(C0303)
[convention] 126-126: Trailing whitespace
(C0303)
[convention] 143-143: Trailing whitespace
(C0303)
[convention] 144-144: Line too long (111/100)
(C0301)
[convention] 160-160: Trailing whitespace
(C0303)
[convention] 165-165: Trailing whitespace
(C0303)
[convention] 168-168: Trailing whitespace
(C0303)
[convention] 171-171: Trailing whitespace
(C0303)
[convention] 173-173: Trailing whitespace
(C0303)
[convention] 177-177: Trailing whitespace
(C0303)
[convention] 197-197: Trailing whitespace
(C0303)
[convention] 217-217: Trailing whitespace
(C0303)
[convention] 235-235: Trailing whitespace
(C0303)
[convention] 241-241: Trailing whitespace
(C0303)
[convention] 245-245: Trailing whitespace
(C0303)
[convention] 260-260: Trailing whitespace
(C0303)
[convention] 277-277: Trailing whitespace
(C0303)
[convention] 280-280: Trailing whitespace
(C0303)
[convention] 300-300: Trailing whitespace
(C0303)
[convention] 318-318: Trailing whitespace
(C0303)
[convention] 319-319: Line too long (101/100)
(C0301)
[convention] 332-332: Trailing whitespace
(C0303)
[convention] 337-337: Trailing whitespace
(C0303)
[convention] 341-341: Trailing whitespace
(C0303)
[convention] 347-347: Trailing whitespace
(C0303)
[convention] 361-361: Trailing whitespace
(C0303)
[convention] 366-366: Trailing whitespace
(C0303)
[convention] 368-368: Trailing whitespace
(C0303)
[convention] 374-374: Trailing whitespace
(C0303)
[convention] 384-384: Line too long (102/100)
(C0301)
[convention] 393-393: Trailing whitespace
(C0303)
[convention] 408-408: Trailing whitespace
(C0303)
[convention] 419-419: Trailing whitespace
(C0303)
[convention] 422-422: Trailing whitespace
(C0303)
[convention] 425-425: Trailing whitespace
(C0303)
[convention] 436-436: Trailing whitespace
(C0303)
[convention] 438-438: Trailing whitespace
(C0303)
[convention] 450-450: Trailing whitespace
(C0303)
[convention] 453-453: Trailing whitespace
(C0303)
[convention] 463-463: Trailing whitespace
(C0303)
[convention] 466-466: Trailing whitespace
(C0303)
[convention] 470-470: Trailing whitespace
(C0303)
[convention] 472-472: Trailing whitespace
(C0303)
[convention] 480-480: Trailing whitespace
(C0303)
[convention] 483-483: Trailing whitespace
(C0303)
[convention] 487-487: Trailing whitespace
(C0303)
[convention] 500-500: Trailing whitespace
(C0303)
[convention] 519-519: Trailing whitespace
(C0303)
[convention] 531-531: Trailing whitespace
(C0303)
[convention] 534-534: Trailing whitespace
(C0303)
[convention] 539-539: Trailing whitespace
(C0303)
[convention] 554-554: Trailing whitespace
(C0303)
[convention] 559-559: Trailing whitespace
(C0303)
[convention] 568-568: Trailing whitespace
(C0303)
[convention] 582-582: Trailing whitespace
(C0303)
[convention] 587-587: Trailing whitespace
(C0303)
[convention] 589-589: Trailing whitespace
(C0303)
[convention] 592-592: Trailing whitespace
(C0303)
[convention] 607-607: Trailing whitespace
(C0303)
[convention] 612-612: Trailing whitespace
(C0303)
[convention] 615-615: Trailing whitespace
(C0303)
[convention] 619-619: Trailing whitespace
(C0303)
[convention] 622-622: Trailing whitespace
(C0303)
[convention] 638-638: Trailing whitespace
(C0303)
[convention] 653-653: Trailing whitespace
(C0303)
[convention] 666-666: Trailing whitespace
(C0303)
[convention] 669-669: Trailing whitespace
(C0303)
[convention] 672-672: Trailing whitespace
(C0303)
[convention] 681-681: Line too long (105/100)
(C0301)
[convention] 684-684: Trailing whitespace
(C0303)
[convention] 686-686: Trailing whitespace
(C0303)
[convention] 703-703: Trailing whitespace
(C0303)
[convention] 712-712: Trailing whitespace
(C0303)
[convention] 714-714: Trailing whitespace
(C0303)
[convention] 732-732: Trailing whitespace
(C0303)
[convention] 756-756: Trailing whitespace
(C0303)
[convention] 757-757: Line too long (105/100)
(C0301)
[convention] 813-813: Trailing whitespace
(C0303)
[convention] 817-817: Trailing whitespace
(C0303)
[convention] 821-821: Trailing whitespace
(C0303)
[convention] 824-824: Trailing whitespace
(C0303)
[convention] 842-842: Trailing whitespace
(C0303)
[convention] 844-844: Trailing whitespace
(C0303)
[convention] 848-848: Trailing whitespace
(C0303)
[convention] 851-851: Trailing whitespace
(C0303)
[convention] 857-857: Trailing whitespace
(C0303)
[convention] 863-863: Trailing whitespace
(C0303)
[convention] 867-867: Trailing whitespace
(C0303)
[convention] 874-874: Trailing whitespace
(C0303)
[convention] 877-877: Trailing whitespace
(C0303)
[convention] 879-879: Trailing whitespace
(C0303)
[convention] 890-890: Trailing whitespace
(C0303)
[convention] 894-894: Trailing whitespace
(C0303)
[convention] 899-899: Trailing whitespace
(C0303)
[convention] 903-903: Trailing whitespace
(C0303)
[convention] 906-906: Trailing whitespace
(C0303)
[convention] 913-913: Trailing whitespace
(C0303)
[convention] 918-918: Trailing whitespace
(C0303)
[convention] 930-930: Trailing whitespace
(C0303)
[convention] 937-937: Trailing whitespace
(C0303)
[convention] 941-941: Trailing whitespace
(C0303)
[convention] 945-945: Trailing whitespace
(C0303)
[convention] 951-951: Trailing whitespace
(C0303)
[convention] 956-956: Trailing whitespace
(C0303)
[convention] 975-975: Trailing whitespace
(C0303)
[convention] 978-978: Trailing whitespace
(C0303)
[convention] 989-989: Trailing whitespace
(C0303)
[convention] 992-992: Trailing whitespace
(C0303)
[convention] 1005-1005: Trailing whitespace
(C0303)
[convention] 1017-1017: Trailing whitespace
(C0303)
[convention] 1028-1028: Trailing whitespace
(C0303)
[convention] 1031-1031: Trailing whitespace
(C0303)
[convention] 1034-1034: Trailing whitespace
(C0303)
[convention] 1050-1050: Trailing whitespace
(C0303)
[convention] 1064-1064: Trailing whitespace
(C0303)
[convention] 1082-1082: Trailing whitespace
(C0303)
[convention] 1083-1083: Line too long (111/100)
(C0301)
[convention] 1097-1097: Trailing whitespace
(C0303)
[convention] 1102-1102: Trailing whitespace
(C0303)
[convention] 1111-1111: Trailing whitespace
(C0303)
[convention] 1125-1125: Trailing whitespace
(C0303)
[convention] 1137-1137: Trailing whitespace
(C0303)
[convention] 1-1: Too many lines in module (1145/1000)
(C0302)
[refactor] 20-20: Too many instance attributes (8/7)
(R0902)
[refactor] 20-20: Too few public methods (0/2)
(R0903)
[warning] 195-195: Catching too general exception Exception
(W0718)
[warning] 215-215: Catching too general exception Exception
(W0718)
[warning] 298-298: Catching too general exception Exception
(W0718)
[warning] 316-316: Catching too general exception Exception
(W0718)
[warning] 488-488: Catching too general exception Exception
(W0718)
[refactor] 118-118: Too few public methods (1/2)
(R0903)
[warning] 590-590: Catching too general exception Exception
(W0718)
[warning] 620-620: Catching too general exception Exception
(W0718)
[warning] 682-682: Catching too general exception Exception
(W0718)
[warning] 710-710: Catching too general exception Exception
(W0718)
[warning] 954-954: Catching too general exception Exception
(W0718)
[refactor] 492-492: Too few public methods (1/2)
(R0903)
[warning] 1035-1035: Unused argument 'target'
(W0613)
[warning] 1035-1035: Unused argument 'source'
(W0613)
[warning] 1035-1035: Unused argument 'env'
(W0613)
[convention] 16-16: standard import "os.path.join" should be placed before third party imports "yaml", "yaml.SafeLoader"
(C0411)
[convention] 17-17: standard import "typing.Set" should be placed before third party imports "yaml", "yaml.SafeLoader"
(C0411)
🪛 Ruff (0.11.9)
builder/main.py
221-221: Local variable sizes
is assigned to but never used
Remove assignment to unused variable sizes
(F841)
344-344: Local variable cli_args
is assigned to but never used
Remove assignment to unused variable cli_args
(F841)
🔇 Additional comments (21)
examples/arduino-rmt-blink/platformio.ini (1)
5-7
: LGTM! Consistent library exclusion across all board variants.The
lib_ignore
directives are consistently applied to all ESP32 board environments, which helps maintain a cleaner and more efficient build process by excluding unused libraries.Also applies to: 15-17, 25-27, 35-37
examples/arduino-blink/platformio.ini (1)
15-17
: Library exclusions appropriately configured for most boards.The
lib_ignore
directives are properly configured across the board variants, with intentional variations based on board capabilities.Also applies to: 38-40, 60-62, 81-83, 111-113, 141-143
builder/main.py (5)
45-50
: Excellent documentation improvements!The addition of comprehensive docstrings to all helper functions significantly improves code maintainability and follows Python best practices.
Also applies to: 65-69, 86-93, 95-98, 101-107, 110-117, 119-131, 133-143, 145-160
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 45-45: Function name "BeforeUpload" doesn't conform to snake_case naming style
(C0103)
[warning] 45-45: Redefining name 'env' from outer scope (line 36)
(W0621)
[warning] 45-45: Unused argument 'target'
(W0613)
[warning] 45-45: Unused argument 'source'
(W0613)
162-211
: Robust partition table parsing with improved error handling.The enhanced
_parse_partitions
function properly handles errors, sets application offsets, and integrates well with the debug configuration system.🧰 Tools
🪛 Pylint (3.3.7)
[warning] 162-162: Redefining name 'env' from outer scope (line 36)
(W0621)
[convention] 170-170: Formatting a regular string which could be an f-string
(C0209)
[warning] 180-180: Using open without explicitly specifying an encoding
(W1514)
[refactor] 162-162: Either all return statements in a function should return an expression, or none of them should.
(R1710)
295-304
: Well-implemented configuration check function.The
check_lib_archive_exists
function properly checks for thelib_archive
option across all project configuration sections, supporting the weak definitions feature.
441-446
: Smart handling of lib_archive configuration.The code properly sets
lib_archive
to False when not explicitly configured, enabling weak definitions in the framework and libraries as intended.
761-780
: Excellent addition of flexible firmware metrics targets!The dual targets (
metrics
andmetrics-only
) provide users with flexibility to analyze firmware size with or without rebuilding. The support for CLI arguments makes it highly configurable.builder/frameworks/espidf.py (7)
156-161
: LGTM! Good helper function for cleaner build output.This helper function properly creates silent SCons actions by suppressing their command output, which improves the build experience by reducing noise.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 158-158: Redefining name 'silent_action' from outer scope (line 2224)
(W0621)
166-166
: Good fix for Arduino libs path construction.Using
join()
instead of string concatenation for path construction is the correct approach for cross-platform compatibility.Also applies to: 179-179
215-392
: Excellent refactoring of HandleArduinoIDFsettings!The function is now well-organized with clear helper functions for:
- MD5 hash generation
- Custom sdkconfig file loading (with security checks)
- Flag extraction and building
- Flash configuration
- Final sdkconfig writing
This modular approach greatly improves maintainability and readability.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 219-219: Trailing whitespace
(C0303)
[convention] 229-229: Trailing whitespace
(C0303)
[convention] 231-231: Trailing whitespace
(C0303)
[convention] 249-249: Trailing whitespace
(C0303)
[convention] 265-265: Trailing whitespace
(C0303)
[convention] 280-280: Trailing whitespace
(C0303)
[convention] 286-286: Trailing whitespace
(C0303)
[convention] 291-291: Trailing whitespace
(C0303)
[convention] 297-297: Trailing whitespace
(C0303)
[convention] 306-306: Trailing whitespace
(C0303)
[convention] 309-309: Trailing whitespace
(C0303)
[convention] 313-313: Trailing whitespace
(C0303)
[convention] 317-317: Trailing whitespace
(C0303)
[convention] 327-327: Trailing whitespace
(C0303)
[convention] 330-330: Trailing whitespace
(C0303)
[convention] 334-334: Trailing whitespace
(C0303)
[convention] 336-336: Trailing whitespace
(C0303)
[convention] 340-340: Trailing whitespace
(C0303)
[convention] 344-344: Trailing whitespace
(C0303)
[convention] 349-349: Trailing whitespace
(C0303)
[convention] 358-358: Trailing whitespace
(C0303)
[convention] 361-361: Trailing whitespace
(C0303)
[convention] 373-373: Trailing whitespace
(C0303)
[convention] 376-376: Trailing whitespace
(C0303)
[convention] 378-378: Trailing whitespace
(C0303)
[convention] 382-382: Trailing whitespace
(C0303)
[convention] 385-385: Trailing whitespace
(C0303)
[convention] 390-390: Trailing whitespace
(C0303)
[convention] 215-215: Function name "HandleArduinoIDFsettings" doesn't conform to snake_case naming style
(C0103)
[warning] 215-215: Redefining name 'env' from outer scope (line 56)
(W0621)
[convention] 220-220: Function name "get_MD5_hash" doesn't conform to snake_case naming style
(C0103)
[convention] 222-222: Import outside toplevel (hashlib)
(C0415)
[warning] 257-257: Using open without explicitly specifying an encoding
(W1514)
[refactor] 225-225: Too many return statements (7/6)
(R0911)
[warning] 268-268: Redefining name 'line' from outer scope (line 2305)
(W0621)
[refactor] 271-274: Unnecessary "elif" after "return", remove the leading "el" from "elif"
(R1705)
[warning] 338-338: Redefining name 'line' from outer scope (line 2305)
(W0621)
[warning] 324-324: String statement has no effect
(W0105)
[error] 325-325: Possibly using variable 'arduino_libs_mcu' before assignment
(E0606)
[warning] 331-331: Using open without explicitly specifying an encoding
(W1514)
[warning] 331-331: Using open without explicitly specifying an encoding
(W1514)
[refactor] 215-215: Too many statements (92/50)
(R0915)
395-412
: Clean refactoring using ComponentManager!Great improvement by delegating component management to the dedicated
ComponentManager
class. This follows the single responsibility principle and makes the code more maintainable.🧰 Tools
🪛 Pylint (3.3.7)
[convention] 395-395: Missing function or method docstring
(C0116)
[convention] 395-395: Function name "HandleCOMPONENTsettings" doesn't conform to snake_case naming style
(C0103)
[warning] 395-395: Redefining name 'env' from outer scope (line 56)
(W0621)
[convention] 396-396: Import outside toplevel (component_manager.ComponentManager)
(C0415)
848-852
: Good simplification of linker map file generation.Making the map file generation unconditional is a sensible default, as these files are valuable for debugging and don't significantly impact build time.
2220-2225
: Good addition of build script restoration.Properly restores the original
pioarduino-build.py
after the build process using ComponentManager, and wrapping it in a silent action keeps the build output clean.🧰 Tools
🪛 Pylint (3.3.7)
[convention] 2221-2221: Import outside toplevel (component_manager.ComponentManager)
(C0415)
2242-2248
: Consistent implementation of build script restoration for ESP-IDF.The conditional restoration of
pioarduino-build.py
only when Arduino framework is present is correct and maintains consistency with the Arduino IDF build flow.🧰 Tools
🪛 Pylint (3.3.7)
[convention] 2244-2244: Import outside toplevel (component_manager.ComponentManager)
(C0415)
builder/frameworks/arduino.py (7)
55-75
: Well-implemented optional logging setup.The logging configuration is properly designed with environment variable control and safe file handler addition using
suppress
. Good defensive programming.
360-395
: Excellent Windows long path support detection.The function provides clear user guidance for enabling long path support with both GUI and PowerShell methods. Thread-safe implementation and proper error handling.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 389-389: Catching too general exception Exception
(W0718)
[convention] 368-368: Import outside toplevel (winreg)
(C0415)
[error] 368-368: Unable to import 'winreg'
(E0401)
517-526
: Good improvement to path comparison logic.The use of
resolve()
on both paths helps normalize them, which addresses potential issues on case-insensitive filesystems. The error handling for failed comparisons is also appropriate.🧰 Tools
🪛 Pylint (3.3.7)
[warning] 521-521: Use lazy % formatting in logging functions
(W1203)
[warning] 525-525: Use lazy % formatting in logging functions
(W1203)
663-664
: BUILD_UNFLAGS initialization properly fixed.The initialization check now uses
if not env.get('BUILD_UNFLAGS'):
which is the correct approach, addressing the previous review comment.
788-799
: Smart caching implementation for performance.Good use of function attribute caching to avoid recalculating include path lengths. This is a common Python pattern and the static analysis warning about protected member access can be safely ignored.
🧰 Tools
🪛 Pylint (3.3.7)
[warning] 791-791: Access to a protected member _cache of a client class
(W0212)
[warning] 794-794: Access to a protected member _cache of a client class
(W0212)
[warning] 795-795: Access to a protected member _cache of a client class
(W0212)
[warning] 798-798: Access to a protected member _cache of a client class
(W0212)
1027-1034
: Component manager integration with documented workaround.The integration is functional. The silent action hack is clearly documented, though consider if there's a cleaner way to suppress SCons output in future refactoring.
995-1016
: Excellent secure framework reinstallation implementation.The refactored code properly validates paths before deletion, provides clear error messages, and exits gracefully on failure. This is a significant improvement in security and reliability.
🧰 Tools
🪛 Pylint (3.3.7)
[convention] 1012-1012: Constant name "flag_custom_sdkconfig" doesn't conform to UPPER_CASE naming style
(C0103)
Description:
Related issue (if applicable): fixes #
Checklist:
Summary by CodeRabbit
New Features
Bug Fixes
Refactor
Documentation
lib_ignore
directives supporting component management.