Skip to content

Conversation

cdce8p
Copy link
Member

@cdce8p cdce8p commented Sep 4, 2025

No description provided.

@cdce8p cdce8p added this to the 4.0.0 milestone Sep 4, 2025
@cdce8p cdce8p added Enhancement ✨ Improvement to a component C: invalid-name labels Sep 4, 2025
@cdce8p cdce8p force-pushed the typevar-invalid-name branch from 6a01dfb to f0d18d8 Compare September 4, 2025 21:02

This comment has been minimized.

@cdce8p cdce8p force-pushed the typevar-invalid-name branch from f0d18d8 to fc5de52 Compare September 4, 2025 21:38
Copy link

codecov bot commented Sep 4, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.84%. Comparing base (f2feabf) to head (fc5de52).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@           Coverage Diff           @@
##             main   #10541   +/-   ##
=======================================
  Coverage   95.84%   95.84%           
=======================================
  Files         177      177           
  Lines       19278    19289   +11     
=======================================
+ Hits        18477    18488   +11     
  Misses        801      801           
Files with missing lines Coverage Δ
pylint/checkers/base/name_checker/checker.py 98.70% <100.00%> (+0.02%) ⬆️
pylint/checkers/base/name_checker/naming_style.py 100.00% <ø> (ø)
pylint/constants.py 100.00% <ø> (ø)
pylint/utils/linterstats.py 98.84% <100.00%> (+0.02%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Contributor

github-actions bot commented Sep 4, 2025

🤖 Effect of this PR on checked open source code: 🤖

Effect on home-assistant:
The following messages are no longer emitted:

  1. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L577
  2. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L601
  3. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L610
  4. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L627
  5. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L873
  6. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L887
  7. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L944
  8. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L950
  9. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/core.py#L961
  10. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/trace.py#L263
  11. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L40
  12. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L53
  13. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L71
  14. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L93
  15. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L108
  16. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L130
  17. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L141
  18. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L148
  19. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L162
  20. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L185
  21. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L198
  22. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/dispatcher.py#L220
  23. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/ratelimit.py#L52
  24. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/template.py#L3241
  25. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/deprecation.py#L91
  26. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/deprecation.py#L116
  27. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/event.py#L174
  28. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/helpers/config_validation.py#L151
  29. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L152
  30. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L170
  31. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L182
  32. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L193
  33. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L204
  34. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L212
  35. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L219
  36. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/logging.py#L242
  37. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/loop.py#L181
  38. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/async_.py#L52
  39. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/variance.py#L12
  40. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/variance.py#L18
  41. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/variance.py#L24
  42. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/util/variance.py#L29
  43. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/pilight/__init__.py#L148
  44. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/nice_go/util.py#L22
  45. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/homewizard/helpers.py#L16
  46. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/yeelight/light.py#L238
  47. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/enphase_envoy/entity.py#L47
  48. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/webdav/backup.py#L66
  49. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/izone/climate.py#L120
  50. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/decora/light.py#L63
  51. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/http/data_validator.py#L40
  52. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/http/ban.py#L92
  53. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/http/decorators.py#L25
  54. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/http/decorators.py#L41
  55. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/http/decorators.py#L50
  56. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/husqvarna_automower/entity.py#L51
  57. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/hassio/handler.py#L38
  58. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/hassio/handler.py#L54
  59. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/hassio/addon_manager.py#L32
  60. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/cloud/http_api.py#L147
  61. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/cloud/onboarding.py#L35
  62. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/sensibo/entity.py#L19
  63. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/toon/helpers.py#L16
  64. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/wled/helpers.py#L15
  65. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/airgradient/entity.py#L37
  66. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/openhome/media_player.py#L70
  67. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/synology_dsm/coordinator.py#L46
  68. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/linkplay/entity.py#L16
  69. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/azure_storage/backup.py#L60
  70. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/rainmachine/switch.py#L114
  71. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/plugwise/util.py#L14
  72. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/letpot/entity.py#L44
  73. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/sfr_box/button.py#L30
  74. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/cast/media_player.py#L93
  75. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/webostv/media_player.py#L118
  76. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/shelly/entity.py#L327
  77. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/lametric/helpers.py#L19
  78. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/comelit/utils.py#L87
  79. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/technove/helpers.py#L15
  80. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/zha/helpers.py#L1384
  81. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/esphome/entity.py#L273
  82. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/onedrive/backup.py#L74
  83. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/guardian/util.py#L63
  84. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/reolink/util.py#L135
  85. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/recorder/util.py#L605
  86. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/recorder/util.py#L619
  87. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/recorder/util.py#L633
  88. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/recorder/util.py#L661
  89. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/recorder/util.py#L682
  90. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/recorder/util.py#L703
  91. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/tplink/entity.py#L118
  92. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/hive/__init__.py#L83
  93. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/denonavr/media_player.py#L158
  94. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/cover/__init__.py#L439
  95. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/vlc_telnet/media_player.py#L55
  96. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/cambridge_audio/entity.py#L17
  97. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/iaqualink/__init__.py#L184
  98. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/matter/entity.py#L40
  99. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/matter/api.py#L94
  100. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/homematicip_cloud/helpers.py#L29
  101. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/eheimdigital/entity.py#L59
  102. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/russound_rio/entity.py#L18
  103. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/dlna_dmr/media_player.py#L67
  104. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/spotify/media_player.py#L98
  105. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/sonos/helpers.py#L44
  106. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/sonos/helpers.py#L50
  107. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/sonos/helpers.py#L55
  108. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/music_assistant/helpers.py#L14
  109. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/evil_genius_labs/util.py#L12
  110. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/arcam_fmj/media_player.py#L63
  111. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/home_connect/entity.py#L142
  112. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/alexa_devices/utils.py#L15
  113. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/ring/entity.py#L58
  114. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/ring/entity.py#L89
  115. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/ring/coordinator.py#L70
  116. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/aquostv/media_player.py#L85
  117. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/switchbot/entity.py#L93
  118. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/backup/onboarding.py#L43
  119. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/peblar/helpers.py#L16
  120. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/peblar/coordinator.py#L72
  121. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/otbr/util.py#L64
  122. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/otbr/silabs_multiprotocol.py#L30
  123. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/modern_forms/__init__.py#L60
  124. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/velbus/entity.py#L72
  125. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/limitlessled/light.py#L176
  126. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/kodi/media_player.py#L231
  127. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/rfxtrx/entity.py#L119
  128. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/plex/media_player.py#L53
  129. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/duotecno/entity.py#L50
  130. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/androidtv/entity.py#L44
  131. invalid-name:
    Variable name "_Ts" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/panasonic_viera/__init__.py#L246
  132. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/braviatv/coordinator.py#L45
  133. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/heos/media_player.py#L142
  134. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/roku/helpers.py#L29
  135. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/renault/renault_vehicle.py#L31
  136. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/wallbox/coordinator.py#L84
  137. invalid-name:
    Variable name "_P" doesn't conform to snake_case naming style
    https://github.com/home-assistant/core/blob/1cca65b5c5b4fc361346c1292023057bc8b91934/homeassistant/components/zwave_js/api.py#L359

Effect on sentry:
The following messages are no longer emitted:

  1. invalid-name:
    Constant name "Ts" doesn't conform to UPPER_CASE naming style
    https://github.com/getsentry/sentry/blob/24e724e4a01c4e74451d7c49227f01455fde0458/src/sentry/utils/function_cache.py#L18
  2. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/getsentry/sentry/blob/24e724e4a01c4e74451d7c49227f01455fde0458/src/sentry/new_migrations/monkey/__init__.py#L84
  3. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/getsentry/sentry/blob/24e724e4a01c4e74451d7c49227f01455fde0458/src/sentry/api/decorators.py#L31
  4. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/getsentry/sentry/blob/24e724e4a01c4e74451d7c49227f01455fde0458/src/sentry/api/decorators.py#L45
  5. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/getsentry/sentry/blob/24e724e4a01c4e74451d7c49227f01455fde0458/src/sentry/testutils/pytest/fixtures.py#L36
  6. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/getsentry/sentry/blob/24e724e4a01c4e74451d7c49227f01455fde0458/src/sentry/testutils/pytest/fixtures.py#L40
  7. invalid-name:
    Variable name "P" doesn't conform to snake_case naming style
    https://github.com/getsentry/sentry/blob/24e724e4a01c4e74451d7c49227f01455fde0458/src/sentry/testutils/pytest/fixtures.py#L45

This comment was generated for commit fc5de52

Copy link
Member

@Pierre-Sassoulas Pierre-Sassoulas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@cdce8p cdce8p merged commit df3aa2a into pylint-dev:main Sep 5, 2025
44 checks passed
@cdce8p cdce8p deleted the typevar-invalid-name branch September 5, 2025 12:00
@cdce8p cdce8p mentioned this pull request Sep 16, 2025
luketainton pushed a commit to luketainton/roboluke-tasks that referenced this pull request Oct 13, 2025
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [pylint](https://github.com/pylint-dev/pylint) ([changelog](https://pylint.readthedocs.io/en/latest/whatsnew/3/)) | `<4.0.0,>=3.3.3` -> `<4.1.0,>=4.0.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pylint/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pylint/3.3.9/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>pylint-dev/pylint (pylint)</summary>

### [`v4.0.0`](https://github.com/pylint-dev/pylint/releases/tag/v4.0.0)

[Compare Source](pylint-dev/pylint@v3.3.9...v4.0.0)

- Pylint now supports Python 3.14.

- Pylint's inference engine (`astroid`) is now much more precise,
  understanding implicit booleanness and ternary expressions. (Thanks [@&#8203;zenlyj](https://github.com/zenlyj)!)

Consider this example:

```python
class Result:
    errors: dict | None = None

result = Result()
if result.errors:
    result.errors[field_key]

### inference engine understands result.errors cannot be None
### pylint no longer raises unsubscriptable-object
```

The required `astroid` version is now 4.0.0. See the [astroid changelog](https://pylint.readthedocs.io/projects/astroid/en/latest/changelog.html#what-s-new-in-astroid-4-0-0) for additional fixes, features, and performance improvements applicable to pylint.

- Handling of `invalid-name` at the module level was patchy. Now,
  module-level constants that are reassigned are treated as variables and checked
  against `--variable-rgx` rather than `--const-rgx`. Module-level lists,
  sets, and objects can pass against either regex.

Here, `LIMIT` is reassigned, so pylint only uses `--variable-rgx`:

```python
LIMIT = 500  # [invalid-name]
if sometimes:
    LIMIT = 1  # [invalid-name]
```

If this is undesired, refactor using *exclusive* assignment so that it is
evident that this assignment happens only once:

```python
if sometimes:
    LIMIT = 1
else:
    LIMIT = 500  # exclusive assignment: uses const regex, no warning
```

Lists, sets, and objects still pass against either `const-rgx` or `variable-rgx`
even if reassigned, but are no longer completely skipped:

```python
MY_LIST = []
my_list = []
My_List = []  # [invalid-name]
```

Remember to adjust the [regexes](https://pylint.readthedocs.io/en/latest/user_guide/messages/convention/invalid-name.html) and [allow lists](https://pylint.readthedocs.io/en/latest/user_guide/configuration/all-options.html#good-names) to your liking.

## Breaking Changes

- `invalid-name` now distinguishes module-level constants that are assigned only once
  from those that are reassigned and now applies `--variable-rgx` to the latter. Values
  other than literals (lists, sets, objects) can pass against either the constant or
  variable regexes (e.g. "LOGGER" or "logger" but not "LoGgEr").

  Remember that `--good-names` or `--good-names-rgxs` can be provided to explicitly
  allow good names.

  Closes [#&#8203;3585](pylint-dev/pylint#3585)

- The unused `pylintrc` argument to `PyLinter.__init__()` is deprecated
  and will be removed.

  Refs [#&#8203;6052](pylint-dev/pylint#6052)

- Commented out code blocks such as `#    bar() # TODO: remove dead code` will no longer emit `fixme`.

  Refs [#&#8203;9255](pylint-dev/pylint#9255)

- `pyreverse` `Run` was changed to no longer call `sys.exit()` in its `__init__`.
  You should now call `Run(args).run()` which will return the exit code instead.
  Having a class that always raised a `SystemExit` exception was considered a bug.

  Normal usage of pyreverse through the CLI will not be affected by this change.

  Refs [#&#8203;9689](pylint-dev/pylint#9689)

- The `suggestion-mode` option was removed, as pylint now always emits user-friendly hints instead
  of false-positive error messages. You should remove it from your conf if it's defined.

  Refs [#&#8203;9962](pylint-dev/pylint#9962)

- The `async.py` checker module has been renamed to `async_checker.py` since `async` is a Python keyword
  and cannot be imported directly. This allows for better testing and extensibility of the async checker functionality.

  Refs [#&#8203;10071](pylint-dev/pylint#10071)

- The message-id of `continue-in-finally` was changed from `E0116` to `W0136`. The warning is
  now emitted for every Python version since it will raise a syntax warning in Python 3.14.
  See [PEP 765 - Disallow return/break/continue that exit a finally block](https://peps.python.org/pep-0765/).

  Refs [#&#8203;10480](pylint-dev/pylint#10480)

- Removed support for `nmp.NaN` alias for `numpy.NaN` being recognized in ':ref:`nan-comparison`'. Use `np` or `numpy` instead.

  Refs [#&#8203;10583](pylint-dev/pylint#10583)

- Version requirement for `isort` has been bumped to >=5.0.0.
  The internal compatibility for older `isort` versions exposed via `pylint.utils.IsortDriver` has
  been removed.

  Refs [#&#8203;10637](pylint-dev/pylint#10637)

## New Features

- `comparison-of-constants` now uses the unicode from the ast instead of reformatting from
  the node's values preventing some bad formatting due to `utf-8` limitation. The message now uses
  `"` instead of `'` to better work with what the python ast returns.

  Refs [#&#8203;8736](pylint-dev/pylint#8736)

- Enhanced pyreverse to properly distinguish between UML relationship types (association, aggregation, composition) based on object ownership semantics. Type annotations without assignment are now treated as associations, parameter assignments as aggregations, and object instantiation as compositions.

  Closes [#&#8203;9045](pylint-dev/pylint#9045)
  Closes [#&#8203;9267](pylint-dev/pylint#9267)

- The `fixme` check can now search through docstrings as well as comments, by using
  `check-fixme-in-docstring = true` in the `[tool.pylint.miscellaneous]` section.

  Closes [#&#8203;9255](pylint-dev/pylint#9255)

- The `use-implicit-booleaness-not-x` checks now distinguish between comparisons
  used in boolean contexts and those that are not, enabling them to provide more accurate refactoring suggestions.

  Closes [#&#8203;9353](pylint-dev/pylint#9353)

- The verbose option now outputs the filenames of the files that have been checked.
  Previously, it only included the number of checked and skipped files.

  Closes [#&#8203;9357](pylint-dev/pylint#9357)

- colorized reporter now colorizes messages/categories that have been configured as `fail-on` in red inverse.
  This makes it easier to quickly find the errors that are causing pylint CI job failures.

  Closes [#&#8203;9898](pylint-dev/pylint#9898)

- Enhanced support for [@&#8203;property](https://github.com/property) decorator in pyreverse to correctly display return types of annotated properties when generating class diagrams.

  Closes [#&#8203;10057](pylint-dev/pylint#10057)

- Add --max-depth option to pyreverse to control diagram complexity. A depth of 0 shows only top-level packages, 1 shows one level of subpackages, etc.
  This helps manage visualization of large codebases by limiting the depth of displayed packages and classes.

  Refs [#&#8203;10077](pylint-dev/pylint#10077)

- Handle deferred evaluation of annotations in Python 3.14.

  Closes [#&#8203;10149](pylint-dev/pylint#10149)

- Enhanced pyreverse to properly detect aggregations for comprehensions (list, dict, set, generator).

  Closes [#&#8203;10236](pylint-dev/pylint#10236)

- `pyreverse`: add support for colorized output when using output format `mmd` (MermaidJS) and `html`.

  Closes [#&#8203;10242](pylint-dev/pylint#10242)

- pypy 3.11 is now officially supported.

  Refs [#&#8203;10287](pylint-dev/pylint#10287)

- Add support for Python 3.14.

  Refs [#&#8203;10467](pylint-dev/pylint#10467)

- Add naming styles for `ParamSpec` and `TypeVarTuple` that align with the `TypeVar` style.

  Refs [#&#8203;10541](pylint-dev/pylint#10541)

## New Checks

- Add `match-statements` checker and the following message:
  `bare-name-capture-pattern`.
  This will emit an error message when a name capture pattern is used in a match statement which would make the remaining patterns unreachable.
  This code is a SyntaxError at runtime.

  Closes [#&#8203;7128](pylint-dev/pylint#7128)

- Add new check `async-context-manager-with-regular-with` to detect async context managers used with regular `with` statements instead of `async with`.

  Refs [#&#8203;10408](pylint-dev/pylint#10408)

- Add `break-in-finally` warning. Using `break` inside the `finally` clause
  will raise a syntax warning in Python 3.14.
  See `PEP 765 - Disallow return/break/continue that exit a finally block <https://peps.python.org/pep-0765/>`\_.

  Refs [#&#8203;10480](pylint-dev/pylint#10480)

- Add new checks for invalid uses of class patterns in :keyword:`match`.

  - :ref:`invalid-match-args-definition` is emitted if :py:data:`object.__match_args__` isn't a tuple of strings.
  - :ref:`too-many-positional-sub-patterns` if there are more positional sub-patterns than specified in :py:data:`object.__match_args__`.
  - :ref:`multiple-class-sub-patterns` if there are multiple sub-patterns for the same attribute.

  Refs [#&#8203;10559](pylint-dev/pylint#10559)

- Add additional checks for suboptimal uses of class patterns in :keyword:`match`.

  - :ref:`match-class-bind-self` is emitted if a name is bound to `self` instead of
    using an `as` pattern.
  - :ref:`match-class-positional-attributes` is emitted if a class pattern has positional
    attributes when keywords could be used.

  Refs [#&#8203;10587](pylint-dev/pylint#10587)

- Add a `consider-math-not-float` message. `float("nan")` and `float("inf")` are slower
  than their counterpart `math.inf` and `math.nan` by a factor of 4 (notwithstanding
  the initial import of math) and they are also not well typed when using mypy.
  This check also catches typos in float calls as a side effect.

  The :ref:`pylint.extensions.code_style` need to be activated for this check to work.

  Refs [#&#8203;10621](pylint-dev/pylint#10621)

## False Positives Fixed

- Fix a false positive for `used-before-assignment` when a variable defined under
  an `if` and via a named expression (walrus operator) is used later when guarded
  under the same `if` test.

  Closes [#&#8203;10061](pylint-dev/pylint#10061)

- Fix :ref:`no-name-in-module` for members of `concurrent.futures` with Python 3.14.

  Closes [#&#8203;10632](pylint-dev/pylint#10632)

## False Negatives Fixed

- Fix false negative for `used-before-assignment` when a `TYPE_CHECKING` import is used as a type annotation prior to erroneous usage.

  Refs [#&#8203;8893](pylint-dev/pylint#8893)

- Match cases are now counted as edges in the McCabe graph and will increase the complexity accordingly.

  Refs [#&#8203;9667](pylint-dev/pylint#9667)

- Check module-level constants with type annotations for `invalid-name`.
  Remember to adjust `const-naming-style` or `const-rgx` to your liking.

  Closes [#&#8203;9770](pylint-dev/pylint#9770)

- Fix false negative where function-redefined (E0102) was not reported for functions with a leading underscore.

  Closes [#&#8203;9894](pylint-dev/pylint#9894)

- We now raise a `logging-too-few-args` for format string with no
  interpolation arguments at all (i.e. for something like `logging.debug("Awaiting process %s")`
  or `logging.debug("Awaiting process {pid}")`). Previously we did not raise for such case.

  Closes [#&#8203;9999](pylint-dev/pylint#9999)

- Fix false negative for `used-before-assignment` when a function is defined inside a `TYPE_CHECKING` guard block and used later.

  Closes [#&#8203;10028](pylint-dev/pylint#10028)

- Fix a false negative for `possibly-used-before-assignment` when a variable is conditionally defined
  and later assigned to a type-annotated variable.

  Closes [#&#8203;10421](pylint-dev/pylint#10421)

- Fix false negative for `deprecated-module` when a `__import__` method is used instead of `import` sentence.

  Refs [#&#8203;10453](pylint-dev/pylint#10453)

- Count match cases for `too-many-branches` check.

  Refs [#&#8203;10542](pylint-dev/pylint#10542)

- Fix false-negative where :ref:`unused-import` was not reported for names referenced in a preceding `global` statement.

  Refs [#&#8203;10633](pylint-dev/pylint#10633)

## Other Bug Fixes

- When displaying unicode with surrogates (or other potential `UnicodeEncodeError`),
  pylint will now display a '?' character (using `encode(encoding="utf-8", errors="replace")`)
  instead of crashing. The functional tests classes are also updated to handle this case.

  Closes [#&#8203;8736](pylint-dev/pylint#8736)

- Fixed unidiomatic-typecheck only checking left-hand side.

  Closes [#&#8203;10217](pylint-dev/pylint#10217)

- Fix a crash caused by malformed format strings when using `.format` with keyword arguments.

  Closes [#&#8203;10282](pylint-dev/pylint#10282)

- Fix false positive `inconsistent-return-statements` when using `quit()` or `exit()` functions.

  Closes [#&#8203;10508](pylint-dev/pylint#10508)

- Fix a crash in :ref:`nested-min-max` when using `builtins.min` or `builtins.max`
  instead of `min` or `max` directly.

  Closes [#&#8203;10626](pylint-dev/pylint#10626)

- Fixed a crash in :ref:`unnecessary-dict-index-lookup` when the index of an enumerated list
  was deleted inside a for loop.

  Closes [#&#8203;10627](pylint-dev/pylint#10627)

## Other Changes

- Remove support for launching pylint with Python 3.9.
  Code that supports Python 3.9 can still be linted with the `--py-version=3.9` setting.

  Refs [#&#8203;10405](pylint-dev/pylint#10405)

## Internal Changes

- Modified test framework to allow for different test output for different Python versions.

  Refs [#&#8203;10382](pylint-dev/pylint#10382)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDYuMCIsInVwZGF0ZWRJblZlciI6IjQxLjE0Ni4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: https://git.tainton.uk/repos/roboluke/pulls/384
Co-authored-by: renovate[bot] <[email protected]>
Co-committed-by: renovate[bot] <[email protected]>
luketainton pushed a commit to luketainton/epage that referenced this pull request Oct 13, 2025
This PR contains the following updates:

| Package | Change | Age | Confidence |
|---|---|---|---|
| [pylint](https://github.com/pylint-dev/pylint) ([changelog](https://pylint.readthedocs.io/en/latest/whatsnew/3/)) | `<4.0.0,>=3.3.3` -> `<4.1.0,>=4.0.0` | [![age](https://developer.mend.io/api/mc/badges/age/pypi/pylint/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/pypi/pylint/3.3.9/4.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

### Release Notes

<details>
<summary>pylint-dev/pylint (pylint)</summary>

### [`v4.0.0`](https://github.com/pylint-dev/pylint/releases/tag/v4.0.0)

[Compare Source](pylint-dev/pylint@v3.3.9...v4.0.0)

- Pylint now supports Python 3.14.

- Pylint's inference engine (`astroid`) is now much more precise,
  understanding implicit booleanness and ternary expressions. (Thanks [@&#8203;zenlyj](https://github.com/zenlyj)!)

Consider this example:

```python
class Result:
    errors: dict | None = None

result = Result()
if result.errors:
    result.errors[field_key]

### inference engine understands result.errors cannot be None
### pylint no longer raises unsubscriptable-object
```

The required `astroid` version is now 4.0.0. See the [astroid changelog](https://pylint.readthedocs.io/projects/astroid/en/latest/changelog.html#what-s-new-in-astroid-4-0-0) for additional fixes, features, and performance improvements applicable to pylint.

- Handling of `invalid-name` at the module level was patchy. Now,
  module-level constants that are reassigned are treated as variables and checked
  against `--variable-rgx` rather than `--const-rgx`. Module-level lists,
  sets, and objects can pass against either regex.

Here, `LIMIT` is reassigned, so pylint only uses `--variable-rgx`:

```python
LIMIT = 500  # [invalid-name]
if sometimes:
    LIMIT = 1  # [invalid-name]
```

If this is undesired, refactor using *exclusive* assignment so that it is
evident that this assignment happens only once:

```python
if sometimes:
    LIMIT = 1
else:
    LIMIT = 500  # exclusive assignment: uses const regex, no warning
```

Lists, sets, and objects still pass against either `const-rgx` or `variable-rgx`
even if reassigned, but are no longer completely skipped:

```python
MY_LIST = []
my_list = []
My_List = []  # [invalid-name]
```

Remember to adjust the [regexes](https://pylint.readthedocs.io/en/latest/user_guide/messages/convention/invalid-name.html) and [allow lists](https://pylint.readthedocs.io/en/latest/user_guide/configuration/all-options.html#good-names) to your liking.

## Breaking Changes

- `invalid-name` now distinguishes module-level constants that are assigned only once
  from those that are reassigned and now applies `--variable-rgx` to the latter. Values
  other than literals (lists, sets, objects) can pass against either the constant or
  variable regexes (e.g. "LOGGER" or "logger" but not "LoGgEr").

  Remember that `--good-names` or `--good-names-rgxs` can be provided to explicitly
  allow good names.

  Closes [#&#8203;3585](pylint-dev/pylint#3585)

- The unused `pylintrc` argument to `PyLinter.__init__()` is deprecated
  and will be removed.

  Refs [#&#8203;6052](pylint-dev/pylint#6052)

- Commented out code blocks such as `#    bar() # TODO: remove dead code` will no longer emit `fixme`.

  Refs [#&#8203;9255](pylint-dev/pylint#9255)

- `pyreverse` `Run` was changed to no longer call `sys.exit()` in its `__init__`.
  You should now call `Run(args).run()` which will return the exit code instead.
  Having a class that always raised a `SystemExit` exception was considered a bug.

  Normal usage of pyreverse through the CLI will not be affected by this change.

  Refs [#&#8203;9689](pylint-dev/pylint#9689)

- The `suggestion-mode` option was removed, as pylint now always emits user-friendly hints instead
  of false-positive error messages. You should remove it from your conf if it's defined.

  Refs [#&#8203;9962](pylint-dev/pylint#9962)

- The `async.py` checker module has been renamed to `async_checker.py` since `async` is a Python keyword
  and cannot be imported directly. This allows for better testing and extensibility of the async checker functionality.

  Refs [#&#8203;10071](pylint-dev/pylint#10071)

- The message-id of `continue-in-finally` was changed from `E0116` to `W0136`. The warning is
  now emitted for every Python version since it will raise a syntax warning in Python 3.14.
  See [PEP 765 - Disallow return/break/continue that exit a finally block](https://peps.python.org/pep-0765/).

  Refs [#&#8203;10480](pylint-dev/pylint#10480)

- Removed support for `nmp.NaN` alias for `numpy.NaN` being recognized in ':ref:`nan-comparison`'. Use `np` or `numpy` instead.

  Refs [#&#8203;10583](pylint-dev/pylint#10583)

- Version requirement for `isort` has been bumped to >=5.0.0.
  The internal compatibility for older `isort` versions exposed via `pylint.utils.IsortDriver` has
  been removed.

  Refs [#&#8203;10637](pylint-dev/pylint#10637)

## New Features

- `comparison-of-constants` now uses the unicode from the ast instead of reformatting from
  the node's values preventing some bad formatting due to `utf-8` limitation. The message now uses
  `"` instead of `'` to better work with what the python ast returns.

  Refs [#&#8203;8736](pylint-dev/pylint#8736)

- Enhanced pyreverse to properly distinguish between UML relationship types (association, aggregation, composition) based on object ownership semantics. Type annotations without assignment are now treated as associations, parameter assignments as aggregations, and object instantiation as compositions.

  Closes [#&#8203;9045](pylint-dev/pylint#9045)
  Closes [#&#8203;9267](pylint-dev/pylint#9267)

- The `fixme` check can now search through docstrings as well as comments, by using
  `check-fixme-in-docstring = true` in the `[tool.pylint.miscellaneous]` section.

  Closes [#&#8203;9255](pylint-dev/pylint#9255)

- The `use-implicit-booleaness-not-x` checks now distinguish between comparisons
  used in boolean contexts and those that are not, enabling them to provide more accurate refactoring suggestions.

  Closes [#&#8203;9353](pylint-dev/pylint#9353)

- The verbose option now outputs the filenames of the files that have been checked.
  Previously, it only included the number of checked and skipped files.

  Closes [#&#8203;9357](pylint-dev/pylint#9357)

- colorized reporter now colorizes messages/categories that have been configured as `fail-on` in red inverse.
  This makes it easier to quickly find the errors that are causing pylint CI job failures.

  Closes [#&#8203;9898](pylint-dev/pylint#9898)

- Enhanced support for [@&#8203;property](https://github.com/property) decorator in pyreverse to correctly display return types of annotated properties when generating class diagrams.

  Closes [#&#8203;10057](pylint-dev/pylint#10057)

- Add --max-depth option to pyreverse to control diagram complexity. A depth of 0 shows only top-level packages, 1 shows one level of subpackages, etc.
  This helps manage visualization of large codebases by limiting the depth of displayed packages and classes.

  Refs [#&#8203;10077](pylint-dev/pylint#10077)

- Handle deferred evaluation of annotations in Python 3.14.

  Closes [#&#8203;10149](pylint-dev/pylint#10149)

- Enhanced pyreverse to properly detect aggregations for comprehensions (list, dict, set, generator).

  Closes [#&#8203;10236](pylint-dev/pylint#10236)

- `pyreverse`: add support for colorized output when using output format `mmd` (MermaidJS) and `html`.

  Closes [#&#8203;10242](pylint-dev/pylint#10242)

- pypy 3.11 is now officially supported.

  Refs [#&#8203;10287](pylint-dev/pylint#10287)

- Add support for Python 3.14.

  Refs [#&#8203;10467](pylint-dev/pylint#10467)

- Add naming styles for `ParamSpec` and `TypeVarTuple` that align with the `TypeVar` style.

  Refs [#&#8203;10541](pylint-dev/pylint#10541)

## New Checks

- Add `match-statements` checker and the following message:
  `bare-name-capture-pattern`.
  This will emit an error message when a name capture pattern is used in a match statement which would make the remaining patterns unreachable.
  This code is a SyntaxError at runtime.

  Closes [#&#8203;7128](pylint-dev/pylint#7128)

- Add new check `async-context-manager-with-regular-with` to detect async context managers used with regular `with` statements instead of `async with`.

  Refs [#&#8203;10408](pylint-dev/pylint#10408)

- Add `break-in-finally` warning. Using `break` inside the `finally` clause
  will raise a syntax warning in Python 3.14.
  See `PEP 765 - Disallow return/break/continue that exit a finally block <https://peps.python.org/pep-0765/>`\_.

  Refs [#&#8203;10480](pylint-dev/pylint#10480)

- Add new checks for invalid uses of class patterns in :keyword:`match`.

  - :ref:`invalid-match-args-definition` is emitted if :py:data:`object.__match_args__` isn't a tuple of strings.
  - :ref:`too-many-positional-sub-patterns` if there are more positional sub-patterns than specified in :py:data:`object.__match_args__`.
  - :ref:`multiple-class-sub-patterns` if there are multiple sub-patterns for the same attribute.

  Refs [#&#8203;10559](pylint-dev/pylint#10559)

- Add additional checks for suboptimal uses of class patterns in :keyword:`match`.

  - :ref:`match-class-bind-self` is emitted if a name is bound to `self` instead of
    using an `as` pattern.
  - :ref:`match-class-positional-attributes` is emitted if a class pattern has positional
    attributes when keywords could be used.

  Refs [#&#8203;10587](pylint-dev/pylint#10587)

- Add a `consider-math-not-float` message. `float("nan")` and `float("inf")` are slower
  than their counterpart `math.inf` and `math.nan` by a factor of 4 (notwithstanding
  the initial import of math) and they are also not well typed when using mypy.
  This check also catches typos in float calls as a side effect.

  The :ref:`pylint.extensions.code_style` need to be activated for this check to work.

  Refs [#&#8203;10621](pylint-dev/pylint#10621)

## False Positives Fixed

- Fix a false positive for `used-before-assignment` when a variable defined under
  an `if` and via a named expression (walrus operator) is used later when guarded
  under the same `if` test.

  Closes [#&#8203;10061](pylint-dev/pylint#10061)

- Fix :ref:`no-name-in-module` for members of `concurrent.futures` with Python 3.14.

  Closes [#&#8203;10632](pylint-dev/pylint#10632)

## False Negatives Fixed

- Fix false negative for `used-before-assignment` when a `TYPE_CHECKING` import is used as a type annotation prior to erroneous usage.

  Refs [#&#8203;8893](pylint-dev/pylint#8893)

- Match cases are now counted as edges in the McCabe graph and will increase the complexity accordingly.

  Refs [#&#8203;9667](pylint-dev/pylint#9667)

- Check module-level constants with type annotations for `invalid-name`.
  Remember to adjust `const-naming-style` or `const-rgx` to your liking.

  Closes [#&#8203;9770](pylint-dev/pylint#9770)

- Fix false negative where function-redefined (E0102) was not reported for functions with a leading underscore.

  Closes [#&#8203;9894](pylint-dev/pylint#9894)

- We now raise a `logging-too-few-args` for format string with no
  interpolation arguments at all (i.e. for something like `logging.debug("Awaiting process %s")`
  or `logging.debug("Awaiting process {pid}")`). Previously we did not raise for such case.

  Closes [#&#8203;9999](pylint-dev/pylint#9999)

- Fix false negative for `used-before-assignment` when a function is defined inside a `TYPE_CHECKING` guard block and used later.

  Closes [#&#8203;10028](pylint-dev/pylint#10028)

- Fix a false negative for `possibly-used-before-assignment` when a variable is conditionally defined
  and later assigned to a type-annotated variable.

  Closes [#&#8203;10421](pylint-dev/pylint#10421)

- Fix false negative for `deprecated-module` when a `__import__` method is used instead of `import` sentence.

  Refs [#&#8203;10453](pylint-dev/pylint#10453)

- Count match cases for `too-many-branches` check.

  Refs [#&#8203;10542](pylint-dev/pylint#10542)

- Fix false-negative where :ref:`unused-import` was not reported for names referenced in a preceding `global` statement.

  Refs [#&#8203;10633](pylint-dev/pylint#10633)

## Other Bug Fixes

- When displaying unicode with surrogates (or other potential `UnicodeEncodeError`),
  pylint will now display a '?' character (using `encode(encoding="utf-8", errors="replace")`)
  instead of crashing. The functional tests classes are also updated to handle this case.

  Closes [#&#8203;8736](pylint-dev/pylint#8736)

- Fixed unidiomatic-typecheck only checking left-hand side.

  Closes [#&#8203;10217](pylint-dev/pylint#10217)

- Fix a crash caused by malformed format strings when using `.format` with keyword arguments.

  Closes [#&#8203;10282](pylint-dev/pylint#10282)

- Fix false positive `inconsistent-return-statements` when using `quit()` or `exit()` functions.

  Closes [#&#8203;10508](pylint-dev/pylint#10508)

- Fix a crash in :ref:`nested-min-max` when using `builtins.min` or `builtins.max`
  instead of `min` or `max` directly.

  Closes [#&#8203;10626](pylint-dev/pylint#10626)

- Fixed a crash in :ref:`unnecessary-dict-index-lookup` when the index of an enumerated list
  was deleted inside a for loop.

  Closes [#&#8203;10627](pylint-dev/pylint#10627)

## Other Changes

- Remove support for launching pylint with Python 3.9.
  Code that supports Python 3.9 can still be linted with the `--py-version=3.9` setting.

  Refs [#&#8203;10405](pylint-dev/pylint#10405)

## Internal Changes

- Modified test framework to allow for different test output for different Python versions.

  Refs [#&#8203;10382](pylint-dev/pylint#10382)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDYuMCIsInVwZGF0ZWRJblZlciI6IjQxLjE0Ni4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJ0eXBlL2RlcGVuZGVuY2llcyJdfQ==-->

Reviewed-on: https://git.tainton.uk/repos/epage/pulls/168
Co-authored-by: renovate[bot] <[email protected]>
Co-committed-by: renovate[bot] <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C: invalid-name Enhancement ✨ Improvement to a component

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants