Merged with branch 'eric7'. eric7-maintenance release-25.03

Sat, 01 Mar 2025 15:52:40 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 01 Mar 2025 15:52:40 +0100
branch
eric7-maintenance
changeset 11155
e1843b6efa73
parent 11126
32d0ec15eba0 (current diff)
parent 11154
2b9e7b304146 (diff)
child 11156
c1ba5c1e4ed1

Merged with branch 'eric7'.

docs/changelog.md file | annotate | diff | comparison | revisions
eric7.epj file | annotate | diff | comparison | revisions
scripts/install.py file | annotate | diff | comparison | revisions
scripts/uninstall.py file | annotate | diff | comparison | revisions
src/eric7/APIs/Python3/eric7.api file | annotate | diff | comparison | revisions
src/eric7/APIs/Python3/eric7.bas file | annotate | diff | comparison | revisions
src/eric7/Debugger/DebugServer.py file | annotate | diff | comparison | revisions
src/eric7/Debugger/DebuggerInterfacePython.py file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
src/eric7/EricNetwork/EricJsonStreamReader.py file | annotate | diff | comparison | revisions
src/eric7/Globals/__init__.py file | annotate | diff | comparison | revisions
src/eric7/PipInterface/Pip.py file | annotate | diff | comparison | revisions
src/eric7/PipInterface/PipPackagesWidget.py file | annotate | diff | comparison | revisions
src/eric7/Project/Project.py file | annotate | diff | comparison | revisions
src/eric7/QScintilla/Editor.py file | annotate | diff | comparison | revisions
src/eric7/Testing/Interfaces/PytestRunner.py file | annotate | diff | comparison | revisions
src/eric7/Testing/Interfaces/TestExecutorBase.py file | annotate | diff | comparison | revisions
src/eric7/Testing/Interfaces/UnittestRunner.py file | annotate | diff | comparison | revisions
src/eric7/Testing/TestResultsTree.py file | annotate | diff | comparison | revisions
src/eric7/Testing/TestingWidget.py file | annotate | diff | comparison | revisions
src/eric7/UI/UserInterface.py file | annotate | diff | comparison | revisions
src/eric7/Utilities/__init__.py file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_cs.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.qm file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_de.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_empty.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_en.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_es.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_fr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_it.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_pt.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_ru.qm file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_ru.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_tr.ts file | annotate | diff | comparison | revisions
src/eric7/i18n/eric7_zh_CN.ts file | annotate | diff | comparison | revisions
--- a/docs/ThirdParty.md	Sun Feb 09 15:47:57 2025 +0100
+++ b/docs/ThirdParty.md	Sat Mar 01 15:52:40 2025 +0100
@@ -18,22 +18,28 @@
 
 | Name                          |  Version  | License                            |
 |:-----------------------------:|:---------:|:-----------------------------------|
-| bandit                        |   1.7.9   | Apache License 2.0                 |
+| bandit                        |   1.8.2   | Apache License 2.0                 |
+| flake8-2020                   |   1.8.1   | MIT License (MIT)                  |
 | flake8-alphabetize            |   0.0.21  | MIT License (MIT No Attribution)   |
 | flake8-annotations            |   3.1.1   | MIT License (MIT)                  |
 | flake8-annotations-complexity |   0.0.8   | MIT License (MIT)                  |
 | flake8-annotations-coverage   |   0.0.6   | MIT License (MIT)                  |
 | flake8-async                  |  22.11.14 | MIT License (MIT)                  |
-| flake8-bugbear                |  24.8.19  | MIT License (MIT)                  |
-| flake8-comprehensions         |   3.15.0  | MIT License (MIT)                  |
+| flake8-bugbear                |  24.12.12 | MIT License (MIT)                  |
+| flake8-comprehensions         |   3.16.0  | MIT License (MIT)                  |
+| flake8-datetimez              |  20.10.0  | MIT License (MIT)                  |
 | flake8-future-annotations     |   1.1.0   | MIT License (MIT)                  |
 | flake8-implicit-str-concat    |   0.5.0   | MIT License (MIT)                  |
 | flake8-local-import           |   1.0.6   | MIT License (MIT)                  |
-| flake8-logging                |   1.6.0   | MIT License (MIT)                  |
+| flake8-logging                |   1.7.0   | MIT License (MIT)                  |
+| flake8-nested-fstrings        |   1.1.0   | MIT License (MIT)                  |
 | flake8-pep585                 |   0.1.7   | Mozilla Public License Version 2.0 |
 | flake8-pep604                 |   1.1.0   | MIT License (MIT)                  |
-| flake8-simplify               |   0.21.0  | MIT License (MIT)                  |
-| flake8-tidy-imports           |   4.10.0  | MIT License (MIT)                  |
+| flake8-pydantic               |   0.4.0   | MIT License (MIT)                  |
+| flake8-return                 |   1.2.0   | MIT License (MIT)                  |
+| flake8_simplify               |   0.21.0  | MIT License (MIT)                  |
+| flake8-spm                    |   0.0.1   | MIT License (MIT)                  |
+| flake8-tidy-imports           |   4.11.0  | MIT License (MIT)                  |
 | flake8-unused-arguments       |   0.0.13  | MIT License (MIT)                  |
 | flake8-unused-globals         |   0.1.10  | MIT License (MIT)                  |
 | flake8-use-pathlib            |   0.3.0   | MIT License (MIT)                  |
--- a/docs/changelog.md	Sun Feb 09 15:47:57 2025 +0100
+++ b/docs/changelog.md	Sat Mar 01 15:52:40 2025 +0100
@@ -1,5 +1,21 @@
 # Change Log
 
+### Version 25.3
+- bug fixes
+- Code Style Checker
+    - Updated these checkers.
+        - Imports to `flake8-tidy-imports` v4.11.0
+        - Logging to `flake8-logging` v1.7.0
+        - Miscellaneous to `flake8-bugbear` v24.12.12
+        - Miscellaneous to `flake8-comprehensions` v3.16.0
+        - Security to `bandit` v1.8.2
+    - Added these checkers to support more case.
+        - 'Structural Pattern Matching' based on `flake8-spm` v0.0.1
+        - Nested f-strings based on `flake8-nested-fstrings` v1.1.0
+        - `pydantic` and `dataclass` related topics based on `flake8-pydantic` v0.4.0
+- pip Interface
+    - Added a field to search for packages in the dependencies list.
+
 ### Version 25.2
 - bug fixes
 - MicroPython
--- a/eric7.epj	Sun Feb 09 15:47:57 2025 +0100
+++ b/eric7.epj	Sat Mar 01 15:52:40 2025 +0100
@@ -1,7 +1,7 @@
 {
   "header": {
     "comment": "eric project file for project eric7",
-    "copyright": "Copyright (C) 2024 Detlev Offenbach, detlev@die-offenbachs.de"
+    "copyright": "Copyright (C) 2025 Detlev Offenbach, detlev@die-offenbachs.de"
   },
   "project": {
     "AUTHOR": "Detlev Offenbach",
@@ -67,9 +67,9 @@
         "CopyrightAuthor": "",
         "CopyrightMinFileSize": 0,
         "DocstringType": "eric_black",
-        "EnabledCheckerCategories": "C, D, E, I, L, M, NO, N, Y, U, W",
+        "EnabledCheckerCategories": "PYD, C, D, E, I, L, M, NO, N, Y, U, W",
         "ExcludeFiles": "*/ThirdParty/*, */Ui_*.py, */Examples/*, */pycodestyle.py, */pyflakes/*, */mccabe.py, */eradicate.py, */ast_unparse.py, */piplicenses.py, */MCUScripts/*, */MicroPython/Tools/*",
-        "ExcludeMessages": "C101,E203,E265,E266,E305,E402,M251,M701,M702,M811,M834,M852,N802,N803,N807,N808,N821,U101,W293,W503,Y119,Y401,Y402",
+        "ExcludeMessages": "C-101,E-203,E-265,E-266,E-305,E-402,M-251,M-701,M-702,M-811,M-834,M-852,N-802,N-803,N-807,N-808,N-821,U-101,W-293,W-503,Y-119,Y-401,Y-402",
         "FixCodes": "",
         "FixIssues": false,
         "FutureChecker": "",
@@ -97,7 +97,7 @@
           "SortIgnoringStyle": false,
           "SortOrder": "natural"
         },
-        "NoFixCodes": "E501",
+        "NoFixCodes": "E-501",
         "RepeatMessages": true,
         "SecurityChecker": {
           "CheckTypedException": false,
@@ -1579,6 +1579,7 @@
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCodeSelectionDialog.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleStatisticsDialog.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleTopicChecker.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/ComplexityChecker.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/__init__.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/mccabe.py",
@@ -1594,8 +1595,14 @@
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/LoggingVisitor.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/__init__.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/translations.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/BugBearVisitor.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/DateTimeVisitor.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/DefaultMatchCaseVisitor.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousDefaults.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/ReturnVisitor.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/SysVersionVisitor.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/TextVisitor.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/__init__.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/eradicate.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py",
@@ -1610,6 +1617,11 @@
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/PathLib/PathlibChecker.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/PathLib/__init__.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticChecker.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticUtils.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticVisitor.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/__init__.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/__init__.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/assert.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/awsHardcodedPassword.py",
@@ -1622,11 +1634,11 @@
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalFilePermissions.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedPassword.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedTmp.py",
+      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/hashlibInsecureFunctions.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionParamiko.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionShell.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionSql.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionWildcard.py",
-      "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/insecureHashlibNew.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/insecureSslTls.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/jinja2Templates.py",
       "src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/loggingConfigInsecureListen.py",
--- a/scripts/cleanupSource.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/cleanupSource.py	Sat Mar 01 15:52:40 2025 +0100
@@ -72,4 +72,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/compileUiFiles.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/compileUiFiles.py	Sat Mar 01 15:52:40 2025 +0100
@@ -97,7 +97,7 @@
     ProcessPoolExecutor = None
     if workers != 1:
         try:
-            from concurrent.futures import ProcessPoolExecutor  # noqa: I101, I103
+            from concurrent.futures import ProcessPoolExecutor  # noqa: I-101, I-103
         except NotImplementedError:
             workers = 1
 
@@ -155,4 +155,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/create_windows_links.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/create_windows_links.py	Sat Mar 01 15:52:40 2025 +0100
@@ -163,4 +163,4 @@
         raise
 
 #
-# eflag: noqa = M801, I102
+# eflag: noqa = M-801, I-102
--- a/scripts/install-debugclients.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/install-debugclients.py	Sat Mar 01 15:52:40 2025 +0100
@@ -542,4 +542,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/install-dependencies.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/install-dependencies.py	Sat Mar 01 15:52:40 2025 +0100
@@ -156,4 +156,4 @@
     main()
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/install-server.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/install-server.py	Sat Mar 01 15:52:40 2025 +0100
@@ -684,4 +684,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/install.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/install.py	Sat Mar 01 15:52:40 2025 +0100
@@ -160,7 +160,7 @@
     else:
         # determine dynamically
         try:
-            from PyQt6.QtCore import QLibraryInfo  # noqa: I101, I102
+            from PyQt6.QtCore import QLibraryInfo  # noqa: I-101, I-102
 
             qtDataDir = QLibraryInfo.path(QLibraryInfo.LibraryPath.DataPath)
         except ImportError:
@@ -224,10 +224,10 @@
     """
     if os.path.exists(os.path.join("eric", "src", "eric7", "__version__.py")):
         # Installing from installer archive
-        from eric.src.eric7.__version__ import Version  # noqa: I101, I102
+        from eric.src.eric7.__version__ import Version  # noqa: I-101, I-102
     elif os.path.exists(os.path.join("src", "eric7", "__version__.py")):
         # Installing from source tree
-        from src.eric7.__version__ import Version  # noqa: I101, I102
+        from src.eric7.__version__ import Version  # noqa: I-101, I-102
     else:
         Version = "Unknown"
 
@@ -450,7 +450,7 @@
     global platBinDir
 
     try:
-        from eric7.Globals import getConfig  # noqa: I101
+        from eric7.Globals import getConfig  # noqa: I-101
     except ImportError:
         # eric wasn't installed previously
         return
@@ -1194,7 +1194,7 @@
     # determine entry for DYLD_FRAMEWORK_PATH
     dyldLine = ""
     try:
-        from PyQt6.QtCore import QLibraryInfo  # noqa: I101, I102
+        from PyQt6.QtCore import QLibraryInfo  # noqa: I-101, I-102
 
         qtLibraryDir = QLibraryInfo.path(QLibraryInfo.LibraryPath.LibrariesPath)
     except ImportError:
@@ -1232,10 +1232,10 @@
 
     if os.path.exists(os.path.join("eric", "eric7", "__version__.py")):
         # Installing from archive
-        from eric.eric7.__version__ import CopyrightShort, Version  # noqa: I101, I102
+        from eric.eric7.__version__ import CopyrightShort, Version  # noqa: I-101, I-102
     elif os.path.exists(os.path.join("eric7", "__version__.py")):
         # Installing from source tree
-        from eric7.__version__ import CopyrightShort, Version  # noqa: I101
+        from eric7.__version__ import CopyrightShort, Version  # noqa: I-101
     else:
         Version = "Unknown"
         CopyrightShort = "(c) 2002 - 2025 Detlev Offenbach"
@@ -1624,7 +1624,7 @@
     print("PyQt & Qt")
     print("---------")
     try:
-        from PyQt6.QtCore import qVersion  # noqa: I101, I102
+        from PyQt6.QtCore import qVersion  # noqa: I-101, I-102
     except ImportError as err:
         msg = "'PyQt6' could not be detected.{0}".format(
             "\nError: {0}".format(err) if verbose else ""
@@ -1635,7 +1635,7 @@
         if installed:
             # try to import it again
             try:
-                from PyQt6.QtCore import qVersion  # noqa: I101, I102
+                from PyQt6.QtCore import qVersion  # noqa: I-101, I-102
             except ImportError as msg:
                 print("Sorry, please install PyQt6.")
                 print("Error: {0}".format(msg))
@@ -1847,9 +1847,9 @@
     # ====================
     with contextlib.suppress(ImportError, AttributeError):
         try:
-            from PyQt6 import sip  # noqa: I101, I102
+            from PyQt6 import sip  # noqa: I-101, I-102
         except ImportError:
-            import sip  # noqa: I101, I102
+            import sip  # noqa: I-101, I-102
         print("sip:", sip.SIP_VERSION_STR.strip())
         # always assume, that snapshots or dev versions are new enough
         if "snapshot" not in sip.SIP_VERSION_STR and "dev" not in sip.SIP_VERSION_STR:
@@ -1874,7 +1874,7 @@
 
     # check version of PyQt6
     # ======================
-    from PyQt6.QtCore import PYQT_VERSION, PYQT_VERSION_STR  # noqa: I101, I102
+    from PyQt6.QtCore import PYQT_VERSION, PYQT_VERSION_STR  # noqa: I-101, I-102
 
     print("PyQt6:", PYQT_VERSION_STR.strip())
     # always assume, that snapshots or dev versions are new enough
@@ -1900,7 +1900,7 @@
 
     # check version of QScintilla
     # ===========================
-    from PyQt6.Qsci import (  # noqa: I101, I102
+    from PyQt6.Qsci import (  # noqa: I-101, I-102
         QSCINTILLA_VERSION,
         QSCINTILLA_VERSION_STR,
     )
@@ -1928,12 +1928,12 @@
 
     # print version info for additional modules
     with contextlib.suppress(NameError, AttributeError):
-        from PyQt6.QtCharts import PYQT_CHART_VERSION_STR  # noqa: I101, I102
+        from PyQt6.QtCharts import PYQT_CHART_VERSION_STR  # noqa: I-101, I-102
 
         print("PyQt6-Charts:", PYQT_CHART_VERSION_STR)
 
     with contextlib.suppress(ImportError, AttributeError):
-        from PyQt6 import QtWebEngineCore  # noqa: I101, I102
+        from PyQt6 import QtWebEngineCore  # noqa: I-101, I-102
 
         print("PyQt6-WebEngine:", QtWebEngineCore.PYQT_WEBENGINE_VERSION_STR)
 
@@ -1994,7 +1994,7 @@
     @rtype Any
     """
     try:
-        import winreg  # noqa: I101, I103
+        import winreg  # noqa: I-101, I-103
     except ImportError:
         return None
 
@@ -2021,8 +2021,8 @@
     # replicate stuff done in pywin32.pth - needed only here
     import pywin32_bootstrap  # noqa
 
-    from pywintypes import com_error  # noqa: I102
-    from win32com.client import Dispatch  # noqa: I102
+    from pywintypes import com_error  # noqa: I-102
+    from win32com.client import Dispatch  # noqa: I-102
 
     with contextlib.suppress(com_error):
         shell = Dispatch("WScript.Shell")
@@ -2440,4 +2440,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/uninstall-debugclients.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/uninstall-debugclients.py	Sat Mar 01 15:52:40 2025 +0100
@@ -120,4 +120,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/uninstall-server.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/uninstall-server.py	Sat Mar 01 15:52:40 2025 +0100
@@ -161,4 +161,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/scripts/uninstall.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/scripts/uninstall.py	Sat Mar 01 15:52:40 2025 +0100
@@ -396,7 +396,7 @@
     Remove the eric configuration directory.
     """
     try:
-        from PyQt6.QtCore import QSettings  # __IGNORE_WARNING_I10__
+        from PyQt6.QtCore import QSettings  # __IGNORE_WARNING_I-10__
     except ImportError:
         print("No PyQt variant installed. The configuration directory")
         print("cannot be determined. You have to remove it manually.\n")
@@ -443,7 +443,7 @@
     @rtype Any
     """
     # From http://stackoverflow.com/a/35286642
-    import winreg  # __IGNORE_WARNING_I103__
+    import winreg  # __IGNORE_WARNING_I-103__
 
     try:
         registryKey = winreg.OpenKey(winreg.HKEY_CURRENT_USER, path, 0, winreg.KEY_READ)
@@ -527,4 +527,4 @@
         raise
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/APIs/Python3/eric7.api	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/APIs/Python3/eric7.api	Sat Mar 01 15:52:40 2025 +0100
@@ -3922,6 +3922,7 @@
 eric7.PipInterface.PipPackagesWidget.PipPackagesWidget.on_localCheckBox_clicked?4()
 eric7.PipInterface.PipPackagesWidget.PipPackagesWidget.on_localDepCheckBox_clicked?4()
 eric7.PipInterface.PipPackagesWidget.PipPackagesWidget.on_notRequiredCheckBox_clicked?4()
+eric7.PipInterface.PipPackagesWidget.PipPackagesWidget.on_packageSearchEdit_textChanged?4(package)
 eric7.PipInterface.PipPackagesWidget.PipPackagesWidget.on_packagesList_itemActivated?4(item, column)
 eric7.PipInterface.PipPackagesWidget.PipPackagesWidget.on_packagesList_itemSelectionChanged?4()
 eric7.PipInterface.PipPackagesWidget.PipPackagesWidget.on_refreshButton_clicked?4()
@@ -4136,8 +4137,8 @@
 eric7.Plugins.AboutPlugin.AboutDialog.licenseText?7
 eric7.Plugins.AboutPlugin.AboutDialog.thanksText?7
 eric7.Plugins.AboutPlugin.AboutDialog.titleText?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.AnnotationsChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.AnnotationsChecker.Codes?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.AnnotationsChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.AnnotationsChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsCheckerDefaults.AnnotationsCheckerDefaultArgs?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsDeprecationsVisitor.AnnotationsDeprecationsVisitor.NameReplacements?7
@@ -4222,8 +4223,8 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isNameConstant?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isNumber?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.isString?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.AsyncChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.AsyncChecker.Codes?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.AsyncChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.AsyncChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncVisitor.AsyncVisitor.HttpMethods?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncVisitor.AsyncVisitor.HttpPackages?7
@@ -4240,7 +4241,7 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.CodeStyleAddBuiltinIgnoreDialog.on_leftEdit_textChanged?4(_txt)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.CodeStyleAddBuiltinIgnoreDialog.on_rightEdit_textChanged?4(_txt)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleAddBuiltinIgnoreDialog.CodeStyleAddBuiltinIgnoreDialog?1(parent=None)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.CodeStyleCheckerReport.error_args?4(line_number, offset, errorCode, check, *args)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.CodeStyleCheckerReport.error_args?4(line_number, offset, text, _check, *args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.CodeStyleCheckerReport?1(options)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.codeStyleBatchCheck?4(argumentsList, send, fx, cancelled, maxProcesses=0)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.codeStyleCheck?4(filename, source, args)
@@ -4314,8 +4315,14 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.Reindenter.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.Reindenter?1(sourceLines)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleStatisticsDialog.CodeStyleStatisticsDialog?1(statisticData, parent=None)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.CodeStyleTopicChecker._ignoreCode?5(code)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.CodeStyleTopicChecker._initializeCheckers?5(checkersWithCodes)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.CodeStyleTopicChecker.addError?4(lineNumber, offset, msgCode, *args)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.CodeStyleTopicChecker.addErrorFromNode?4(node, msgCode, *args)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.CodeStyleTopicChecker.run?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.CodeStyleTopicChecker?1(category, source, filename, tree, select, ignore, expected, repeat, args)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.ComplexityChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.ComplexityChecker.Codes?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.ComplexityChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.ComplexityChecker?1(source, filename, tree, select, ignore, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.LineComplexityVisitor.score?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.LineComplexityVisitor.sortedList?4()
@@ -4352,7 +4359,9 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.mccabe.PathNode?1(name, look="circle")
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.translations._complexityMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.translations._complexityMessagesSampleArgs?8
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.DocStyleChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.DocStyleChecker.Codes?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.DocStyleChecker.addError?4(lineNumber, offset, msgCode, *args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.DocStyleChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.DocStyleChecker?1(source, filename, select, ignore, expected, repeat, maxLineLength=88, docType="pep257", )
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.DocStyleContext.contextType?4()
@@ -4366,8 +4375,8 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.DocStyleContext?1(source, startLine, contextType)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.translations._docStyleMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.translations._docStyleMessagesSampleArgs?8
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.ImportsChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.ImportsChecker.Codes?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.ImportsChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.ImportsChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.LocalImportVisitor.LocalImportVisitor.visit?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.LocalImportVisitor.LocalImportVisitor.visit_FunctionDef?4(node)
@@ -4376,8 +4385,8 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.LocalImportVisitor.LocalImportVisitor?1(args, checker)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.translations._importsMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.translations._importsMessagesSampleArgs?8
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.LoggingChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.LoggingChecker.Codes?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.LoggingChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.LoggingChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.LoggingVisitor.GetLoggerNames?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.LoggingVisitor.visit?4()
@@ -4392,121 +4401,132 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor._modposPlaceholderRe?5()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.translations._loggingMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.translations._loggingMessagesSampleArgs?8
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearContext?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.CONTEXTFUL_NODES?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.FUNCTION_NODES?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.NodeWindowSize?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor._loop?5(badNodeTypes)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.check?4(paramName)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.emptyBody?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.isAbcClass?4(name="ABC")
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.isAbstractDecorator?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.isOverload?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.isStrOrEllipsis?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.nodeStack?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.superwalk?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.toNameStr?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_AnnAssign?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Assert?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Assign?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_AsyncFor?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_AsyncFunctionDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Call?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_ClassDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Compare?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_DictComp?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_ExceptHandler?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_For?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_FunctionDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_GeneratorExp?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Import?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_ImportFrom?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_JoinedStr?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_ListComp?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Module?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Raise?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Return?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Set?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_SetComp?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Try?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_UAdd?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_While?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_With?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Yield?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_YieldFrom?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor?1()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugbearImmutableCalls?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugbearMutableCalls?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugbearMutableComprehensions?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugbearMutableLiterals?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.DateTimeVisitor.visit_Call?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.DateTimeVisitor?1()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ExceptBaseExceptionVisitor.reRaised?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ExceptBaseExceptionVisitor.visit_ExceptHandler?4(node: ast.ExceptHandler)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ExceptBaseExceptionVisitor.visit_Raise?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ExceptBaseExceptionVisitor?1(exceptNode)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.FunctionDefDefaultsVisitor.visit?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.FunctionDefDefaultsVisitor.visit_Call?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.FunctionDefDefaultsVisitor.visit_Lambda?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.FunctionDefDefaultsVisitor?1(errorCodeCalls, errorCodeLiterals, )
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M520NameFinder.visit_DictComp?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M520NameFinder.visit_GeneratorExp?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M520NameFinder.visit_Lambda?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M520NameFinder.visit_ListComp?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M520NameFinder.visit_comprehension?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M540CaughtException.hasNote?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M540CaughtException.name?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M569Checker.MUTATING_FUNCTIONS?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M569Checker.visit?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M569Checker.visit_Call?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M569Checker.visit_Delete?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.M569Checker?1(name, bugbear)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearContext?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.CONTEXTFUL_NODES?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.FUNCTION_NODES?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.NodeWindowSize?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor._loop?5(badNodeTypes)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.check?4(paramName)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.convertToValue?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.emptyBody?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.isAbcClass?4(name="ABC")
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.isAbstractDecorator?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.isOverload?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.isStrOrEllipsis?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.nodeStack?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.superwalk?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.toNameStr?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_AnnAssign?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Assert?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Assign?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_AsyncFor?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_AsyncFunctionDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Call?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_ClassDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Compare?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Dict?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_DictComp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_ExceptHandler?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_For?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_FunctionDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_GeneratorExp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Import?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_ImportFrom?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_JoinedStr?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_ListComp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Module?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Raise?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Return?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Set?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_SetComp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Try?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_TryStar?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_UAdd?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_While?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_With?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_Yield?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor.visit_YieldFrom?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugBearVisitor?1()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugbearImmutableCalls?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugbearMutableCalls?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugbearMutableComprehensions?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.BugbearMutableLiterals?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.ExceptBaseExceptionVisitor.reRaised?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.ExceptBaseExceptionVisitor.visit_ExceptHandler?4(node: ast.ExceptHandler)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.ExceptBaseExceptionVisitor.visit_Raise?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.ExceptBaseExceptionVisitor?1(exceptNode)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.FunctionDefDefaultsVisitor.visit?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.FunctionDefDefaultsVisitor.visit_Call?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.FunctionDefDefaultsVisitor.visit_Lambda?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.FunctionDefDefaultsVisitor?1(errorCodeCalls, errorCodeLiterals, )
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M520NameFinder.visit_DictComp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M520NameFinder.visit_GeneratorExp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M520NameFinder.visit_Lambda?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M520NameFinder.visit_ListComp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M520NameFinder.visit_comprehension?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M540CaughtException.hasNote?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M540CaughtException.name?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M541VariableKeyType?1(name)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M569Checker.MUTATING_FUNCTIONS?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M569Checker.visit?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M569Checker.visit_Call?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M569Checker.visit_Delete?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.M569Checker?1(name, bugbear)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NameFinder.getNames?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NameFinder.visit?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NameFinder.visit_Name?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NameFinder?1()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NamedExprFinder.getNames?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NamedExprFinder.visit?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NamedExprFinder.visit_NamedExpr?4(node: ast.NamedExpr)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.NamedExprFinder?1()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.composeCallPath?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.DateTimeVisitor.visit_Call?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.DateTimeVisitor?1()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.DefaultMatchCaseVisitor.visit_Match?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.DefaultMatchCaseVisitor?1()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.BuiltinsWhiteList?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.Codes?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.FormatFieldRegex?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.Formatter?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NameFinder.getNames?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NameFinder.visit?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NameFinder.visit_Name?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NameFinder?1()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NamedExprFinder.getNames?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NamedExprFinder.visit?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NamedExprFinder.visit_NamedExpr?4(node: ast.NamedExpr)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.NamedExprFinder?1()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.Assigns?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.Refs?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.Returns?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.assigns?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.refs?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.returns?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_Assign?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_AsyncFor?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_AsyncFunctionDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_For?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_FunctionDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_Name?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_Return?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor.visit_While?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.ReturnVisitor?1()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.SysVersionVisitor.visit_Attribute?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.SysVersionVisitor.visit_Compare?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.SysVersionVisitor.visit_ImportFrom?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.SysVersionVisitor.visit_Name?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.SysVersionVisitor.visit_Subscript?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.SysVersionVisitor?1()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor.visit_AsyncFunctionDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor.visit_Call?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor.visit_ClassDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor.visit_Constant?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor.visit_FunctionDef?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor.visit_Module?4(node)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.TextVisitor?1()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.composeCallPath?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.pairwise?4(iterable)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousDefaults.MiscellaneousCheckerDefaultArgs?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.Assigns?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.Loops?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.Refs?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.Returns?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.Tries?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.assigns?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.loops?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.refs?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.returns?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.tries?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_Assign?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_AsyncFor?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_AsyncFunctionDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_For?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_FunctionDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_Name?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_Return?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_Try?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor.visit_While?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.ReturnVisitor?1()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.SysVersionVisitor.visit_Attribute?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.SysVersionVisitor.visit_Compare?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.SysVersionVisitor.visit_ImportFrom?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.SysVersionVisitor.visit_Name?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.SysVersionVisitor.visit_Subscript?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.SysVersionVisitor?1()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.TextVisitor.visit_AsyncFunctionDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.TextVisitor.visit_Call?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.TextVisitor.visit_ClassDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.TextVisitor.visit_Constant?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.TextVisitor.visit_FunctionDef?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.TextVisitor.visit_Module?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.TextVisitor?1()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate.Eradicator.BRACKET_REGEX?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate.Eradicator.CODE_INDICATORS?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate.Eradicator.CODE_KEYWORDS?7
@@ -4542,31 +4562,55 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.ImportsEnums.GroupEnum.THIRDPARTY?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.ImportsEnums.NodeTypeEnum.IMPORT?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.ImportsEnums.NodeTypeEnum.IMPORT_FROM?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.NameOrderChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.NameOrderChecker.Codes?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.NameOrderChecker.keyCallback?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.NameOrderChecker.moduleKey?4(moduleName, subImports=False)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.NameOrderChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.NameOrderChecker.sorted?4(toSort, key=None, reverse=False)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.NameOrderChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.translations._nameOrderMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.translations._nameOrderMessagesSampleArgs?8
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.NamingStyleChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.NamingStyleChecker.Codes?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.NamingStyleChecker.addErrorFromNode?4(node, msgCode)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.NamingStyleChecker.run?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.NamingStyleChecker?1(tree, filename, options)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.NamingStyleChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.translations._namingStyleMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.NameResolver.name?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.NameResolver.visit_Attribute?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.NameResolver.visit_Name?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.NameResolver?1(importAlias)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibChecker.Codes?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibChecker.Function2Code?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibChecker?1(source, filename, tree, selected, ignored, expected, repeat)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibVisitor.visit_Call?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibVisitor.visit_Import?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibVisitor.visit_ImportFrom?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.PathlibVisitor?1(checkCallback)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.translations._pathlibMessages?8
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.PydanticChecker.Category?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.PydanticChecker.Codes?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.PydanticChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.PYDANTIC_DECORATORS?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.PYDANTIC_FIELD_ARGUMENTS?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.PYDANTIC_METHODS?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils._hasAnnotatedField?5(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils._hasFieldFunction?5(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils._hasModelConfig?5(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils._hasPydanticDecorator?5(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils._hasPydanticMethod?5(node: ast.ClassDef)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils._hasPydanticModelBase?5(node, *, includeRootModel)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.extractAnnotations?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.getDecoratorNames?4(decoratorList)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.isDataclass?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.isFunction?4(node, functionName)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.isName?4(node, name)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.isPydanticModel?4(node, *, includeRootModel=True)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.PydanticVisitor.visit_AnnAssign?4(node: ast.AnnAssign)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.PydanticVisitor.visit_ClassDef?4(node: ast.ClassDef)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.PydanticVisitor?1(errorCallback)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations._pydanticMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.assert.checkAssertUsed?4(reportError, context, _config)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.assert.getChecks?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.awsHardcodedPassword.AWS_ACCESS_KEY_ID_MAX_ENTROPY?7
@@ -4611,6 +4655,10 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp.checkHardcodedTmpDirectory?4(reportError, context, config)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp.getChecks?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generateCheckersDict?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions._cryptCrypt?5(reportError, context, func, config)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions._hashlibFunc?5(reportError, context, func, config)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.checkHashlib?4(reportError, context, config)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.getChecks?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko.checkParamikoCalls?4(reportError, context, _config)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko.getChecks?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell._evaluateShellCall?5(context)
@@ -4630,11 +4678,6 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.getChecks?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionWildcard.checkLinuxCommandsWildcardInjection?4(reportError, context, config)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionWildcard.getChecks?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew._cryptCrypt?5(reportError, context, func, config)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew._hashlibFunc?5(reportError, context, func, config)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew._hashlibNew?5(reportError, context, func, config)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.checkHashlib?4(reportError, context, config)
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.getChecks?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.checkInsecureSslDefaults?4(reportError, context, config)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.checkInsecureSslProtocolVersion?4(reportError, context, config)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.checkSslWithoutVersion?4(reportError, context, _config)
@@ -4678,9 +4721,10 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.weakCryptographicKey.getChecks?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.yamlLoad.checkYamlLoad?4(reportError, context, _config)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.yamlLoad.getChecks?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.SecurityChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.SecurityChecker.Codes?7
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.SecurityChecker.addError?4(lineNumber, offset, msgCode, severity, confidence, *args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.SecurityChecker.getConfig?4()
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.SecurityChecker.reportError?4(lineNumber, offset, code, severity, confidence, *args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.SecurityChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.SecurityChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityContext.SecurityContext.bytesVal?4()
@@ -4732,8 +4776,8 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.namespacePathSplit?4(path)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.translations._securityMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.translations._securityMessagesSampleArgs?8
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.SimplifyChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.SimplifyChecker.Codes?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.SimplifyChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.SimplifyChecker?1(source, filename, tree, selected, ignored, expected, repeat)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.getOsPathJoinArgs?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_Assign?4(node)
@@ -4745,6 +4789,7 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_For?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_If?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_IfExp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_JoinedStr?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_Subscript?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_Try?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.SimplifyNodeVisitor.visit_UnaryOp?4(node)
@@ -4761,8 +4806,8 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.GlobalVariableLoadCounter?1()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.GlobalVariableStoreInfo?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.NameFinder.visit_Name?4(name)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.UnusedChecker.Category?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.UnusedChecker.Codes?7
-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.UnusedChecker.run?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.UnusedChecker?1(source, filename, tree, select, ignore, expected, repeat, args)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.translations._unusedMessages?8
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.translations._unusedMessagesSampleArgs?8
--- a/src/eric7/APIs/Python3/eric7.bas	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/APIs/Python3/eric7.bas	Sat Mar 01 15:52:40 2025 +0100
@@ -25,6 +25,7 @@
 AddProjectDialog QDialog Ui_AddProjectDialog
 AddProjectUrlDialog QDialog Ui_AddProjectUrlDialog
 AnnotationType enum.Enum
+AnnotationsChecker CodeStyleTopicChecker
 AnnotationsDeprecationsVisitor ast.NodeVisitor
 AnnotationsFutureImportVisitor ast.NodeVisitor
 AnnotationsFutureVisitor ast.NodeVisitor
@@ -37,6 +38,7 @@
 AssociationItem EricArrowItem
 AssociationPointRegion enum.Enum
 AssociationType enum.Enum
+AsyncChecker CodeStyleTopicChecker
 AsyncVisitor ast.NodeVisitor
 Attribute ClbrBaseClasses.Attribute VisibilityMixin
 AutoSaver QObject
@@ -124,6 +126,7 @@
 CompleterPython CompleterBase
 CompleterRuby CompleterBase
 CompleterYaml CompleterBase
+ComplexityChecker CodeStyleTopicChecker
 Conda QObject
 CondaExecDialog QDialog Ui_CondaExecDialog
 CondaExportDialog QDialog Ui_CondaExportDialog
@@ -171,6 +174,7 @@
 DebuggerPropertiesFile QObject
 DebuggerPython3Page ConfigurationPageBase Ui_DebuggerPython3Page
 DeepLEngine TranslationEngine
+DefaultMatchCaseVisitor ast.NodeVisitor
 DefaultResolver BaseResolver
 DelayedFileWatcher EricFileSystemWatcher
 DeleteFilesConfirmationDialog QDialog Ui_DeleteFilesConfirmationDialog
@@ -182,6 +186,7 @@
 DiffReport StandardReport
 DiffWindow EricMainWindow
 DirectorySyncHandler SyncHandler
+DocStyleChecker CodeStyleTopicChecker
 DocstringMenuForEnterOnly QMenu
 DocumentationViewerWidget QWidget
 DotDesktopListSelectionDialog QDialog Ui_DotDesktopListSelectionDialog
@@ -638,6 +643,7 @@
 ImageSearchEngine QObject
 ImagesIcon StatusBarIcon
 ImportNodeError Exception
+ImportsChecker CodeStyleTopicChecker
 ImportsDiagramBuilder UMLDiagramBuilder
 InputDialogWizard QObject
 InputDialogWizardDialog QDialog Ui_InputDialogWizardDialog
@@ -717,6 +723,7 @@
 LogViewer QWidget
 LogViewerEdit QTextEdit
 LogViewerPage ConfigurationPageBase Ui_LogViewerPage
+LoggingChecker CodeStyleTopicChecker
 LoggingVisitor ast.NodeVisitor
 M520NameFinder NameFinder
 M569Checker ast.NodeVisitor
@@ -755,6 +762,7 @@
 MiniScintilla QsciScintillaCompat
 MipLocalInstaller QObject
 MipPackageDialog QDialog Ui_MipPackageDialog
+MiscellaneousChecker CodeStyleTopicChecker
 Module ClbrBaseClasses.Module VisibilityMixin
 ModuleItem UMLItem
 ModuleModel UMLModel
@@ -766,8 +774,10 @@
 MultiValueDictResolver DictResolver
 MyMemoryEngine TranslationEngine
 NameFinder ast.NodeVisitor
+NameOrderChecker CodeStyleTopicChecker
 NameResolver ast.NodeVisitor
 NamedExprFinder ast.NodeVisitor
+NamingStyleChecker CodeStyleTopicChecker
 NavigationBar QWidget
 NavigationContainer QWidget
 NdArrayResolver BaseResolver
@@ -813,6 +823,7 @@
 PasswordWriter QXmlStreamWriter
 PasswordsDialog QDialog Ui_PasswordsDialog
 PathGraphingAstVisitor ASTVisitor
+PathlibChecker CodeStyleTopicChecker
 PathlibVisitor ast.NodeVisitor
 PdfGoToDialog QDialog
 PdfInfoWidget QWidget
@@ -920,6 +931,8 @@
 PyRegExpWizardWidget QWidget Ui_PyRegExpWizardDialog
 PyRegExpWizardWindow EricMainWindow
 PySvnProjectHelper VcsProjectHelper
+PydanticChecker CodeStyleTopicChecker
+PydanticVisitor ast.NodeVisitor
 PytestExecutor TestExecutorBase
 PythonAstViewer QWidget
 PythonDisViewer QWidget Ui_PythonDisViewer
@@ -971,6 +984,7 @@
 SearchReplaceSlidingWidget QWidget
 SearchReplaceWidget QWidget Ui_SearchReplaceWidget
 SearchWidget QWidget Ui_SearchWidget
+SecurityChecker CodeStyleTopicChecker
 SecurityPage ConfigurationPageBase Ui_SecurityPage
 SelectAction argparse.Action
 SendRefererWhitelistDialog QDialog Ui_SendRefererWhitelistDialog
@@ -997,6 +1011,7 @@
 ShowModulesDialog QDialog Ui_ShowModulesDialog
 ShowOutdatedDialog QDialog Ui_ShowOutdatedDialog
 SimplePatternExtension Extension
+SimplifyChecker CodeStyleTopicChecker
 SimplifyNodeVisitor ast.NodeVisitor
 SingleApplicationServer QLocalServer
 SiteInfoDialog QDialog Ui_SiteInfoDialog
@@ -1150,6 +1165,7 @@
 UncommitProjectHelper HgExtensionProjectHelper
 UnittestExecutor TestExecutorBase
 UnknownDevicesDialog QDialog Ui_UnknownDevicesDialog
+UnusedChecker CodeStyleTopicChecker
 UrlBar EricClearableLineEdit
 UrlInterceptor QObject
 UserAgentManager QObject
--- a/src/eric7/CodeFormatting/BlackFormattingDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/CodeFormatting/BlackFormattingDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -668,7 +668,7 @@
         """
         self.result.emit("failed", str(src), message)
 
-    def path_ignored(self, src, message=""):  # noqa: U100
+    def path_ignored(self, src, message=""):  # noqa: U-100
         """
         Public method handling an ignored path.
 
@@ -746,7 +746,7 @@
             BlackMultiprocessingResult(status="failed", filename=str(src), data=message)
         )
 
-    def path_ignored(self, src, message=""):  # noqa: U100
+    def path_ignored(self, src, message=""):  # noqa: U-100
         """
         Public method handling an ignored path.
 
--- a/src/eric7/CycloneDXInterface/CycloneDXUtilities.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/CycloneDXInterface/CycloneDXUtilities.py	Sat Mar 01 15:52:40 2025 +0100
@@ -340,11 +340,11 @@
     """
     # add a Tool entry for eric7
     try:
-        from importlib.metadata import version as meta_version  # __IGNORE_WARNING_I10__
+        from importlib.metadata import version as meta_version  # noqa: I-10
 
         __EricToolVersion = str(meta_version("eric-ide"))
     except Exception:
-        from eric7.__version__ import Version  # __IGNORE_WARNING_I101__
+        from eric7.__version__ import Version  # __IGNORE_WARNING_I-101__
 
         __EricToolVersion = Version
 
--- a/src/eric7/DataViews/CodeMetrics.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DataViews/CodeMetrics.py	Sat Mar 01 15:52:40 2025 +0100
@@ -86,7 +86,7 @@
                     self.__addToken(toktype, toktext, srow, scol, line)
         except tokenize.TokenError as msg:
             print("Token Error: {0}".format(str(msg)))
-            # __IGNORE_WARNING_M801__
+            # __IGNORE_WARNING_M-801__
             return
 
         return
--- a/src/eric7/DebugClients/Python/AsyncFile.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/AsyncFile.py	Sat Mar 01 15:52:40 2025 +0100
@@ -299,7 +299,7 @@
         """
         return False
 
-    def seek(self, offset, whence=0):  # noqa: U100
+    def seek(self, offset, whence=0):  # noqa: U-100
         """
         Public method to move the filepointer.
 
@@ -321,7 +321,7 @@
         """
         raise OSError((29, "[Errno 29] Illegal seek"))
 
-    def truncate(self, size=-1):  # noqa: U100
+    def truncate(self, size=-1):  # noqa: U-100
         """
         Public method to truncate the file.
 
--- a/src/eric7/DebugClients/Python/DebugBase.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/DebugBase.py	Sat Mar 01 15:52:40 2025 +0100
@@ -183,7 +183,7 @@
 
             with contextlib.suppress(ImportError, AttributeError):
                 if "__pypy__" in sys.builtin_module_names:
-                    import __pypy__  # __IGNORE_WARNING_I10__
+                    import __pypy__  # __IGNORE_WARNING_I-10__
 
                     __pypy__.locals_to_fast(cf)
                     return
@@ -401,7 +401,7 @@
             # ignore C events
             return None
 
-        print(  # __IGNORE_WARNING_M801__
+        print(  # __IGNORE_WARNING_M-801__
             "DebugBase.trace_dispatch: unknown debugging event: ",
             repr(event),
         )
@@ -488,7 +488,7 @@
         @type bool
         """
         if globalsDict is None:
-            import __main__  # __IGNORE_WARNING_I10__
+            import __main__  # __IGNORE_WARNING_I-10__
 
             globalsDict = __main__.__dict__
 
--- a/src/eric7/DebugClients/Python/DebugClientBase.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/DebugClientBase.py	Sat Mar 01 15:52:40 2025 +0100
@@ -144,10 +144,10 @@
         # Python types
         "list": "[]",
         "tuple": "()",
-        "dict": "{:}",  # __IGNORE_WARNING_M613__
-        "set": "{}",  # __IGNORE_WARNING_M613__
-        "frozenset": "{}",  # __IGNORE_WARNING_M613__
-        "numpy.ndarray": "[ndarray]",  # __IGNORE_WARNING_M613__
+        "dict": "{:}",  # __IGNORE_WARNING_M-613__
+        "set": "{}",  # __IGNORE_WARNING_M-613__
+        "frozenset": "{}",  # __IGNORE_WARNING_M-613__
+        "numpy.ndarray": "[ndarray]",  # __IGNORE_WARNING_M-613__
         "collections.abc.ItemsView": "[]",
         "collections.abc.KeysView": "[]",
         "collections.abc.ValuesView": "[]",
@@ -350,7 +350,7 @@
         @param jsonStr string containing the command received from the IDE
         @type str
         """
-        ##        printerr(jsonStr)          ## debug       # noqa: M891
+        ##        printerr(jsonStr)          ## debug       # noqa: M-891
 
         try:
             commandDict = json.loads(jsonStr.strip())
@@ -550,7 +550,7 @@
                 )
 
         elif method == "RequestCoverage":
-            from coverage import Coverage  # __IGNORE_WARNING_I10__
+            from coverage import Coverage  # __IGNORE_WARNING_I-10__
 
             self.disassembly = None
             sys.argv = []
@@ -596,7 +596,7 @@
 
         elif method == "RequestProfile":
             sys.setprofile(None)
-            import PyProfile  # __IGNORE_WARNING_I10__
+            import PyProfile  # __IGNORE_WARNING_I-10__
 
             self.disassembly = None
             sys.argv = []
@@ -1811,7 +1811,7 @@
         tracePython=False,
         redirect=True,
         passive=True,
-        multiprocessSupport=False,  # noqa: U100
+        multiprocessSupport=False,  # noqa: U-100
     ):
         """
         Public method used to start the remote debugger.
@@ -2113,10 +2113,10 @@
                     del args[0]
             if not args:
                 print("No program given. Aborting!")
-                # __IGNORE_WARNING_M801__
+                # __IGNORE_WARNING_M-801__
             elif "-m" in args:
                 print("Running module as a script is not supported. Aborting!")
-                # __IGNORE_WARNING_M801__
+                # __IGNORE_WARNING_M-801__
             else:
                 # Store options in case a new Python process is created
                 self.startOptions = (
@@ -2184,7 +2184,7 @@
             else:
                 remoteAddress = self.__resolveHost(ipOrHost)
             if remoteAddress is None:
-                print(f"Remote host '{ipOrHost}' could not be resolved.")  # noqa: M801
+                print(f"Remote host '{ipOrHost}' could not be resolved.")  # noqa: M-801
                 sys.exit(1)
 
             sys.argv = [""]
@@ -2208,7 +2208,7 @@
                 self.connectDebugger(port, remoteAddress, redirect)
                 self.__interact()
             else:
-                print("No network port given. Aborting...")  # noqa: M801
+                print("No network port given. Aborting...")  # noqa: M-801
                 sys.exit(2)
 
     def close(self, fd):
--- a/src/eric7/DebugClients/Python/DebugVariables.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/DebugVariables.py	Sat Mar 01 15:52:40 2025 +0100
@@ -777,7 +777,7 @@
 ## resolver class to use
 ############################################################
 
-_TypeMap = _ArrayTypes = None  # noqa: U200
+_TypeMap = _ArrayTypes = None  # noqa: U-200
 _TryArray = _TryNumpy = _TryDjango = True
 _MapCount = 0
 
@@ -814,21 +814,21 @@
 
     # array.array may not be imported (yet)
     if _TryArray and "array" in sys.modules:
-        import array  # __IGNORE_WARNING_I10__
+        import array  # __IGNORE_WARNING_I-10__
 
         _TypeMap.append((array.array, arrayResolver))
         _TryArray = False
 
     # numpy may not be imported (yet)
     if _TryNumpy and "numpy" in sys.modules:
-        import numpy  # __IGNORE_WARNING_I10__
+        import numpy  # __IGNORE_WARNING_I-10__
 
         _TypeMap.append((numpy.ndarray, ndarrayResolver))
         _TryNumpy = False
 
     # django may not be imported (yet)
     if _TryDjango and "django" in sys.modules:
-        from django.utils.datastructures import MultiValueDict  # __IGNORE_WARNING_I10__
+        from django.utils.datastructures import MultiValueDict  # noqa: I-10
 
         # it should go before dict
         _TypeMap.insert(0, (MultiValueDict, multiValueDictResolver))
--- a/src/eric7/DebugClients/Python/FlexCompleter.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/FlexCompleter.py	Sat Mar 01 15:52:40 2025 +0100
@@ -253,4 +253,4 @@
 
 
 #
-# eflag: noqa = M111
+# eflag: noqa = M-111
--- a/src/eric7/DebugClients/Python/ModuleLoader.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/ModuleLoader.py	Sat Mar 01 15:52:40 2025 +0100
@@ -100,7 +100,7 @@
 
         return module
 
-    def find_spec(self, fullname, _path, target=None):  # noqa: U100
+    def find_spec(self, fullname, _path, target=None):  # noqa: U-100
         """
         Public method returning the module spec.
 
--- a/src/eric7/DebugClients/Python/MultiProcessDebugExtension.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/MultiProcessDebugExtension.py	Sat Mar 01 15:52:40 2025 +0100
@@ -259,7 +259,7 @@
         Function replacing the 'fork_exec' functions of the _posixsubprocess
         module.
         """
-        import _posixsubprocess  # __IGNORE_WARNING_I103__
+        import _posixsubprocess  # __IGNORE_WARNING_I-103__
 
         if _shallPatch():
             args = patchArguments(_debugClient, args)
@@ -363,9 +363,9 @@
         or _winapi module.
         """
         try:
-            import _subprocess  # __IGNORE_WARNING_I10__
+            import _subprocess  # __IGNORE_WARNING_I-10__
         except ImportError:
-            import _winapi as _subprocess  # __IGNORE_WARNING_I10__
+            import _winapi as _subprocess  # __IGNORE_WARNING_I-10__
         if _shallPatch():
             cmdline = patchArgumentStringWindows(_debugClient, cmdline)
         return getattr(_subprocess, originalName)(appName, cmdline, *args)
@@ -415,14 +415,14 @@
 
     if isWindowsPlatform():
         try:
-            import _subprocess  # __IGNORE_WARNING_I10__
+            import _subprocess  # __IGNORE_WARNING_I-10__
         except ImportError:
-            import _winapi as _subprocess  # __IGNORE_WARNING_I10__
+            import _winapi as _subprocess  # __IGNORE_WARNING_I-10__
         patchModule(_subprocess, "CreateProcess", createCreateProcess)
     else:
         patchModule(os, "fork", createFork)
         with contextlib.suppress(ImportError):
-            import _posixsubprocess  # __IGNORE_WARNING_I10__
+            import _posixsubprocess  # __IGNORE_WARNING_I-10__
 
             patchModule(_posixsubprocess, "fork_exec", createForkExec)
 
--- a/src/eric7/DebugClients/Python/MultiprocessingExtension.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/MultiprocessingExtension.py	Sat Mar 01 15:52:40 2025 +0100
@@ -24,7 +24,7 @@
     @type module
     @param debugClient reference to the debug client object
     @type DebugClient
-    """  # __IGNORE_WARNING_D234__
+    """  # __IGNORE_WARNING_D-234__
     global _debugClient, _originalProcess, _originalBootstrap
 
     _debugClient = debugClient
@@ -75,7 +75,7 @@
                         )
                     except Exception:
                         print(
-                            # __IGNORE_WARNING_M801__
+                            # __IGNORE_WARNING_M-801__
                             "Exception during multiprocessing bootstrap init:"
                         )
                         traceback.print_exc(file=sys.stdout)
--- a/src/eric7/DebugClients/Python/QProcessExtension.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/QProcessExtension.py	Sat Mar 01 15:52:40 2025 +0100
@@ -23,7 +23,7 @@
     @type module
     @param debugClient reference to the debug client object
     @type DebugClient
-    """  # __IGNORE_WARNING_D234__
+    """  # __IGNORE_WARNING_D-234__
     global _debugClient
 
     class QProcessWrapper(module.QProcess):
--- a/src/eric7/DebugClients/Python/eric7dbgstub.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/eric7dbgstub.py	Sat Mar 01 15:52:40 2025 +0100
@@ -36,7 +36,7 @@
     res = True
     try:
         if kind == "standard":
-            import DebugClient  # __IGNORE_WARNING_I10__
+            import DebugClient  # __IGNORE_WARNING_I-10__
 
             debugger = DebugClient.DebugClient()
         else:
--- a/src/eric7/DebugClients/Python/getpass.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/DebugClients/Python/getpass.py	Sat Mar 01 15:52:40 2025 +0100
@@ -47,7 +47,7 @@
     return "<unknown"
 
 
-def getpass(prompt="Password: ", stream=None):  # noqa: U100
+def getpass(prompt="Password: ", stream=None):  # noqa: U-100
     """
     Function to prompt for a password, with echo turned off.
 
--- a/src/eric7/Debugger/BreakPointModel.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Debugger/BreakPointModel.py	Sat Mar 01 15:52:40 2025 +0100
@@ -69,7 +69,7 @@
 
         self.breakpoints = []
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public method to get the current column count.
 
@@ -145,7 +145,7 @@
 
         return None
 
-    def setData(self, index, value, role=Qt.ItemDataRole.EditRole):  # noqa: U100
+    def setData(self, index, value, role=Qt.ItemDataRole.EditRole):  # noqa: U-100
         """
         Public method to change data in the model.
 
--- a/src/eric7/Debugger/DebugServer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Debugger/DebugServer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1626,7 +1626,7 @@
         )
 
     def remoteClientVariable(
-        self, debuggerId, scope, filterList, var, framenr=0, maxSize=0  # noqa: U100
+        self, debuggerId, scope, filterList, var, framenr=0, maxSize=0  # noqa: U-100
     ):
         """
         Public method to request the variables of the debugged program.
--- a/src/eric7/Debugger/DebuggerInterfaceNone.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Debugger/DebuggerInterfaceNone.py	Sat Mar 01 15:52:40 2025 +0100
@@ -627,4 +627,4 @@
 
 
 #
-# eflag: noqa = U100
+# eflag: noqa = U-100
--- a/src/eric7/Debugger/DebuggerInterfacePython.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Debugger/DebuggerInterfacePython.py	Sat Mar 01 15:52:40 2025 +0100
@@ -100,7 +100,7 @@
         # attribute to remember the name of the executed script
         self.__scriptName = ""
 
-    def __identityTranslation(self, fn, remote2local=True):  # noqa: U100
+    def __identityTranslation(self, fn, remote2local=True):  # noqa: U-100
         """
         Private method to perform the identity path translation.
 
@@ -1668,7 +1668,7 @@
             jsonStr = data.decode("utf-8", "backslashreplace")
 
             logging.getLogger(__name__).debug("<Debug-Server> %s", jsonStr)
-            ##print("Server: ", jsonStr)    ## debug       # __IGNORE_WARNING_M891__
+            ##print("Server: ", jsonStr)    ## debug       # __IGNORE_WARNING_M-891__
 
             if jsonStr:
                 self.handleJsonCommand(jsonStr, sock)
--- a/src/eric7/Debugger/VariablesViewer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Debugger/VariablesViewer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -495,7 +495,7 @@
             idxEnd = self.index(0, 2, QModelIndex())
             self.dataChanged.emit(idxStart, idxEnd)
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public method to get the column count.
 
--- a/src/eric7/Debugger/WatchPointModel.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Debugger/WatchPointModel.py	Sat Mar 01 15:52:40 2025 +0100
@@ -61,7 +61,7 @@
 
         self.watchpoints = []
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public method to get the current column count.
 
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Help/source.qhp	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Help/source.qhp	Sat Mar 01 15:52:40 2025 +0100
@@ -445,8 +445,14 @@
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.translations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.translations.html" />
                 </section>
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous" ref="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.html">
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html" />
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html" />
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousDefaults" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousDefaults.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html" />
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate.html" />
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.translations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.translations.html" />
                 </section>
@@ -464,6 +470,12 @@
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html" />
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.translations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.translations.html" />
                 </section>
+                <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic" ref="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.html">
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html" />
+                  <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations.html" />
+                </section>
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security" ref="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.html">
                   <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks" ref="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.html">
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.__init__" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.__init__.html" />
@@ -478,11 +490,11 @@
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalFilePermissions" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalFilePermissions.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedPassword" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedPassword.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp.html" />
+                    <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionWildcard" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionWildcard.html" />
-                    <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.jinja2Templates" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.jinja2Templates.html" />
                     <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.loggingConfigInsecureListen" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.loggingConfigInsecureListen.html" />
@@ -523,6 +535,7 @@
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCodeSelectionDialog" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCodeSelectionDialog.html" />
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html" />
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleStatisticsDialog" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleStatisticsDialog.html" />
+                <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html" />
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.ast_unparse" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.ast_unparse.html" />
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html" />
                 <section title="eric7.Plugins.CheckerPlugins.CodeStyleChecker.translations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.translations.html" />
@@ -1982,13 +1995,10 @@
       <keyword name="AnnotationsChecker.__checkDeprecatedTypingSymbols" id="AnnotationsChecker.__checkDeprecatedTypingSymbols" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__checkDeprecatedTypingSymbols" />
       <keyword name="AnnotationsChecker.__checkFunctionAnnotations" id="AnnotationsChecker.__checkFunctionAnnotations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__checkFunctionAnnotations" />
       <keyword name="AnnotationsChecker.__classifyError" id="AnnotationsChecker.__classifyError" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__classifyError" />
-      <keyword name="AnnotationsChecker.__error" id="AnnotationsChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__error" />
       <keyword name="AnnotationsChecker.__getAnnotationComplexity" id="AnnotationsChecker.__getAnnotationComplexity" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__getAnnotationComplexity" />
       <keyword name="AnnotationsChecker.__getAnnotationLength" id="AnnotationsChecker.__getAnnotationLength" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__getAnnotationLength" />
       <keyword name="AnnotationsChecker.__hasTypeAnnotations" id="AnnotationsChecker.__hasTypeAnnotations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__hasTypeAnnotations" />
-      <keyword name="AnnotationsChecker.__ignoreCode" id="AnnotationsChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__ignoreCode" />
       <keyword name="AnnotationsChecker.__returnErrorClassifier" id="AnnotationsChecker.__returnErrorClassifier" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.__returnErrorClassifier" />
-      <keyword name="AnnotationsChecker.run" id="AnnotationsChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html#AnnotationsChecker.run" />
       <keyword name="AnnotationsCheckerDefaults (Module)" id="AnnotationsCheckerDefaults (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsCheckerDefaults.html" />
       <keyword name="AnnotationsDeprecationsVisitor" id="AnnotationsDeprecationsVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsDeprecationsVisitor.html#AnnotationsDeprecationsVisitor" />
       <keyword name="AnnotationsDeprecationsVisitor (Constructor)" id="AnnotationsDeprecationsVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsDeprecationsVisitor.html#AnnotationsDeprecationsVisitor.__init__" />
@@ -2097,9 +2107,6 @@
       <keyword name="AsyncChecker (Constructor)" id="AsyncChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html#AsyncChecker.__init__" />
       <keyword name="AsyncChecker (Module)" id="AsyncChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html" />
       <keyword name="AsyncChecker.__checkSyncUses" id="AsyncChecker.__checkSyncUses" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html#AsyncChecker.__checkSyncUses" />
-      <keyword name="AsyncChecker.__error" id="AsyncChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html#AsyncChecker.__error" />
-      <keyword name="AsyncChecker.__ignoreCode" id="AsyncChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html#AsyncChecker.__ignoreCode" />
-      <keyword name="AsyncChecker.run" id="AsyncChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html#AsyncChecker.run" />
       <keyword name="AsyncFile" id="AsyncFile" ref="eric7.DebugClients.Python.AsyncFile.html#AsyncFile" />
       <keyword name="AsyncFile (Constructor)" id="AsyncFile (Constructor)" ref="eric7.DebugClients.Python.AsyncFile.html#AsyncFile.__init__" />
       <keyword name="AsyncFile (Module)" id="AsyncFile (Module)" ref="eric7.DebugClients.Python.AsyncFile.html" />
@@ -2853,85 +2860,90 @@
       <keyword name="BrowserSysPathItem" id="BrowserSysPathItem" ref="eric7.UI.BrowserModel.html#BrowserSysPathItem" />
       <keyword name="BrowserSysPathItem (Constructor)" id="BrowserSysPathItem (Constructor)" ref="eric7.UI.BrowserModel.html#BrowserSysPathItem.__init__" />
       <keyword name="BrowserSysPathItem.name" id="BrowserSysPathItem.name" ref="eric7.UI.BrowserModel.html#BrowserSysPathItem.name" />
-      <keyword name="BugBearVisitor" id="BugBearVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor" />
-      <keyword name="BugBearVisitor (Constructor)" id="BugBearVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__init__" />
-      <keyword name="BugBearVisitor.__checkForM505" id="BugBearVisitor.__checkForM505" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM505" />
-      <keyword name="BugBearVisitor.__checkForM506_M508" id="BugBearVisitor.__checkForM506_M508" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM506_M508" />
-      <keyword name="BugBearVisitor.__checkForM507" id="BugBearVisitor.__checkForM507" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM507" />
-      <keyword name="BugBearVisitor.__checkForM512" id="BugBearVisitor.__checkForM512" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM512" />
-      <keyword name="BugBearVisitor.__checkForM513_M529_M530" id="BugBearVisitor.__checkForM513_M529_M530" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM513_M529_M530" />
-      <keyword name="BugBearVisitor.__checkForM515" id="BugBearVisitor.__checkForM515" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM515" />
-      <keyword name="BugBearVisitor.__checkForM516" id="BugBearVisitor.__checkForM516" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM516" />
-      <keyword name="BugBearVisitor.__checkForM517" id="BugBearVisitor.__checkForM517" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM517" />
-      <keyword name="BugBearVisitor.__checkForM518" id="BugBearVisitor.__checkForM518" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM518" />
-      <keyword name="BugBearVisitor.__checkForM519" id="BugBearVisitor.__checkForM519" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM519" />
-      <keyword name="BugBearVisitor.__checkForM520" id="BugBearVisitor.__checkForM520" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM520" />
-      <keyword name="BugBearVisitor.__checkForM521" id="BugBearVisitor.__checkForM521" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM521" />
-      <keyword name="BugBearVisitor.__checkForM522" id="BugBearVisitor.__checkForM522" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM522" />
-      <keyword name="BugBearVisitor.__checkForM523" id="BugBearVisitor.__checkForM523" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM523" />
-      <keyword name="BugBearVisitor.__checkForM524_M527" id="BugBearVisitor.__checkForM524_M527" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM524_M527" />
-      <keyword name="BugBearVisitor.__checkForM525" id="BugBearVisitor.__checkForM525" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM525" />
-      <keyword name="BugBearVisitor.__checkForM526" id="BugBearVisitor.__checkForM526" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM526" />
-      <keyword name="BugBearVisitor.__checkForM528" id="BugBearVisitor.__checkForM528" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM528" />
-      <keyword name="BugBearVisitor.__checkForM531" id="BugBearVisitor.__checkForM531" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM531" />
-      <keyword name="BugBearVisitor.__checkForM532" id="BugBearVisitor.__checkForM532" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM532" />
-      <keyword name="BugBearVisitor.__checkForM533" id="BugBearVisitor.__checkForM533" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM533" />
-      <keyword name="BugBearVisitor.__checkForM534" id="BugBearVisitor.__checkForM534" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM534" />
-      <keyword name="BugBearVisitor.__checkForM535" id="BugBearVisitor.__checkForM535" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM535" />
-      <keyword name="BugBearVisitor.__checkForM539" id="BugBearVisitor.__checkForM539" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM539" />
-      <keyword name="BugBearVisitor.__checkForM540AddNote" id="BugBearVisitor.__checkForM540AddNote" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM540AddNote" />
-      <keyword name="BugBearVisitor.__checkForM540Usage" id="BugBearVisitor.__checkForM540Usage" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM540Usage" />
-      <keyword name="BugBearVisitor.__checkForM569" id="BugBearVisitor.__checkForM569" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM569" />
-      <keyword name="BugBearVisitor.__checkRedundantExcepthandlers" id="BugBearVisitor.__checkRedundantExcepthandlers" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkRedundantExcepthandlers" />
-      <keyword name="BugBearVisitor.__childrenInScope" id="BugBearVisitor.__childrenInScope" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__childrenInScope" />
-      <keyword name="BugBearVisitor.__flattenExcepthandler" id="BugBearVisitor.__flattenExcepthandler" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__flattenExcepthandler" />
-      <keyword name="BugBearVisitor.__getAssignedNames" id="BugBearVisitor.__getAssignedNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__getAssignedNames" />
-      <keyword name="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" id="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" />
-      <keyword name="BugBearVisitor.__getNamesFromTuple" id="BugBearVisitor.__getNamesFromTuple" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__getNamesFromTuple" />
-      <keyword name="BugBearVisitor.__inClassInit" id="BugBearVisitor.__inClassInit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__inClassInit" />
-      <keyword name="BugBearVisitor.__isIdentifier" id="BugBearVisitor.__isIdentifier" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__isIdentifier" />
-      <keyword name="BugBearVisitor.__namesFromAssignments" id="BugBearVisitor.__namesFromAssignments" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__namesFromAssignments" />
-      <keyword name="BugBearVisitor.__typesafeIssubclass" id="BugBearVisitor.__typesafeIssubclass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__typesafeIssubclass" />
-      <keyword name="BugBearVisitor.__walkList" id="BugBearVisitor.__walkList" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__walkList" />
-      <keyword name="BugBearVisitor._loop" id="BugBearVisitor._loop" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor._loop" />
-      <keyword name="BugBearVisitor.check" id="BugBearVisitor.check" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.check" />
-      <keyword name="BugBearVisitor.emptyBody" id="BugBearVisitor.emptyBody" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.emptyBody" />
-      <keyword name="BugBearVisitor.isAbcClass" id="BugBearVisitor.isAbcClass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.isAbcClass" />
-      <keyword name="BugBearVisitor.isAbstractDecorator" id="BugBearVisitor.isAbstractDecorator" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.isAbstractDecorator" />
-      <keyword name="BugBearVisitor.isOverload" id="BugBearVisitor.isOverload" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.isOverload" />
-      <keyword name="BugBearVisitor.isStrOrEllipsis" id="BugBearVisitor.isStrOrEllipsis" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.isStrOrEllipsis" />
-      <keyword name="BugBearVisitor.nodeStack" id="BugBearVisitor.nodeStack" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.nodeStack" />
-      <keyword name="BugBearVisitor.superwalk" id="BugBearVisitor.superwalk" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.superwalk" />
-      <keyword name="BugBearVisitor.toNameStr" id="BugBearVisitor.toNameStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.toNameStr" />
-      <keyword name="BugBearVisitor.visit" id="BugBearVisitor.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit" />
-      <keyword name="BugBearVisitor.visit_AnnAssign" id="BugBearVisitor.visit_AnnAssign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_AnnAssign" />
-      <keyword name="BugBearVisitor.visit_Assert" id="BugBearVisitor.visit_Assert" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Assert" />
-      <keyword name="BugBearVisitor.visit_Assign" id="BugBearVisitor.visit_Assign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Assign" />
-      <keyword name="BugBearVisitor.visit_AsyncFor" id="BugBearVisitor.visit_AsyncFor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_AsyncFor" />
-      <keyword name="BugBearVisitor.visit_AsyncFunctionDef" id="BugBearVisitor.visit_AsyncFunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_AsyncFunctionDef" />
-      <keyword name="BugBearVisitor.visit_Call" id="BugBearVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Call" />
-      <keyword name="BugBearVisitor.visit_ClassDef" id="BugBearVisitor.visit_ClassDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_ClassDef" />
-      <keyword name="BugBearVisitor.visit_Compare" id="BugBearVisitor.visit_Compare" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Compare" />
-      <keyword name="BugBearVisitor.visit_DictComp" id="BugBearVisitor.visit_DictComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_DictComp" />
-      <keyword name="BugBearVisitor.visit_ExceptHandler" id="BugBearVisitor.visit_ExceptHandler" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_ExceptHandler" />
-      <keyword name="BugBearVisitor.visit_For" id="BugBearVisitor.visit_For" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_For" />
-      <keyword name="BugBearVisitor.visit_FunctionDef" id="BugBearVisitor.visit_FunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_FunctionDef" />
-      <keyword name="BugBearVisitor.visit_GeneratorExp" id="BugBearVisitor.visit_GeneratorExp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_GeneratorExp" />
-      <keyword name="BugBearVisitor.visit_Import" id="BugBearVisitor.visit_Import" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Import" />
-      <keyword name="BugBearVisitor.visit_ImportFrom" id="BugBearVisitor.visit_ImportFrom" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_ImportFrom" />
-      <keyword name="BugBearVisitor.visit_JoinedStr" id="BugBearVisitor.visit_JoinedStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_JoinedStr" />
-      <keyword name="BugBearVisitor.visit_ListComp" id="BugBearVisitor.visit_ListComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_ListComp" />
-      <keyword name="BugBearVisitor.visit_Module" id="BugBearVisitor.visit_Module" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Module" />
-      <keyword name="BugBearVisitor.visit_Raise" id="BugBearVisitor.visit_Raise" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Raise" />
-      <keyword name="BugBearVisitor.visit_Return" id="BugBearVisitor.visit_Return" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Return" />
-      <keyword name="BugBearVisitor.visit_Set" id="BugBearVisitor.visit_Set" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Set" />
-      <keyword name="BugBearVisitor.visit_SetComp" id="BugBearVisitor.visit_SetComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_SetComp" />
-      <keyword name="BugBearVisitor.visit_Try" id="BugBearVisitor.visit_Try" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Try" />
-      <keyword name="BugBearVisitor.visit_UAdd" id="BugBearVisitor.visit_UAdd" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_UAdd" />
-      <keyword name="BugBearVisitor.visit_While" id="BugBearVisitor.visit_While" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_While" />
-      <keyword name="BugBearVisitor.visit_With" id="BugBearVisitor.visit_With" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_With" />
-      <keyword name="BugBearVisitor.visit_Yield" id="BugBearVisitor.visit_Yield" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Yield" />
-      <keyword name="BugBearVisitor.visit_YieldFrom" id="BugBearVisitor.visit_YieldFrom" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_YieldFrom" />
+      <keyword name="BugBearVisitor" id="BugBearVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor" />
+      <keyword name="BugBearVisitor (Constructor)" id="BugBearVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__init__" />
+      <keyword name="BugBearVisitor (Module)" id="BugBearVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html" />
+      <keyword name="BugBearVisitor.__checkForM505" id="BugBearVisitor.__checkForM505" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM505" />
+      <keyword name="BugBearVisitor.__checkForM506_M508" id="BugBearVisitor.__checkForM506_M508" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM506_M508" />
+      <keyword name="BugBearVisitor.__checkForM507" id="BugBearVisitor.__checkForM507" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM507" />
+      <keyword name="BugBearVisitor.__checkForM512" id="BugBearVisitor.__checkForM512" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM512" />
+      <keyword name="BugBearVisitor.__checkForM513_M514_M529_M530" id="BugBearVisitor.__checkForM513_M514_M529_M530" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM513_M514_M529_M530" />
+      <keyword name="BugBearVisitor.__checkForM515" id="BugBearVisitor.__checkForM515" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM515" />
+      <keyword name="BugBearVisitor.__checkForM516" id="BugBearVisitor.__checkForM516" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM516" />
+      <keyword name="BugBearVisitor.__checkForM517" id="BugBearVisitor.__checkForM517" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM517" />
+      <keyword name="BugBearVisitor.__checkForM518" id="BugBearVisitor.__checkForM518" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM518" />
+      <keyword name="BugBearVisitor.__checkForM519" id="BugBearVisitor.__checkForM519" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM519" />
+      <keyword name="BugBearVisitor.__checkForM520" id="BugBearVisitor.__checkForM520" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM520" />
+      <keyword name="BugBearVisitor.__checkForM521" id="BugBearVisitor.__checkForM521" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM521" />
+      <keyword name="BugBearVisitor.__checkForM522" id="BugBearVisitor.__checkForM522" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM522" />
+      <keyword name="BugBearVisitor.__checkForM523" id="BugBearVisitor.__checkForM523" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM523" />
+      <keyword name="BugBearVisitor.__checkForM524_M527" id="BugBearVisitor.__checkForM524_M527" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM524_M527" />
+      <keyword name="BugBearVisitor.__checkForM525" id="BugBearVisitor.__checkForM525" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM525" />
+      <keyword name="BugBearVisitor.__checkForM526" id="BugBearVisitor.__checkForM526" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM526" />
+      <keyword name="BugBearVisitor.__checkForM528" id="BugBearVisitor.__checkForM528" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM528" />
+      <keyword name="BugBearVisitor.__checkForM531" id="BugBearVisitor.__checkForM531" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM531" />
+      <keyword name="BugBearVisitor.__checkForM532" id="BugBearVisitor.__checkForM532" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM532" />
+      <keyword name="BugBearVisitor.__checkForM533" id="BugBearVisitor.__checkForM533" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM533" />
+      <keyword name="BugBearVisitor.__checkForM534" id="BugBearVisitor.__checkForM534" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM534" />
+      <keyword name="BugBearVisitor.__checkForM535" id="BugBearVisitor.__checkForM535" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM535" />
+      <keyword name="BugBearVisitor.__checkForM539" id="BugBearVisitor.__checkForM539" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM539" />
+      <keyword name="BugBearVisitor.__checkForM540AddNote" id="BugBearVisitor.__checkForM540AddNote" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM540AddNote" />
+      <keyword name="BugBearVisitor.__checkForM540Usage" id="BugBearVisitor.__checkForM540Usage" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM540Usage" />
+      <keyword name="BugBearVisitor.__checkForM541" id="BugBearVisitor.__checkForM541" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM541" />
+      <keyword name="BugBearVisitor.__checkForM569" id="BugBearVisitor.__checkForM569" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkForM569" />
+      <keyword name="BugBearVisitor.__checkRedundantExcepthandlers" id="BugBearVisitor.__checkRedundantExcepthandlers" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__checkRedundantExcepthandlers" />
+      <keyword name="BugBearVisitor.__childrenInScope" id="BugBearVisitor.__childrenInScope" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__childrenInScope" />
+      <keyword name="BugBearVisitor.__flattenExcepthandler" id="BugBearVisitor.__flattenExcepthandler" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__flattenExcepthandler" />
+      <keyword name="BugBearVisitor.__getAssignedNames" id="BugBearVisitor.__getAssignedNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__getAssignedNames" />
+      <keyword name="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" id="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" />
+      <keyword name="BugBearVisitor.__getNamesFromTuple" id="BugBearVisitor.__getNamesFromTuple" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__getNamesFromTuple" />
+      <keyword name="BugBearVisitor.__inClassInit" id="BugBearVisitor.__inClassInit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__inClassInit" />
+      <keyword name="BugBearVisitor.__isIdentifier" id="BugBearVisitor.__isIdentifier" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__isIdentifier" />
+      <keyword name="BugBearVisitor.__namesFromAssignments" id="BugBearVisitor.__namesFromAssignments" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__namesFromAssignments" />
+      <keyword name="BugBearVisitor.__typesafeIssubclass" id="BugBearVisitor.__typesafeIssubclass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__typesafeIssubclass" />
+      <keyword name="BugBearVisitor.__walkList" id="BugBearVisitor.__walkList" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.__walkList" />
+      <keyword name="BugBearVisitor._loop" id="BugBearVisitor._loop" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor._loop" />
+      <keyword name="BugBearVisitor.check" id="BugBearVisitor.check" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.check" />
+      <keyword name="BugBearVisitor.convertToValue" id="BugBearVisitor.convertToValue" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.convertToValue" />
+      <keyword name="BugBearVisitor.emptyBody" id="BugBearVisitor.emptyBody" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.emptyBody" />
+      <keyword name="BugBearVisitor.isAbcClass" id="BugBearVisitor.isAbcClass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.isAbcClass" />
+      <keyword name="BugBearVisitor.isAbstractDecorator" id="BugBearVisitor.isAbstractDecorator" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.isAbstractDecorator" />
+      <keyword name="BugBearVisitor.isOverload" id="BugBearVisitor.isOverload" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.isOverload" />
+      <keyword name="BugBearVisitor.isStrOrEllipsis" id="BugBearVisitor.isStrOrEllipsis" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.isStrOrEllipsis" />
+      <keyword name="BugBearVisitor.nodeStack" id="BugBearVisitor.nodeStack" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.nodeStack" />
+      <keyword name="BugBearVisitor.superwalk" id="BugBearVisitor.superwalk" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.superwalk" />
+      <keyword name="BugBearVisitor.toNameStr" id="BugBearVisitor.toNameStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.toNameStr" />
+      <keyword name="BugBearVisitor.visit" id="BugBearVisitor.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit" />
+      <keyword name="BugBearVisitor.visit_AnnAssign" id="BugBearVisitor.visit_AnnAssign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_AnnAssign" />
+      <keyword name="BugBearVisitor.visit_Assert" id="BugBearVisitor.visit_Assert" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Assert" />
+      <keyword name="BugBearVisitor.visit_Assign" id="BugBearVisitor.visit_Assign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Assign" />
+      <keyword name="BugBearVisitor.visit_AsyncFor" id="BugBearVisitor.visit_AsyncFor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_AsyncFor" />
+      <keyword name="BugBearVisitor.visit_AsyncFunctionDef" id="BugBearVisitor.visit_AsyncFunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_AsyncFunctionDef" />
+      <keyword name="BugBearVisitor.visit_Call" id="BugBearVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Call" />
+      <keyword name="BugBearVisitor.visit_ClassDef" id="BugBearVisitor.visit_ClassDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_ClassDef" />
+      <keyword name="BugBearVisitor.visit_Compare" id="BugBearVisitor.visit_Compare" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Compare" />
+      <keyword name="BugBearVisitor.visit_Dict" id="BugBearVisitor.visit_Dict" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Dict" />
+      <keyword name="BugBearVisitor.visit_DictComp" id="BugBearVisitor.visit_DictComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_DictComp" />
+      <keyword name="BugBearVisitor.visit_ExceptHandler" id="BugBearVisitor.visit_ExceptHandler" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_ExceptHandler" />
+      <keyword name="BugBearVisitor.visit_For" id="BugBearVisitor.visit_For" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_For" />
+      <keyword name="BugBearVisitor.visit_FunctionDef" id="BugBearVisitor.visit_FunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_FunctionDef" />
+      <keyword name="BugBearVisitor.visit_GeneratorExp" id="BugBearVisitor.visit_GeneratorExp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_GeneratorExp" />
+      <keyword name="BugBearVisitor.visit_Import" id="BugBearVisitor.visit_Import" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Import" />
+      <keyword name="BugBearVisitor.visit_ImportFrom" id="BugBearVisitor.visit_ImportFrom" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_ImportFrom" />
+      <keyword name="BugBearVisitor.visit_JoinedStr" id="BugBearVisitor.visit_JoinedStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_JoinedStr" />
+      <keyword name="BugBearVisitor.visit_ListComp" id="BugBearVisitor.visit_ListComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_ListComp" />
+      <keyword name="BugBearVisitor.visit_Module" id="BugBearVisitor.visit_Module" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Module" />
+      <keyword name="BugBearVisitor.visit_Raise" id="BugBearVisitor.visit_Raise" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Raise" />
+      <keyword name="BugBearVisitor.visit_Return" id="BugBearVisitor.visit_Return" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Return" />
+      <keyword name="BugBearVisitor.visit_Set" id="BugBearVisitor.visit_Set" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Set" />
+      <keyword name="BugBearVisitor.visit_SetComp" id="BugBearVisitor.visit_SetComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_SetComp" />
+      <keyword name="BugBearVisitor.visit_Try" id="BugBearVisitor.visit_Try" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Try" />
+      <keyword name="BugBearVisitor.visit_TryStar" id="BugBearVisitor.visit_TryStar" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_TryStar" />
+      <keyword name="BugBearVisitor.visit_UAdd" id="BugBearVisitor.visit_UAdd" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_UAdd" />
+      <keyword name="BugBearVisitor.visit_While" id="BugBearVisitor.visit_While" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_While" />
+      <keyword name="BugBearVisitor.visit_With" id="BugBearVisitor.visit_With" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_With" />
+      <keyword name="BugBearVisitor.visit_Yield" id="BugBearVisitor.visit_Yield" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_Yield" />
+      <keyword name="BugBearVisitor.visit_YieldFrom" id="BugBearVisitor.visit_YieldFrom" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#BugBearVisitor.visit_YieldFrom" />
       <keyword name="CallStackViewer" id="CallStackViewer" ref="eric7.Debugger.CallStackViewer.html#CallStackViewer" />
       <keyword name="CallStackViewer (Constructor)" id="CallStackViewer (Constructor)" ref="eric7.Debugger.CallStackViewer.html#CallStackViewer.__init__" />
       <keyword name="CallStackViewer (Module)" id="CallStackViewer (Module)" ref="eric7.Debugger.CallStackViewer.html" />
@@ -3249,8 +3261,8 @@
       <keyword name="CodeStyleCheckerDialog (Constructor)" id="CodeStyleCheckerDialog (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__init__" />
       <keyword name="CodeStyleCheckerDialog (Module)" id="CodeStyleCheckerDialog (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html" />
       <keyword name="CodeStyleCheckerDialog.__assembleExcludeMessages" id="CodeStyleCheckerDialog.__assembleExcludeMessages" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__assembleExcludeMessages" />
+      <keyword name="CodeStyleCheckerDialog.__assembleIncludeMessages" id="CodeStyleCheckerDialog.__assembleIncludeMessages" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__assembleIncludeMessages" />
       <keyword name="CodeStyleCheckerDialog.__batchFinished" id="CodeStyleCheckerDialog.__batchFinished" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__batchFinished" />
-      <keyword name="CodeStyleCheckerDialog.__cleanupData" id="CodeStyleCheckerDialog.__cleanupData" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__cleanupData" />
       <keyword name="CodeStyleCheckerDialog.__clearErrors" id="CodeStyleCheckerDialog.__clearErrors" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__clearErrors" />
       <keyword name="CodeStyleCheckerDialog.__createErrorItem" id="CodeStyleCheckerDialog.__createErrorItem" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__createErrorItem" />
       <keyword name="CodeStyleCheckerDialog.__createFileErrorItem" id="CodeStyleCheckerDialog.__createFileErrorItem" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__createFileErrorItem" />
@@ -3269,6 +3281,7 @@
       <keyword name="CodeStyleCheckerDialog.__initCommentedCodeCheckerWhiteList" id="CodeStyleCheckerDialog.__initCommentedCodeCheckerWhiteList" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__initCommentedCodeCheckerWhiteList" />
       <keyword name="CodeStyleCheckerDialog.__initFuturesList" id="CodeStyleCheckerDialog.__initFuturesList" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__initFuturesList" />
       <keyword name="CodeStyleCheckerDialog.__itemFixable" id="CodeStyleCheckerDialog.__itemFixable" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__itemFixable" />
+      <keyword name="CodeStyleCheckerDialog.__migrateIssueCodes" id="CodeStyleCheckerDialog.__migrateIssueCodes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__migrateIssueCodes" />
       <keyword name="CodeStyleCheckerDialog.__modifyFixedResultItem" id="CodeStyleCheckerDialog.__modifyFixedResultItem" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__modifyFixedResultItem" />
       <keyword name="CodeStyleCheckerDialog.__modifyOptions" id="CodeStyleCheckerDialog.__modifyOptions" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__modifyOptions" />
       <keyword name="CodeStyleCheckerDialog.__prepareProgress" id="CodeStyleCheckerDialog.__prepareProgress" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html#CodeStyleCheckerDialog.__prepareProgress" />
@@ -3398,6 +3411,14 @@
       <keyword name="CodeStyleStatisticsDialog (Constructor)" id="CodeStyleStatisticsDialog (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleStatisticsDialog.html#CodeStyleStatisticsDialog.__init__" />
       <keyword name="CodeStyleStatisticsDialog (Module)" id="CodeStyleStatisticsDialog (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleStatisticsDialog.html" />
       <keyword name="CodeStyleStatisticsDialog.__createItem" id="CodeStyleStatisticsDialog.__createItem" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleStatisticsDialog.html#CodeStyleStatisticsDialog.__createItem" />
+      <keyword name="CodeStyleTopicChecker" id="CodeStyleTopicChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html#CodeStyleTopicChecker" />
+      <keyword name="CodeStyleTopicChecker (Constructor)" id="CodeStyleTopicChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html#CodeStyleTopicChecker.__init__" />
+      <keyword name="CodeStyleTopicChecker (Module)" id="CodeStyleTopicChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html" />
+      <keyword name="CodeStyleTopicChecker._ignoreCode" id="CodeStyleTopicChecker._ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html#CodeStyleTopicChecker._ignoreCode" />
+      <keyword name="CodeStyleTopicChecker._initializeCheckers" id="CodeStyleTopicChecker._initializeCheckers" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html#CodeStyleTopicChecker._initializeCheckers" />
+      <keyword name="CodeStyleTopicChecker.addError" id="CodeStyleTopicChecker.addError" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html#CodeStyleTopicChecker.addError" />
+      <keyword name="CodeStyleTopicChecker.addErrorFromNode" id="CodeStyleTopicChecker.addErrorFromNode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html#CodeStyleTopicChecker.addErrorFromNode" />
+      <keyword name="CodeStyleTopicChecker.run" id="CodeStyleTopicChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html#CodeStyleTopicChecker.run" />
       <keyword name="Coding" id="Coding" ref="eric7.Utilities.ClassBrowsers.ClbrBaseClasses.html#Coding" />
       <keyword name="Coding (Constructor)" id="Coding (Constructor)" ref="eric7.Utilities.ClassBrowsers.ClbrBaseClasses.html#Coding.__init__" />
       <keyword name="CodingError" id="CodingError" ref="eric7.Utilities.__init__.html#CodingError" />
@@ -3505,9 +3526,6 @@
       <keyword name="ComplexityChecker (Module)" id="ComplexityChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html" />
       <keyword name="ComplexityChecker.__checkLineComplexity" id="ComplexityChecker.__checkLineComplexity" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html#ComplexityChecker.__checkLineComplexity" />
       <keyword name="ComplexityChecker.__checkMcCabeComplexity" id="ComplexityChecker.__checkMcCabeComplexity" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html#ComplexityChecker.__checkMcCabeComplexity" />
-      <keyword name="ComplexityChecker.__error" id="ComplexityChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html#ComplexityChecker.__error" />
-      <keyword name="ComplexityChecker.__ignoreCode" id="ComplexityChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html#ComplexityChecker.__ignoreCode" />
-      <keyword name="ComplexityChecker.run" id="ComplexityChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html#ComplexityChecker.run" />
       <keyword name="Conda" id="Conda" ref="eric7.CondaInterface.Conda.html#Conda" />
       <keyword name="Conda (Constructor)" id="Conda (Constructor)" ref="eric7.CondaInterface.Conda.html#Conda.__init__" />
       <keyword name="Conda (Module)" id="Conda (Module)" ref="eric7.CondaInterface.Conda.html" />
@@ -3869,10 +3887,11 @@
       <keyword name="CycloneDXMetaDataDialog.getMetaData" id="CycloneDXMetaDataDialog.getMetaData" ref="eric7.CycloneDXInterface.CycloneDXMetaDataDialog.html#CycloneDXMetaDataDialog.getMetaData" />
       <keyword name="CycloneDXUtilities (Module)" id="CycloneDXUtilities (Module)" ref="eric7.CycloneDXInterface.CycloneDXUtilities.html" />
       <keyword name="DataViews (Package)" id="DataViews (Package)" ref="index-eric7.DataViews.html" />
-      <keyword name="DateTimeVisitor" id="DateTimeVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#DateTimeVisitor" />
-      <keyword name="DateTimeVisitor (Constructor)" id="DateTimeVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#DateTimeVisitor.__init__" />
-      <keyword name="DateTimeVisitor.__getFromKeywords" id="DateTimeVisitor.__getFromKeywords" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#DateTimeVisitor.__getFromKeywords" />
-      <keyword name="DateTimeVisitor.visit_Call" id="DateTimeVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#DateTimeVisitor.visit_Call" />
+      <keyword name="DateTimeVisitor" id="DateTimeVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html#DateTimeVisitor" />
+      <keyword name="DateTimeVisitor (Constructor)" id="DateTimeVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html#DateTimeVisitor.__init__" />
+      <keyword name="DateTimeVisitor (Module)" id="DateTimeVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html" />
+      <keyword name="DateTimeVisitor.__getFromKeywords" id="DateTimeVisitor.__getFromKeywords" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html#DateTimeVisitor.__getFromKeywords" />
+      <keyword name="DateTimeVisitor.visit_Call" id="DateTimeVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html#DateTimeVisitor.visit_Call" />
       <keyword name="DebugBase" id="DebugBase" ref="eric7.DebugClients.Python.DebugBase.html#DebugBase" />
       <keyword name="DebugBase (Constructor)" id="DebugBase (Constructor)" ref="eric7.DebugClients.Python.DebugBase.html#DebugBase.__init__" />
       <keyword name="DebugBase (Module)" id="DebugBase (Module)" ref="eric7.DebugClients.Python.DebugBase.html" />
@@ -4358,6 +4377,15 @@
       <keyword name="DeepLEngine.engineName" id="DeepLEngine.engineName" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.engineName" />
       <keyword name="DeepLEngine.getTranslation" id="DeepLEngine.getTranslation" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.getTranslation" />
       <keyword name="DeepLEngine.supportedLanguages" id="DeepLEngine.supportedLanguages" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.DeepLEngine.html#DeepLEngine.supportedLanguages" />
+      <keyword name="DefaultMatchCaseVisitor" id="DefaultMatchCaseVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor" />
+      <keyword name="DefaultMatchCaseVisitor (Constructor)" id="DefaultMatchCaseVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor.__init__" />
+      <keyword name="DefaultMatchCaseVisitor (Module)" id="DefaultMatchCaseVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html" />
+      <keyword name="DefaultMatchCaseVisitor.__badNodes" id="DefaultMatchCaseVisitor.__badNodes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor.__badNodes" />
+      <keyword name="DefaultMatchCaseVisitor.__emptyMatchDefault" id="DefaultMatchCaseVisitor.__emptyMatchDefault" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor.__emptyMatchDefault" />
+      <keyword name="DefaultMatchCaseVisitor.__findBadNode" id="DefaultMatchCaseVisitor.__findBadNode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor.__findBadNode" />
+      <keyword name="DefaultMatchCaseVisitor.__lastStatementDoesNotRaise" id="DefaultMatchCaseVisitor.__lastStatementDoesNotRaise" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor.__lastStatementDoesNotRaise" />
+      <keyword name="DefaultMatchCaseVisitor.__returnPrecedesExceptionRaising" id="DefaultMatchCaseVisitor.__returnPrecedesExceptionRaising" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor.__returnPrecedesExceptionRaising" />
+      <keyword name="DefaultMatchCaseVisitor.visit_Match" id="DefaultMatchCaseVisitor.visit_Match" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html#DefaultMatchCaseVisitor.visit_Match" />
       <keyword name="DefaultResolver" id="DefaultResolver" ref="eric7.DebugClients.Python.DebugVariables.html#DefaultResolver" />
       <keyword name="DefaultResolver.getVariableList" id="DefaultResolver.getVariableList" ref="eric7.DebugClients.Python.DebugVariables.html#DefaultResolver.getVariableList" />
       <keyword name="DefaultSearchEngines (Package)" id="DefaultSearchEngines (Package)" ref="index-eric7.WebBrowser.OpenSearch.DefaultSearchEngines.html" />
@@ -4461,11 +4489,9 @@
       <keyword name="DocStyleChecker.__checkReturnType" id="DocStyleChecker.__checkReturnType" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__checkReturnType" />
       <keyword name="DocStyleChecker.__checkSummary" id="DocStyleChecker.__checkSummary" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__checkSummary" />
       <keyword name="DocStyleChecker.__checkTripleDoubleQuotes" id="DocStyleChecker.__checkTripleDoubleQuotes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__checkTripleDoubleQuotes" />
-      <keyword name="DocStyleChecker.__error" id="DocStyleChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__error" />
       <keyword name="DocStyleChecker.__getArgNames" id="DocStyleChecker.__getArgNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__getArgNames" />
       <keyword name="DocStyleChecker.__getSummaryLine" id="DocStyleChecker.__getSummaryLine" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__getSummaryLine" />
       <keyword name="DocStyleChecker.__getSummaryLines" id="DocStyleChecker.__getSummaryLines" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__getSummaryLines" />
-      <keyword name="DocStyleChecker.__ignoreCode" id="DocStyleChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__ignoreCode" />
       <keyword name="DocStyleChecker.__parseClasses" id="DocStyleChecker.__parseClasses" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__parseClasses" />
       <keyword name="DocStyleChecker.__parseContexts" id="DocStyleChecker.__parseContexts" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__parseContexts" />
       <keyword name="DocStyleChecker.__parseDocstring" id="DocStyleChecker.__parseDocstring" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__parseDocstring" />
@@ -4476,6 +4502,7 @@
       <keyword name="DocStyleChecker.__readline" id="DocStyleChecker.__readline" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__readline" />
       <keyword name="DocStyleChecker.__resetReadline" id="DocStyleChecker.__resetReadline" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__resetReadline" />
       <keyword name="DocStyleChecker.__skipIndentedBlock" id="DocStyleChecker.__skipIndentedBlock" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.__skipIndentedBlock" />
+      <keyword name="DocStyleChecker.addError" id="DocStyleChecker.addError" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.addError" />
       <keyword name="DocStyleChecker.run" id="DocStyleChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleChecker.run" />
       <keyword name="DocStyleContext" id="DocStyleContext" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleContext" />
       <keyword name="DocStyleContext (Constructor)" id="DocStyleContext (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html#DocStyleContext.__init__" />
@@ -6921,11 +6948,11 @@
       <keyword name="EthernetStatusDialog" id="EthernetStatusDialog" ref="eric7.MicroPython.EthernetDialogs.EthernetStatusDialog.html#EthernetStatusDialog" />
       <keyword name="EthernetStatusDialog (Constructor)" id="EthernetStatusDialog (Constructor)" ref="eric7.MicroPython.EthernetDialogs.EthernetStatusDialog.html#EthernetStatusDialog.__init__" />
       <keyword name="EthernetStatusDialog (Module)" id="EthernetStatusDialog (Module)" ref="eric7.MicroPython.EthernetDialogs.EthernetStatusDialog.html" />
-      <keyword name="ExceptBaseExceptionVisitor" id="ExceptBaseExceptionVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ExceptBaseExceptionVisitor" />
-      <keyword name="ExceptBaseExceptionVisitor (Constructor)" id="ExceptBaseExceptionVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ExceptBaseExceptionVisitor.__init__" />
-      <keyword name="ExceptBaseExceptionVisitor.reRaised" id="ExceptBaseExceptionVisitor.reRaised" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ExceptBaseExceptionVisitor.reRaised" />
-      <keyword name="ExceptBaseExceptionVisitor.visit_ExceptHandler" id="ExceptBaseExceptionVisitor.visit_ExceptHandler" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ExceptBaseExceptionVisitor.visit_ExceptHandler" />
-      <keyword name="ExceptBaseExceptionVisitor.visit_Raise" id="ExceptBaseExceptionVisitor.visit_Raise" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ExceptBaseExceptionVisitor.visit_Raise" />
+      <keyword name="ExceptBaseExceptionVisitor" id="ExceptBaseExceptionVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#ExceptBaseExceptionVisitor" />
+      <keyword name="ExceptBaseExceptionVisitor (Constructor)" id="ExceptBaseExceptionVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#ExceptBaseExceptionVisitor.__init__" />
+      <keyword name="ExceptBaseExceptionVisitor.reRaised" id="ExceptBaseExceptionVisitor.reRaised" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#ExceptBaseExceptionVisitor.reRaised" />
+      <keyword name="ExceptBaseExceptionVisitor.visit_ExceptHandler" id="ExceptBaseExceptionVisitor.visit_ExceptHandler" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#ExceptBaseExceptionVisitor.visit_ExceptHandler" />
+      <keyword name="ExceptBaseExceptionVisitor.visit_Raise" id="ExceptBaseExceptionVisitor.visit_Raise" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#ExceptBaseExceptionVisitor.visit_Raise" />
       <keyword name="ExceptionLogger" id="ExceptionLogger" ref="eric7.Debugger.ExceptionLogger.html#ExceptionLogger" />
       <keyword name="ExceptionLogger (Constructor)" id="ExceptionLogger (Constructor)" ref="eric7.Debugger.ExceptionLogger.html#ExceptionLogger.__init__" />
       <keyword name="ExceptionLogger (Module)" id="ExceptionLogger (Module)" ref="eric7.Debugger.ExceptionLogger.html" />
@@ -7371,12 +7398,12 @@
       <keyword name="Function.isDynamicallyTyped" id="Function.isDynamicallyTyped" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsFunctionVisitor.html#Function.isDynamicallyTyped" />
       <keyword name="Function.isFullyAnnotated" id="Function.isFullyAnnotated" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsFunctionVisitor.html#Function.isFullyAnnotated" />
       <keyword name="Function.setEndLine" id="Function.setEndLine" ref="eric7.Utilities.ModuleParser.html#Function.setEndLine" />
-      <keyword name="FunctionDefDefaultsVisitor" id="FunctionDefDefaultsVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#FunctionDefDefaultsVisitor" />
-      <keyword name="FunctionDefDefaultsVisitor (Constructor)" id="FunctionDefDefaultsVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#FunctionDefDefaultsVisitor.__init__" />
-      <keyword name="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" id="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" />
-      <keyword name="FunctionDefDefaultsVisitor.visit" id="FunctionDefDefaultsVisitor.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#FunctionDefDefaultsVisitor.visit" />
-      <keyword name="FunctionDefDefaultsVisitor.visit_Call" id="FunctionDefDefaultsVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#FunctionDefDefaultsVisitor.visit_Call" />
-      <keyword name="FunctionDefDefaultsVisitor.visit_Lambda" id="FunctionDefDefaultsVisitor.visit_Lambda" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#FunctionDefDefaultsVisitor.visit_Lambda" />
+      <keyword name="FunctionDefDefaultsVisitor" id="FunctionDefDefaultsVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#FunctionDefDefaultsVisitor" />
+      <keyword name="FunctionDefDefaultsVisitor (Constructor)" id="FunctionDefDefaultsVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#FunctionDefDefaultsVisitor.__init__" />
+      <keyword name="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" id="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" />
+      <keyword name="FunctionDefDefaultsVisitor.visit" id="FunctionDefDefaultsVisitor.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#FunctionDefDefaultsVisitor.visit" />
+      <keyword name="FunctionDefDefaultsVisitor.visit_Call" id="FunctionDefDefaultsVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#FunctionDefDefaultsVisitor.visit_Call" />
+      <keyword name="FunctionDefDefaultsVisitor.visit_Lambda" id="FunctionDefDefaultsVisitor.visit_Lambda" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#FunctionDefDefaultsVisitor.visit_Lambda" />
       <keyword name="FunctionFinder" id="FunctionFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#FunctionFinder" />
       <keyword name="FunctionFinder (Constructor)" id="FunctionFinder (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#FunctionFinder.__init__" />
       <keyword name="FunctionFinder.__visitFunctionTypes" id="FunctionFinder.__visitFunctionTypes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#FunctionFinder.__visitFunctionTypes" />
@@ -10350,11 +10377,8 @@
       <keyword name="ImportsChecker.__checkLocalImports" id="ImportsChecker.__checkLocalImports" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.__checkLocalImports" />
       <keyword name="ImportsChecker.__checkUnnecessaryAlias" id="ImportsChecker.__checkUnnecessaryAlias" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.__checkUnnecessaryAlias" />
       <keyword name="ImportsChecker.__compileUnstructuredGlob" id="ImportsChecker.__compileUnstructuredGlob" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.__compileUnstructuredGlob" />
-      <keyword name="ImportsChecker.__error" id="ImportsChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.__error" />
-      <keyword name="ImportsChecker.__ignoreCode" id="ImportsChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.__ignoreCode" />
       <keyword name="ImportsChecker.__isModuleBanned" id="ImportsChecker.__isModuleBanned" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.__isModuleBanned" />
       <keyword name="ImportsChecker.__tidyImports" id="ImportsChecker.__tidyImports" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.__tidyImports" />
-      <keyword name="ImportsChecker.run" id="ImportsChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html#ImportsChecker.run" />
       <keyword name="ImportsDiagramBuilder" id="ImportsDiagramBuilder" ref="eric7.Graphics.ImportsDiagramBuilder.html#ImportsDiagramBuilder" />
       <keyword name="ImportsDiagramBuilder (Constructor)" id="ImportsDiagramBuilder (Constructor)" ref="eric7.Graphics.ImportsDiagramBuilder.html#ImportsDiagramBuilder.__init__" />
       <keyword name="ImportsDiagramBuilder (Module)" id="ImportsDiagramBuilder (Module)" ref="eric7.Graphics.ImportsDiagramBuilder.html" />
@@ -11362,9 +11386,6 @@
       <keyword name="LoggingChecker (Constructor)" id="LoggingChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html#LoggingChecker.__init__" />
       <keyword name="LoggingChecker (Module)" id="LoggingChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html" />
       <keyword name="LoggingChecker.__checkLogging" id="LoggingChecker.__checkLogging" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html#LoggingChecker.__checkLogging" />
-      <keyword name="LoggingChecker.__error" id="LoggingChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html#LoggingChecker.__error" />
-      <keyword name="LoggingChecker.__ignoreCode" id="LoggingChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html#LoggingChecker.__ignoreCode" />
-      <keyword name="LoggingChecker.run" id="LoggingChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html#LoggingChecker.run" />
       <keyword name="LoggingVisitor" id="LoggingVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor" />
       <keyword name="LoggingVisitor (Constructor)" id="LoggingVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.__init__" />
       <keyword name="LoggingVisitor (Module)" id="LoggingVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html" />
@@ -11373,7 +11394,6 @@
       <keyword name="LoggingVisitor.__currentExceptHandler" id="LoggingVisitor.__currentExceptHandler" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.__currentExceptHandler" />
       <keyword name="LoggingVisitor.__flattenStrChain" id="LoggingVisitor.__flattenStrChain" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.__flattenStrChain" />
       <keyword name="LoggingVisitor.__isAddChainWithNonStr" id="LoggingVisitor.__isAddChainWithNonStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.__isAddChainWithNonStr" />
-      <keyword name="LoggingVisitor.__keywordPos" id="LoggingVisitor.__keywordPos" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.__keywordPos" />
       <keyword name="LoggingVisitor.visit" id="LoggingVisitor.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.visit" />
       <keyword name="LoggingVisitor.visit_Attribute" id="LoggingVisitor.visit_Attribute" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.visit_Attribute" />
       <keyword name="LoggingVisitor.visit_Call" id="LoggingVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html#LoggingVisitor.visit_Call" />
@@ -11383,18 +11403,21 @@
       <keyword name="LoginForm (Constructor)" id="LoginForm (Constructor)" ref="eric7.WebBrowser.Passwords.LoginForm.html#LoginForm.__init__" />
       <keyword name="LoginForm (Module)" id="LoginForm (Module)" ref="eric7.WebBrowser.Passwords.LoginForm.html" />
       <keyword name="LoginForm.isValid" id="LoginForm.isValid" ref="eric7.WebBrowser.Passwords.LoginForm.html#LoginForm.isValid" />
-      <keyword name="M520NameFinder" id="M520NameFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M520NameFinder" />
-      <keyword name="M520NameFinder.visit_DictComp" id="M520NameFinder.visit_DictComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M520NameFinder.visit_DictComp" />
-      <keyword name="M520NameFinder.visit_GeneratorExp" id="M520NameFinder.visit_GeneratorExp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M520NameFinder.visit_GeneratorExp" />
-      <keyword name="M520NameFinder.visit_Lambda" id="M520NameFinder.visit_Lambda" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M520NameFinder.visit_Lambda" />
-      <keyword name="M520NameFinder.visit_ListComp" id="M520NameFinder.visit_ListComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M520NameFinder.visit_ListComp" />
-      <keyword name="M520NameFinder.visit_comprehension" id="M520NameFinder.visit_comprehension" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M520NameFinder.visit_comprehension" />
-      <keyword name="M540CaughtException" id="M540CaughtException" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M540CaughtException" />
-      <keyword name="M569Checker" id="M569Checker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M569Checker" />
-      <keyword name="M569Checker (Constructor)" id="M569Checker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M569Checker.__init__" />
-      <keyword name="M569Checker.visit" id="M569Checker.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M569Checker.visit" />
-      <keyword name="M569Checker.visit_Call" id="M569Checker.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M569Checker.visit_Call" />
-      <keyword name="M569Checker.visit_Delete" id="M569Checker.visit_Delete" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#M569Checker.visit_Delete" />
+      <keyword name="M520NameFinder" id="M520NameFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M520NameFinder" />
+      <keyword name="M520NameFinder.visit_DictComp" id="M520NameFinder.visit_DictComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M520NameFinder.visit_DictComp" />
+      <keyword name="M520NameFinder.visit_GeneratorExp" id="M520NameFinder.visit_GeneratorExp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M520NameFinder.visit_GeneratorExp" />
+      <keyword name="M520NameFinder.visit_Lambda" id="M520NameFinder.visit_Lambda" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M520NameFinder.visit_Lambda" />
+      <keyword name="M520NameFinder.visit_ListComp" id="M520NameFinder.visit_ListComp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M520NameFinder.visit_ListComp" />
+      <keyword name="M520NameFinder.visit_comprehension" id="M520NameFinder.visit_comprehension" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M520NameFinder.visit_comprehension" />
+      <keyword name="M540CaughtException" id="M540CaughtException" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M540CaughtException" />
+      <keyword name="M541UnhandledKeyType" id="M541UnhandledKeyType" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M541UnhandledKeyType" />
+      <keyword name="M541VariableKeyType" id="M541VariableKeyType" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M541VariableKeyType" />
+      <keyword name="M541VariableKeyType (Constructor)" id="M541VariableKeyType (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M541VariableKeyType.__init__" />
+      <keyword name="M569Checker" id="M569Checker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M569Checker" />
+      <keyword name="M569Checker (Constructor)" id="M569Checker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M569Checker.__init__" />
+      <keyword name="M569Checker.visit" id="M569Checker.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M569Checker.visit" />
+      <keyword name="M569Checker.visit_Call" id="M569Checker.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M569Checker.visit_Call" />
+      <keyword name="M569Checker.visit_Delete" id="M569Checker.visit_Delete" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#M569Checker.visit_Delete" />
       <keyword name="MainPasswordEntryDialog" id="MainPasswordEntryDialog" ref="eric7.Preferences.ConfigurationPages.MainPasswordEntryDialog.html#MainPasswordEntryDialog" />
       <keyword name="MainPasswordEntryDialog (Constructor)" id="MainPasswordEntryDialog (Constructor)" ref="eric7.Preferences.ConfigurationPages.MainPasswordEntryDialog.html#MainPasswordEntryDialog.__init__" />
       <keyword name="MainPasswordEntryDialog (Module)" id="MainPasswordEntryDialog (Module)" ref="eric7.Preferences.ConfigurationPages.MainPasswordEntryDialog.html" />
@@ -12012,6 +12035,7 @@
       <keyword name="MiscellaneousChecker.__checkComprehensions" id="MiscellaneousChecker.__checkComprehensions" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkComprehensions" />
       <keyword name="MiscellaneousChecker.__checkCopyright" id="MiscellaneousChecker.__checkCopyright" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkCopyright" />
       <keyword name="MiscellaneousChecker.__checkDateTime" id="MiscellaneousChecker.__checkDateTime" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkDateTime" />
+      <keyword name="MiscellaneousChecker.__checkDefaultMatchCase" id="MiscellaneousChecker.__checkDefaultMatchCase" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkDefaultMatchCase" />
       <keyword name="MiscellaneousChecker.__checkDictWithSortedKeys" id="MiscellaneousChecker.__checkDictWithSortedKeys" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkDictWithSortedKeys" />
       <keyword name="MiscellaneousChecker.__checkExplicitStringConcat" id="MiscellaneousChecker.__checkExplicitStringConcat" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkExplicitStringConcat" />
       <keyword name="MiscellaneousChecker.__checkFormatString" id="MiscellaneousChecker.__checkFormatString" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkFormatString" />
@@ -12026,12 +12050,9 @@
       <keyword name="MiscellaneousChecker.__checkSysVersion" id="MiscellaneousChecker.__checkSysVersion" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkSysVersion" />
       <keyword name="MiscellaneousChecker.__checkTuple" id="MiscellaneousChecker.__checkTuple" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__checkTuple" />
       <keyword name="MiscellaneousChecker.__dictShouldBeChecked" id="MiscellaneousChecker.__dictShouldBeChecked" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__dictShouldBeChecked" />
-      <keyword name="MiscellaneousChecker.__error" id="MiscellaneousChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__error" />
       <keyword name="MiscellaneousChecker.__getCoding" id="MiscellaneousChecker.__getCoding" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__getCoding" />
       <keyword name="MiscellaneousChecker.__getFields" id="MiscellaneousChecker.__getFields" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__getFields" />
-      <keyword name="MiscellaneousChecker.__ignoreCode" id="MiscellaneousChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__ignoreCode" />
       <keyword name="MiscellaneousChecker.__isImplicitStringConcat" id="MiscellaneousChecker.__isImplicitStringConcat" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.__isImplicitStringConcat" />
-      <keyword name="MiscellaneousChecker.run" id="MiscellaneousChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#MiscellaneousChecker.run" />
       <keyword name="MiscellaneousDefaults (Module)" id="MiscellaneousDefaults (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousDefaults.html" />
       <keyword name="Module" id="Module" ref="eric7.Utilities.ClassBrowsers.ClbrBaseClasses.html#Module" />
       <keyword name="Module" id="Module" ref="eric7.Utilities.ClassBrowsers.rbclbr.html#Module" />
@@ -12216,12 +12237,12 @@
       <keyword name="MyMemoryEngine.engineName" id="MyMemoryEngine.engineName" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.engineName" />
       <keyword name="MyMemoryEngine.getTranslation" id="MyMemoryEngine.getTranslation" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.getTranslation" />
       <keyword name="MyMemoryEngine.supportedLanguages" id="MyMemoryEngine.supportedLanguages" ref="eric7.Plugins.UiExtensionPlugins.Translator.TranslatorEngines.MyMemoryEngine.html#MyMemoryEngine.supportedLanguages" />
-      <keyword name="NameFinder" id="NameFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NameFinder" />
+      <keyword name="NameFinder" id="NameFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NameFinder" />
       <keyword name="NameFinder" id="NameFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#NameFinder" />
-      <keyword name="NameFinder (Constructor)" id="NameFinder (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NameFinder.__init__" />
-      <keyword name="NameFinder.getNames" id="NameFinder.getNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NameFinder.getNames" />
-      <keyword name="NameFinder.visit" id="NameFinder.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NameFinder.visit" />
-      <keyword name="NameFinder.visit_Name" id="NameFinder.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NameFinder.visit_Name" />
+      <keyword name="NameFinder (Constructor)" id="NameFinder (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NameFinder.__init__" />
+      <keyword name="NameFinder.getNames" id="NameFinder.getNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NameFinder.getNames" />
+      <keyword name="NameFinder.visit" id="NameFinder.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NameFinder.visit" />
+      <keyword name="NameFinder.visit_Name" id="NameFinder.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NameFinder.visit_Name" />
       <keyword name="NameFinder.visit_Name" id="NameFinder.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#NameFinder.visit_Name" />
       <keyword name="NameOrder (Package)" id="NameOrder (Package)" ref="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.html" />
       <keyword name="NameOrderChecker" id="NameOrderChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker" />
@@ -12229,29 +12250,26 @@
       <keyword name="NameOrderChecker (Module)" id="NameOrderChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html" />
       <keyword name="NameOrderChecker.__atoi" id="NameOrderChecker.__atoi" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__atoi" />
       <keyword name="NameOrderChecker.__checkNameOrder" id="NameOrderChecker.__checkNameOrder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__checkNameOrder" />
-      <keyword name="NameOrderChecker.__error" id="NameOrderChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__error" />
       <keyword name="NameOrderChecker.__findErrorInAll" id="NameOrderChecker.__findErrorInAll" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__findErrorInAll" />
       <keyword name="NameOrderChecker.__findExceptionListErrors" id="NameOrderChecker.__findExceptionListErrors" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__findExceptionListErrors" />
       <keyword name="NameOrderChecker.__findExceptionListNodes" id="NameOrderChecker.__findExceptionListNodes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__findExceptionListNodes" />
       <keyword name="NameOrderChecker.__findExceptionListStr" id="NameOrderChecker.__findExceptionListStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__findExceptionListStr" />
       <keyword name="NameOrderChecker.__findNodes" id="NameOrderChecker.__findNodes" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__findNodes" />
-      <keyword name="NameOrderChecker.__ignoreCode" id="NameOrderChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__ignoreCode" />
       <keyword name="NameOrderChecker.__naturalKeys" id="NameOrderChecker.__naturalKeys" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__naturalKeys" />
       <keyword name="NameOrderChecker.__naturally" id="NameOrderChecker.__naturally" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.__naturally" />
       <keyword name="NameOrderChecker.keyCallback" id="NameOrderChecker.keyCallback" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.keyCallback" />
       <keyword name="NameOrderChecker.moduleKey" id="NameOrderChecker.moduleKey" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.moduleKey" />
-      <keyword name="NameOrderChecker.run" id="NameOrderChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.run" />
       <keyword name="NameOrderChecker.sorted" id="NameOrderChecker.sorted" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html#NameOrderChecker.sorted" />
       <keyword name="NameResolver" id="NameResolver" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#NameResolver" />
       <keyword name="NameResolver (Constructor)" id="NameResolver (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#NameResolver.__init__" />
       <keyword name="NameResolver.name" id="NameResolver.name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#NameResolver.name" />
       <keyword name="NameResolver.visit_Attribute" id="NameResolver.visit_Attribute" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#NameResolver.visit_Attribute" />
       <keyword name="NameResolver.visit_Name" id="NameResolver.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#NameResolver.visit_Name" />
-      <keyword name="NamedExprFinder" id="NamedExprFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NamedExprFinder" />
-      <keyword name="NamedExprFinder (Constructor)" id="NamedExprFinder (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NamedExprFinder.__init__" />
-      <keyword name="NamedExprFinder.getNames" id="NamedExprFinder.getNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NamedExprFinder.getNames" />
-      <keyword name="NamedExprFinder.visit" id="NamedExprFinder.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NamedExprFinder.visit" />
-      <keyword name="NamedExprFinder.visit_NamedExpr" id="NamedExprFinder.visit_NamedExpr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#NamedExprFinder.visit_NamedExpr" />
+      <keyword name="NamedExprFinder" id="NamedExprFinder" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NamedExprFinder" />
+      <keyword name="NamedExprFinder (Constructor)" id="NamedExprFinder (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NamedExprFinder.__init__" />
+      <keyword name="NamedExprFinder.getNames" id="NamedExprFinder.getNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NamedExprFinder.getNames" />
+      <keyword name="NamedExprFinder.visit" id="NamedExprFinder.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NamedExprFinder.visit" />
+      <keyword name="NamedExprFinder.visit_NamedExpr" id="NamedExprFinder.visit_NamedExpr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#NamedExprFinder.visit_NamedExpr" />
       <keyword name="Naming (Package)" id="Naming (Package)" ref="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.html" />
       <keyword name="NamingStyleChecker" id="NamingStyleChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker" />
       <keyword name="NamingStyleChecker (Constructor)" id="NamingStyleChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__init__" />
@@ -12264,7 +12282,6 @@
       <keyword name="NamingStyleChecker.__checkNameToBeAvoided" id="NamingStyleChecker.__checkNameToBeAvoided" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__checkNameToBeAvoided" />
       <keyword name="NamingStyleChecker.__checkVariableNames" id="NamingStyleChecker.__checkVariableNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__checkVariableNames" />
       <keyword name="NamingStyleChecker.__classVariableCheck" id="NamingStyleChecker.__classVariableCheck" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__classVariableCheck" />
-      <keyword name="NamingStyleChecker.__error" id="NamingStyleChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__error" />
       <keyword name="NamingStyleChecker.__extractNames" id="NamingStyleChecker.__extractNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__extractNames" />
       <keyword name="NamingStyleChecker.__findGlobalDefs" id="NamingStyleChecker.__findGlobalDefs" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__findGlobalDefs" />
       <keyword name="NamingStyleChecker.__findVariableNameErrors" id="NamingStyleChecker.__findVariableNameErrors" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__findVariableNameErrors" />
@@ -12279,6 +12296,7 @@
       <keyword name="NamingStyleChecker.__tagClassFunctions" id="NamingStyleChecker.__tagClassFunctions" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__tagClassFunctions" />
       <keyword name="NamingStyleChecker.__visitNode" id="NamingStyleChecker.__visitNode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__visitNode" />
       <keyword name="NamingStyleChecker.__visitTree" id="NamingStyleChecker.__visitTree" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.__visitTree" />
+      <keyword name="NamingStyleChecker.addErrorFromNode" id="NamingStyleChecker.addErrorFromNode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.addErrorFromNode" />
       <keyword name="NamingStyleChecker.run" id="NamingStyleChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html#NamingStyleChecker.run" />
       <keyword name="Navigation (Package)" id="Navigation (Package)" ref="index-eric7.WebBrowser.Navigation.html" />
       <keyword name="NavigationBar" id="NavigationBar" ref="eric7.WebBrowser.Navigation.NavigationBar.html#NavigationBar" />
@@ -12752,9 +12770,7 @@
       <keyword name="PathlibChecker (Constructor)" id="PathlibChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibChecker.__init__" />
       <keyword name="PathlibChecker (Module)" id="PathlibChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html" />
       <keyword name="PathlibChecker.__checkForReplacement" id="PathlibChecker.__checkForReplacement" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibChecker.__checkForReplacement" />
-      <keyword name="PathlibChecker.__error" id="PathlibChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibChecker.__error" />
-      <keyword name="PathlibChecker.__ignoreCode" id="PathlibChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibChecker.__ignoreCode" />
-      <keyword name="PathlibChecker.run" id="PathlibChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibChecker.run" />
+      <keyword name="PathlibChecker.__checkPathlibReplacement" id="PathlibChecker.__checkPathlibReplacement" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibChecker.__checkPathlibReplacement" />
       <keyword name="PathlibVisitor" id="PathlibVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibVisitor" />
       <keyword name="PathlibVisitor (Constructor)" id="PathlibVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibVisitor.__init__" />
       <keyword name="PathlibVisitor.visit_Call" id="PathlibVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html#PathlibVisitor.visit_Call" />
@@ -13088,7 +13104,10 @@
       <keyword name="PipPackagesWidget.__reinstallPackages" id="PipPackagesWidget.__reinstallPackages" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__reinstallPackages" />
       <keyword name="PipPackagesWidget.__removeCachedFiles" id="PipPackagesWidget.__removeCachedFiles" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__removeCachedFiles" />
       <keyword name="PipPackagesWidget.__repairPip" id="PipPackagesWidget.__repairPip" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__repairPip" />
+      <keyword name="PipPackagesWidget.__resetPackageSearchHighlight" id="PipPackagesWidget.__resetPackageSearchHighlight" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__resetPackageSearchHighlight" />
+      <keyword name="PipPackagesWidget.__resetPackageSearchHighlights" id="PipPackagesWidget.__resetPackageSearchHighlights" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__resetPackageSearchHighlights" />
       <keyword name="PipPackagesWidget.__selectedUpdateableItems" id="PipPackagesWidget.__selectedUpdateableItems" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__selectedUpdateableItems" />
+      <keyword name="PipPackagesWidget.__setPackageSearchHighlights" id="PipPackagesWidget.__setPackageSearchHighlights" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__setPackageSearchHighlights" />
       <keyword name="PipPackagesWidget.__showCacheInfo" id="PipPackagesWidget.__showCacheInfo" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__showCacheInfo" />
       <keyword name="PipPackagesWidget.__showCacheList" id="PipPackagesWidget.__showCacheList" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__showCacheList" />
       <keyword name="PipPackagesWidget.__showLicensesDialog" id="PipPackagesWidget.__showLicensesDialog" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.__showLicensesDialog" />
@@ -13117,6 +13136,7 @@
       <keyword name="PipPackagesWidget.on_localCheckBox_clicked" id="PipPackagesWidget.on_localCheckBox_clicked" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.on_localCheckBox_clicked" />
       <keyword name="PipPackagesWidget.on_localDepCheckBox_clicked" id="PipPackagesWidget.on_localDepCheckBox_clicked" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.on_localDepCheckBox_clicked" />
       <keyword name="PipPackagesWidget.on_notRequiredCheckBox_clicked" id="PipPackagesWidget.on_notRequiredCheckBox_clicked" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.on_notRequiredCheckBox_clicked" />
+      <keyword name="PipPackagesWidget.on_packageSearchEdit_textChanged" id="PipPackagesWidget.on_packageSearchEdit_textChanged" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.on_packageSearchEdit_textChanged" />
       <keyword name="PipPackagesWidget.on_packagesList_itemActivated" id="PipPackagesWidget.on_packagesList_itemActivated" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.on_packagesList_itemActivated" />
       <keyword name="PipPackagesWidget.on_packagesList_itemSelectionChanged" id="PipPackagesWidget.on_packagesList_itemSelectionChanged" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.on_packagesList_itemSelectionChanged" />
       <keyword name="PipPackagesWidget.on_refreshButton_clicked" id="PipPackagesWidget.on_refreshButton_clicked" ref="eric7.PipInterface.PipPackagesWidget.html#PipPackagesWidget.on_refreshButton_clicked" />
@@ -14341,6 +14361,27 @@
       <keyword name="PySvnProjectHelper.initMenu" id="PySvnProjectHelper.initMenu" ref="eric7.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html#PySvnProjectHelper.initMenu" />
       <keyword name="PySvnProjectHelper.initToolbar" id="PySvnProjectHelper.initToolbar" ref="eric7.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html#PySvnProjectHelper.initToolbar" />
       <keyword name="PySvnProjectHelper.removeToolbar" id="PySvnProjectHelper.removeToolbar" ref="eric7.Plugins.VcsPlugins.vcsPySvn.ProjectHelper.html#PySvnProjectHelper.removeToolbar" />
+      <keyword name="Pydantic (Package)" id="Pydantic (Package)" ref="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.html" />
+      <keyword name="PydanticChecker" id="PydanticChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html#PydanticChecker" />
+      <keyword name="PydanticChecker (Constructor)" id="PydanticChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html#PydanticChecker.__init__" />
+      <keyword name="PydanticChecker (Module)" id="PydanticChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html" />
+      <keyword name="PydanticChecker.__checkPydantic" id="PydanticChecker.__checkPydantic" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html#PydanticChecker.__checkPydantic" />
+      <keyword name="PydanticUtils (Module)" id="PydanticUtils (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html" />
+      <keyword name="PydanticVisitor" id="PydanticVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor" />
+      <keyword name="PydanticVisitor (Constructor)" id="PydanticVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__init__" />
+      <keyword name="PydanticVisitor (Module)" id="PydanticVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html" />
+      <keyword name="PydanticVisitor.__checkForPyd001" id="PydanticVisitor.__checkForPyd001" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__checkForPyd001" />
+      <keyword name="PydanticVisitor.__checkForPyd002" id="PydanticVisitor.__checkForPyd002" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__checkForPyd002" />
+      <keyword name="PydanticVisitor.__checkForPyd003" id="PydanticVisitor.__checkForPyd003" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__checkForPyd003" />
+      <keyword name="PydanticVisitor.__checkForPyd004" id="PydanticVisitor.__checkForPyd004" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__checkForPyd004" />
+      <keyword name="PydanticVisitor.__checkForPyd005" id="PydanticVisitor.__checkForPyd005" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__checkForPyd005" />
+      <keyword name="PydanticVisitor.__checkForPyd006" id="PydanticVisitor.__checkForPyd006" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__checkForPyd006" />
+      <keyword name="PydanticVisitor.__checkForPyd010" id="PydanticVisitor.__checkForPyd010" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__checkForPyd010" />
+      <keyword name="PydanticVisitor.__currentClass" id="PydanticVisitor.__currentClass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__currentClass" />
+      <keyword name="PydanticVisitor.__enterClass" id="PydanticVisitor.__enterClass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__enterClass" />
+      <keyword name="PydanticVisitor.__leaveClass" id="PydanticVisitor.__leaveClass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.__leaveClass" />
+      <keyword name="PydanticVisitor.visit_AnnAssign" id="PydanticVisitor.visit_AnnAssign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.visit_AnnAssign" />
+      <keyword name="PydanticVisitor.visit_ClassDef" id="PydanticVisitor.visit_ClassDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html#PydanticVisitor.visit_ClassDef" />
       <keyword name="PytestExecutor" id="PytestExecutor" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor" />
       <keyword name="PytestExecutor (Constructor)" id="PytestExecutor (Constructor)" ref="eric7.Testing.Interfaces.PytestExecutor.html#PytestExecutor.__init__" />
       <keyword name="PytestExecutor (Module)" id="PytestExecutor (Module)" ref="eric7.Testing.Interfaces.PytestExecutor.html" />
@@ -14961,35 +15002,40 @@
       <keyword name="RestructuredTextProvider.numberedList" id="RestructuredTextProvider.numberedList" ref="eric7.QScintilla.MarkupProviders.RestructuredTextProvider.html#RestructuredTextProvider.numberedList" />
       <keyword name="RestructuredTextProvider.quote" id="RestructuredTextProvider.quote" ref="eric7.QScintilla.MarkupProviders.RestructuredTextProvider.html#RestructuredTextProvider.quote" />
       <keyword name="ReturnVisitor" id="ReturnVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsFunctionVisitor.html#ReturnVisitor" />
-      <keyword name="ReturnVisitor" id="ReturnVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor" />
+      <keyword name="ReturnVisitor" id="ReturnVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor" />
       <keyword name="ReturnVisitor (Constructor)" id="ReturnVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsFunctionVisitor.html#ReturnVisitor.__init__" />
-      <keyword name="ReturnVisitor (Constructor)" id="ReturnVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__init__" />
-      <keyword name="ReturnVisitor.__checkFunction" id="ReturnVisitor.__checkFunction" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__checkFunction" />
-      <keyword name="ReturnVisitor.__checkImplicitReturn" id="ReturnVisitor.__checkImplicitReturn" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__checkImplicitReturn" />
-      <keyword name="ReturnVisitor.__checkImplicitReturnValue" id="ReturnVisitor.__checkImplicitReturnValue" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__checkImplicitReturnValue" />
-      <keyword name="ReturnVisitor.__checkUnnecessaryAssign" id="ReturnVisitor.__checkUnnecessaryAssign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__checkUnnecessaryAssign" />
-      <keyword name="ReturnVisitor.__checkUnnecessaryReturnNone" id="ReturnVisitor.__checkUnnecessaryReturnNone" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__checkUnnecessaryReturnNone" />
-      <keyword name="ReturnVisitor.__hasRefsBeforeNextAssign" id="ReturnVisitor.__hasRefsBeforeNextAssign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__hasRefsBeforeNextAssign" />
-      <keyword name="ReturnVisitor.__isFalse" id="ReturnVisitor.__isFalse" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__isFalse" />
-      <keyword name="ReturnVisitor.__isNone" id="ReturnVisitor.__isNone" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__isNone" />
-      <keyword name="ReturnVisitor.__resultExists" id="ReturnVisitor.__resultExists" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__resultExists" />
-      <keyword name="ReturnVisitor.__visitAssignTarget" id="ReturnVisitor.__visitAssignTarget" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__visitAssignTarget" />
-      <keyword name="ReturnVisitor.__visitLoop" id="ReturnVisitor.__visitLoop" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__visitLoop" />
-      <keyword name="ReturnVisitor.__visitWithStack" id="ReturnVisitor.__visitWithStack" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.__visitWithStack" />
-      <keyword name="ReturnVisitor.assigns" id="ReturnVisitor.assigns" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.assigns" />
+      <keyword name="ReturnVisitor (Constructor)" id="ReturnVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__init__" />
+      <keyword name="ReturnVisitor (Module)" id="ReturnVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html" />
+      <keyword name="ReturnVisitor.__checkFunction" id="ReturnVisitor.__checkFunction" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__checkFunction" />
+      <keyword name="ReturnVisitor.__checkImplicitReturn" id="ReturnVisitor.__checkImplicitReturn" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__checkImplicitReturn" />
+      <keyword name="ReturnVisitor.__checkImplicitReturnValue" id="ReturnVisitor.__checkImplicitReturnValue" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__checkImplicitReturnValue" />
+      <keyword name="ReturnVisitor.__checkUnnecessaryAssign" id="ReturnVisitor.__checkUnnecessaryAssign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__checkUnnecessaryAssign" />
+      <keyword name="ReturnVisitor.__checkUnnecessaryReturnNone" id="ReturnVisitor.__checkUnnecessaryReturnNone" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__checkUnnecessaryReturnNone" />
+      <keyword name="ReturnVisitor.__hasRefsBeforeNextAssign" id="ReturnVisitor.__hasRefsBeforeNextAssign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__hasRefsBeforeNextAssign" />
+      <keyword name="ReturnVisitor.__hasRefsOrAssignsWithinTryOrLoop" id="ReturnVisitor.__hasRefsOrAssignsWithinTryOrLoop" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__hasRefsOrAssignsWithinTryOrLoop" />
+      <keyword name="ReturnVisitor.__isFalse" id="ReturnVisitor.__isFalse" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__isFalse" />
+      <keyword name="ReturnVisitor.__isNone" id="ReturnVisitor.__isNone" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__isNone" />
+      <keyword name="ReturnVisitor.__resultExists" id="ReturnVisitor.__resultExists" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__resultExists" />
+      <keyword name="ReturnVisitor.__visitAssignTarget" id="ReturnVisitor.__visitAssignTarget" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__visitAssignTarget" />
+      <keyword name="ReturnVisitor.__visitLoop" id="ReturnVisitor.__visitLoop" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__visitLoop" />
+      <keyword name="ReturnVisitor.__visitWithStack" id="ReturnVisitor.__visitWithStack" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.__visitWithStack" />
+      <keyword name="ReturnVisitor.assigns" id="ReturnVisitor.assigns" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.assigns" />
       <keyword name="ReturnVisitor.hasOnlyNoneReturns" id="ReturnVisitor.hasOnlyNoneReturns" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsFunctionVisitor.html#ReturnVisitor.hasOnlyNoneReturns" />
-      <keyword name="ReturnVisitor.refs" id="ReturnVisitor.refs" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.refs" />
-      <keyword name="ReturnVisitor.returns" id="ReturnVisitor.returns" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.returns" />
+      <keyword name="ReturnVisitor.loops" id="ReturnVisitor.loops" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.loops" />
+      <keyword name="ReturnVisitor.refs" id="ReturnVisitor.refs" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.refs" />
+      <keyword name="ReturnVisitor.returns" id="ReturnVisitor.returns" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.returns" />
       <keyword name="ReturnVisitor.switchContext" id="ReturnVisitor.switchContext" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsFunctionVisitor.html#ReturnVisitor.switchContext" />
-      <keyword name="ReturnVisitor.visit_Assign" id="ReturnVisitor.visit_Assign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_Assign" />
-      <keyword name="ReturnVisitor.visit_AsyncFor" id="ReturnVisitor.visit_AsyncFor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_AsyncFor" />
-      <keyword name="ReturnVisitor.visit_AsyncFunctionDef" id="ReturnVisitor.visit_AsyncFunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_AsyncFunctionDef" />
-      <keyword name="ReturnVisitor.visit_For" id="ReturnVisitor.visit_For" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_For" />
-      <keyword name="ReturnVisitor.visit_FunctionDef" id="ReturnVisitor.visit_FunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_FunctionDef" />
-      <keyword name="ReturnVisitor.visit_Name" id="ReturnVisitor.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_Name" />
+      <keyword name="ReturnVisitor.tries" id="ReturnVisitor.tries" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.tries" />
+      <keyword name="ReturnVisitor.visit_Assign" id="ReturnVisitor.visit_Assign" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_Assign" />
+      <keyword name="ReturnVisitor.visit_AsyncFor" id="ReturnVisitor.visit_AsyncFor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_AsyncFor" />
+      <keyword name="ReturnVisitor.visit_AsyncFunctionDef" id="ReturnVisitor.visit_AsyncFunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_AsyncFunctionDef" />
+      <keyword name="ReturnVisitor.visit_For" id="ReturnVisitor.visit_For" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_For" />
+      <keyword name="ReturnVisitor.visit_FunctionDef" id="ReturnVisitor.visit_FunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_FunctionDef" />
+      <keyword name="ReturnVisitor.visit_Name" id="ReturnVisitor.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_Name" />
       <keyword name="ReturnVisitor.visit_Return" id="ReturnVisitor.visit_Return" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsFunctionVisitor.html#ReturnVisitor.visit_Return" />
-      <keyword name="ReturnVisitor.visit_Return" id="ReturnVisitor.visit_Return" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_Return" />
-      <keyword name="ReturnVisitor.visit_While" id="ReturnVisitor.visit_While" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#ReturnVisitor.visit_While" />
+      <keyword name="ReturnVisitor.visit_Return" id="ReturnVisitor.visit_Return" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_Return" />
+      <keyword name="ReturnVisitor.visit_Try" id="ReturnVisitor.visit_Try" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_Try" />
+      <keyword name="ReturnVisitor.visit_While" id="ReturnVisitor.visit_While" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html#ReturnVisitor.visit_While" />
       <keyword name="STLinkDevice" id="STLinkDevice" ref="eric7.MicroPython.Devices.STLinkDevices.html#STLinkDevice" />
       <keyword name="STLinkDevice (Constructor)" id="STLinkDevice (Constructor)" ref="eric7.MicroPython.Devices.STLinkDevices.html#STLinkDevice.__init__" />
       <keyword name="STLinkDevice.__createSTLinkMenu" id="STLinkDevice.__createSTLinkMenu" ref="eric7.MicroPython.Devices.STLinkDevices.html#STLinkDevice.__createSTLinkMenu" />
@@ -15231,9 +15277,8 @@
       <keyword name="SecurityChecker" id="SecurityChecker" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html#SecurityChecker" />
       <keyword name="SecurityChecker (Constructor)" id="SecurityChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html#SecurityChecker.__init__" />
       <keyword name="SecurityChecker (Module)" id="SecurityChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html" />
-      <keyword name="SecurityChecker.__ignoreCode" id="SecurityChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html#SecurityChecker.__ignoreCode" />
+      <keyword name="SecurityChecker.addError" id="SecurityChecker.addError" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html#SecurityChecker.addError" />
       <keyword name="SecurityChecker.getConfig" id="SecurityChecker.getConfig" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html#SecurityChecker.getConfig" />
-      <keyword name="SecurityChecker.reportError" id="SecurityChecker.reportError" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html#SecurityChecker.reportError" />
       <keyword name="SecurityChecker.run" id="SecurityChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html#SecurityChecker.run" />
       <keyword name="SecurityContext" id="SecurityContext" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityContext.html#SecurityContext" />
       <keyword name="SecurityContext (Constructor)" id="SecurityContext (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityContext.html#SecurityContext.__init__" />
@@ -15669,9 +15714,7 @@
       <keyword name="SimplifyChecker (Constructor)" id="SimplifyChecker (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html#SimplifyChecker.__init__" />
       <keyword name="SimplifyChecker (Module)" id="SimplifyChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html" />
       <keyword name="SimplifyChecker.__addMeta" id="SimplifyChecker.__addMeta" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html#SimplifyChecker.__addMeta" />
-      <keyword name="SimplifyChecker.__error" id="SimplifyChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html#SimplifyChecker.__error" />
-      <keyword name="SimplifyChecker.__ignoreCode" id="SimplifyChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html#SimplifyChecker.__ignoreCode" />
-      <keyword name="SimplifyChecker.run" id="SimplifyChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html#SimplifyChecker.run" />
+      <keyword name="SimplifyChecker.__checkCodeSimplifications" id="SimplifyChecker.__checkCodeSimplifications" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html#SimplifyChecker.__checkCodeSimplifications" />
       <keyword name="SimplifyNodeVisitor" id="SimplifyNodeVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor" />
       <keyword name="SimplifyNodeVisitor (Constructor)" id="SimplifyNodeVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__init__" />
       <keyword name="SimplifyNodeVisitor (Module)" id="SimplifyNodeVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html" />
@@ -15717,6 +15760,7 @@
       <keyword name="SimplifyNodeVisitor.__check301" id="SimplifyNodeVisitor.__check301" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check301" />
       <keyword name="SimplifyNodeVisitor.__check401" id="SimplifyNodeVisitor.__check401" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check401" />
       <keyword name="SimplifyNodeVisitor.__check402" id="SimplifyNodeVisitor.__check402" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check402" />
+      <keyword name="SimplifyNodeVisitor.__check411" id="SimplifyNodeVisitor.__check411" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check411" />
       <keyword name="SimplifyNodeVisitor.__check901" id="SimplifyNodeVisitor.__check901" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check901" />
       <keyword name="SimplifyNodeVisitor.__check904" id="SimplifyNodeVisitor.__check904" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check904" />
       <keyword name="SimplifyNodeVisitor.__check905" id="SimplifyNodeVisitor.__check905" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.__check905" />
@@ -15744,6 +15788,7 @@
       <keyword name="SimplifyNodeVisitor.visit_For" id="SimplifyNodeVisitor.visit_For" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_For" />
       <keyword name="SimplifyNodeVisitor.visit_If" id="SimplifyNodeVisitor.visit_If" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_If" />
       <keyword name="SimplifyNodeVisitor.visit_IfExp" id="SimplifyNodeVisitor.visit_IfExp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_IfExp" />
+      <keyword name="SimplifyNodeVisitor.visit_JoinedStr" id="SimplifyNodeVisitor.visit_JoinedStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_JoinedStr" />
       <keyword name="SimplifyNodeVisitor.visit_Subscript" id="SimplifyNodeVisitor.visit_Subscript" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_Subscript" />
       <keyword name="SimplifyNodeVisitor.visit_Try" id="SimplifyNodeVisitor.visit_Try" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_Try" />
       <keyword name="SimplifyNodeVisitor.visit_UnaryOp" id="SimplifyNodeVisitor.visit_UnaryOp" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html#SimplifyNodeVisitor.visit_UnaryOp" />
@@ -17228,15 +17273,16 @@
       <keyword name="SyntaxCheckerPlugin.activate" id="SyntaxCheckerPlugin.activate" ref="eric7.Plugins.PluginSyntaxChecker.html#SyntaxCheckerPlugin.activate" />
       <keyword name="SyntaxCheckerPlugin.deactivate" id="SyntaxCheckerPlugin.deactivate" ref="eric7.Plugins.PluginSyntaxChecker.html#SyntaxCheckerPlugin.deactivate" />
       <keyword name="SysUtilities (Module)" id="SysUtilities (Module)" ref="eric7.SystemUtilities.SysUtilities.html" />
-      <keyword name="SysVersionVisitor" id="SysVersionVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor" />
-      <keyword name="SysVersionVisitor (Constructor)" id="SysVersionVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.__init__" />
-      <keyword name="SysVersionVisitor.__isSys" id="SysVersionVisitor.__isSys" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.__isSys" />
-      <keyword name="SysVersionVisitor.__isSysVersionUpperSlice" id="SysVersionVisitor.__isSysVersionUpperSlice" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.__isSysVersionUpperSlice" />
-      <keyword name="SysVersionVisitor.visit_Attribute" id="SysVersionVisitor.visit_Attribute" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.visit_Attribute" />
-      <keyword name="SysVersionVisitor.visit_Compare" id="SysVersionVisitor.visit_Compare" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.visit_Compare" />
-      <keyword name="SysVersionVisitor.visit_ImportFrom" id="SysVersionVisitor.visit_ImportFrom" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.visit_ImportFrom" />
-      <keyword name="SysVersionVisitor.visit_Name" id="SysVersionVisitor.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.visit_Name" />
-      <keyword name="SysVersionVisitor.visit_Subscript" id="SysVersionVisitor.visit_Subscript" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#SysVersionVisitor.visit_Subscript" />
+      <keyword name="SysVersionVisitor" id="SysVersionVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor" />
+      <keyword name="SysVersionVisitor (Constructor)" id="SysVersionVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.__init__" />
+      <keyword name="SysVersionVisitor (Module)" id="SysVersionVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html" />
+      <keyword name="SysVersionVisitor.__isSys" id="SysVersionVisitor.__isSys" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.__isSys" />
+      <keyword name="SysVersionVisitor.__isSysVersionUpperSlice" id="SysVersionVisitor.__isSysVersionUpperSlice" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.__isSysVersionUpperSlice" />
+      <keyword name="SysVersionVisitor.visit_Attribute" id="SysVersionVisitor.visit_Attribute" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.visit_Attribute" />
+      <keyword name="SysVersionVisitor.visit_Compare" id="SysVersionVisitor.visit_Compare" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.visit_Compare" />
+      <keyword name="SysVersionVisitor.visit_ImportFrom" id="SysVersionVisitor.visit_ImportFrom" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.visit_ImportFrom" />
+      <keyword name="SysVersionVisitor.visit_Name" id="SysVersionVisitor.visit_Name" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.visit_Name" />
+      <keyword name="SysVersionVisitor.visit_Subscript" id="SysVersionVisitor.visit_Subscript" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html#SysVersionVisitor.visit_Subscript" />
       <keyword name="SystemUtilities (Package)" id="SystemUtilities (Package)" ref="index-eric7.SystemUtilities.html" />
       <keyword name="TERMINAL" id="TERMINAL" ref="eric7.EricGui.EricGenericDiffHighlighter.html#TERMINAL" />
       <keyword name="TRPreviewer" id="TRPreviewer" ref="eric7.Tools.TRPreviewer.html#TRPreviewer" />
@@ -17708,17 +17754,18 @@
       <keyword name="TestingWindow" id="TestingWindow" ref="eric7.Testing.TestingWidget.html#TestingWindow" />
       <keyword name="TestingWindow (Constructor)" id="TestingWindow (Constructor)" ref="eric7.Testing.TestingWidget.html#TestingWindow.__init__" />
       <keyword name="TestingWindow.eventFilter" id="TestingWindow.eventFilter" ref="eric7.Testing.TestingWidget.html#TestingWindow.eventFilter" />
-      <keyword name="TextVisitor" id="TextVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor" />
-      <keyword name="TextVisitor (Constructor)" id="TextVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.__init__" />
-      <keyword name="TextVisitor.__addNode" id="TextVisitor.__addNode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.__addNode" />
-      <keyword name="TextVisitor.__visitBody" id="TextVisitor.__visitBody" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.__visitBody" />
-      <keyword name="TextVisitor.__visitDefinition" id="TextVisitor.__visitDefinition" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.__visitDefinition" />
-      <keyword name="TextVisitor.visit_AsyncFunctionDef" id="TextVisitor.visit_AsyncFunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.visit_AsyncFunctionDef" />
-      <keyword name="TextVisitor.visit_Call" id="TextVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.visit_Call" />
-      <keyword name="TextVisitor.visit_ClassDef" id="TextVisitor.visit_ClassDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.visit_ClassDef" />
-      <keyword name="TextVisitor.visit_Constant" id="TextVisitor.visit_Constant" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.visit_Constant" />
-      <keyword name="TextVisitor.visit_FunctionDef" id="TextVisitor.visit_FunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.visit_FunctionDef" />
-      <keyword name="TextVisitor.visit_Module" id="TextVisitor.visit_Module" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#TextVisitor.visit_Module" />
+      <keyword name="TextVisitor" id="TextVisitor" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor" />
+      <keyword name="TextVisitor (Constructor)" id="TextVisitor (Constructor)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.__init__" />
+      <keyword name="TextVisitor (Module)" id="TextVisitor (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html" />
+      <keyword name="TextVisitor.__addNode" id="TextVisitor.__addNode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.__addNode" />
+      <keyword name="TextVisitor.__visitBody" id="TextVisitor.__visitBody" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.__visitBody" />
+      <keyword name="TextVisitor.__visitDefinition" id="TextVisitor.__visitDefinition" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.__visitDefinition" />
+      <keyword name="TextVisitor.visit_AsyncFunctionDef" id="TextVisitor.visit_AsyncFunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.visit_AsyncFunctionDef" />
+      <keyword name="TextVisitor.visit_Call" id="TextVisitor.visit_Call" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.visit_Call" />
+      <keyword name="TextVisitor.visit_ClassDef" id="TextVisitor.visit_ClassDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.visit_ClassDef" />
+      <keyword name="TextVisitor.visit_Constant" id="TextVisitor.visit_Constant" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.visit_Constant" />
+      <keyword name="TextVisitor.visit_FunctionDef" id="TextVisitor.visit_FunctionDef" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.visit_FunctionDef" />
+      <keyword name="TextVisitor.visit_Module" id="TextVisitor.visit_Module" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html#TextVisitor.visit_Module" />
       <keyword name="ThemeManager" id="ThemeManager" ref="eric7.Preferences.ThemeManager.html#ThemeManager" />
       <keyword name="ThemeManager (Constructor)" id="ThemeManager (Constructor)" ref="eric7.Preferences.ThemeManager.html#ThemeManager.__init__" />
       <keyword name="ThemeManager (Module)" id="ThemeManager (Module)" ref="eric7.Preferences.ThemeManager.html" />
@@ -18138,16 +18185,13 @@
       <keyword name="UnusedChecker (Module)" id="UnusedChecker (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html" />
       <keyword name="UnusedChecker.__checkUnusedArguments" id="UnusedChecker.__checkUnusedArguments" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__checkUnusedArguments" />
       <keyword name="UnusedChecker.__checkUnusedGlobals" id="UnusedChecker.__checkUnusedGlobals" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__checkUnusedGlobals" />
-      <keyword name="UnusedChecker.__error" id="UnusedChecker.__error" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__error" />
       <keyword name="UnusedChecker.__extractGlobalVariables" id="UnusedChecker.__extractGlobalVariables" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__extractGlobalVariables" />
       <keyword name="UnusedChecker.__getArguments" id="UnusedChecker.__getArguments" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__getArguments" />
       <keyword name="UnusedChecker.__getDecoratorNames" id="UnusedChecker.__getDecoratorNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__getDecoratorNames" />
       <keyword name="UnusedChecker.__getUnusedArguments" id="UnusedChecker.__getUnusedArguments" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__getUnusedArguments" />
-      <keyword name="UnusedChecker.__ignoreCode" id="UnusedChecker.__ignoreCode" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__ignoreCode" />
       <keyword name="UnusedChecker.__isDunderMethod" id="UnusedChecker.__isDunderMethod" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__isDunderMethod" />
       <keyword name="UnusedChecker.__isEventHandlerMethod" id="UnusedChecker.__isEventHandlerMethod" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__isEventHandlerMethod" />
       <keyword name="UnusedChecker.__isStubFunction" id="UnusedChecker.__isStubFunction" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.__isStubFunction" />
-      <keyword name="UnusedChecker.run" id="UnusedChecker.run" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html#UnusedChecker.run" />
       <keyword name="UrlBar" id="UrlBar" ref="eric7.WebBrowser.UrlBar.UrlBar.html#UrlBar" />
       <keyword name="UrlBar (Constructor)" id="UrlBar (Constructor)" ref="eric7.WebBrowser.UrlBar.UrlBar.html#UrlBar.__init__" />
       <keyword name="UrlBar (Module)" id="UrlBar (Module)" ref="eric7.WebBrowser.UrlBar.UrlBar.html" />
@@ -20167,7 +20211,7 @@
       <keyword name="_buildChildrenLists" id="_buildChildrenLists" ref="eric7.Graphics.GraphicsUtilities.html#_buildChildrenLists" />
       <keyword name="_checkString" id="_checkString" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html#_checkString" />
       <keyword name="_classifyKeySize" id="_classifyKeySize" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.weakCryptographicKey.html#_classifyKeySize" />
-      <keyword name="_cryptCrypt" id="_cryptCrypt" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html#_cryptCrypt" />
+      <keyword name="_cryptCrypt" id="_cryptCrypt" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html#_cryptCrypt" />
       <keyword name="_dict2list" id="_dict2list" ref="eric7.Plugins.WizardPlugins.SetupWizard.SetupCfgUtilities.html#_dict2list" />
       <keyword name="_dict2string" id="_dict2string" ref="eric7.Plugins.WizardPlugins.SetupWizard.SetupCfgUtilities.html#_dict2string" />
       <keyword name="_evaluateAst" id="_evaluateAst" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html#_evaluateAst" />
@@ -20176,8 +20220,13 @@
       <keyword name="_getMembersValue" id="_getMembersValue" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.tarfileUnsafeMembers.html#_getMembersValue" />
       <keyword name="_get_parameters" id="_get_parameters" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#_get_parameters" />
       <keyword name="_getfullargs" id="_getfullargs" ref="eric7.DebugClients.Python.DebugUtilities.html#_getfullargs" />
-      <keyword name="_hashlibFunc" id="_hashlibFunc" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html#_hashlibFunc" />
-      <keyword name="_hashlibNew" id="_hashlibNew" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html#_hashlibNew" />
+      <keyword name="_hasAnnotatedField" id="_hasAnnotatedField" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#_hasAnnotatedField" />
+      <keyword name="_hasFieldFunction" id="_hasFieldFunction" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#_hasFieldFunction" />
+      <keyword name="_hasModelConfig" id="_hasModelConfig" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#_hasModelConfig" />
+      <keyword name="_hasPydanticDecorator" id="_hasPydanticDecorator" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#_hasPydanticDecorator" />
+      <keyword name="_hasPydanticMethod" id="_hasPydanticMethod" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#_hasPydanticMethod" />
+      <keyword name="_hasPydanticModelBase" id="_hasPydanticModelBase" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#_hasPydanticModelBase" />
+      <keyword name="_hashlibFunc" id="_hashlibFunc" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html#_hashlibFunc" />
       <keyword name="_indent" id="_indent" ref="eric7.Utilities.ClassBrowsers.pyclbr.html#_indent" />
       <keyword name="_indent" id="_indent" ref="eric7.Utilities.ModuleParser.html#_indent" />
       <keyword name="_initTypeMap" id="_initTypeMap" ref="eric7.DebugClients.Python.DebugVariables.html#_initTypeMap" />
@@ -20252,7 +20301,7 @@
       <keyword name="checkHardcodedPasswordAsString" id="checkHardcodedPasswordAsString" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedPassword.html#checkHardcodedPasswordAsString" />
       <keyword name="checkHardcodedSqlExpressions" id="checkHardcodedSqlExpressions" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html#checkHardcodedSqlExpressions" />
       <keyword name="checkHardcodedTmpDirectory" id="checkHardcodedTmpDirectory" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp.html#checkHardcodedTmpDirectory" />
-      <keyword name="checkHashlib" id="checkHashlib" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html#checkHashlib" />
+      <keyword name="checkHashlib" id="checkHashlib" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html#checkHashlib" />
       <keyword name="checkInsecureSslDefaults" id="checkInsecureSslDefaults" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.html#checkInsecureSslDefaults" />
       <keyword name="checkInsecureSslProtocolVersion" id="checkInsecureSslProtocolVersion" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.html#checkInsecureSslProtocolVersion" />
       <keyword name="checkInsecureVersion" id="checkInsecureVersion" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.snmpSecurity.html#checkInsecureVersion" />
@@ -20300,7 +20349,7 @@
       <keyword name="compileRegExp" id="compileRegExp" ref="eric7.CodeFormatting.BlackUtilities.html#compileRegExp" />
       <keyword name="compileUiFiles" id="compileUiFiles" ref="eric7.Utilities.uic.html#compileUiFiles" />
       <keyword name="completeFormData" id="completeFormData" ref="eric7.WebBrowser.Tools.Scripts.html#completeFormData" />
-      <keyword name="composeCallPath" id="composeCallPath" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#composeCallPath" />
+      <keyword name="composeCallPath" id="composeCallPath" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html#composeCallPath" />
       <keyword name="compound_statements" id="compound_statements" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#compound_statements" />
       <keyword name="concatString" id="concatString" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityUtils.html#concatString" />
       <keyword name="condaVersion" id="condaVersion" ref="eric7.CondaInterface.__init__.html#condaVersion" />
@@ -20626,6 +20675,7 @@
       <keyword name="explicit_line_join" id="explicit_line_join" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.pycodestyle.html#explicit_line_join" />
       <keyword name="exportPreferences" id="exportPreferences" ref="eric7.Preferences.__init__.html#exportPreferences" />
       <keyword name="exportShortcuts" id="exportShortcuts" ref="eric7.Preferences.Shortcuts.html#exportShortcuts" />
+      <keyword name="extractAnnotations" id="extractAnnotations" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#extractAnnotations" />
       <keyword name="extractFlags" id="extractFlags" ref="eric7.Utilities.__init__.html#extractFlags" />
       <keyword name="extractFlagsFromFile" id="extractFlagsFromFile" ref="eric7.Utilities.__init__.html#extractFlagsFromFile" />
       <keyword name="extractLineFlags" id="extractLineFlags" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html#extractLineFlags" />
@@ -20687,11 +20737,11 @@
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalFilePermissions.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedPassword.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp.html#getChecks" />
+      <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionWildcard.html#getChecks" />
-      <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.jinja2Templates.html#getChecks" />
       <keyword name="getChecks" id="getChecks" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.loggingConfigInsecureListen.html#getChecks" />
@@ -20727,6 +20777,7 @@
       <keyword name="getCoverageFileName" id="getCoverageFileName" ref="eric7.Utilities.__init__.html#getCoverageFileName" />
       <keyword name="getCoverageFileNames" id="getCoverageFileNames" ref="eric7.Utilities.__init__.html#getCoverageFileNames" />
       <keyword name="getDebugger" id="getDebugger" ref="eric7.Preferences.__init__.html#getDebugger" />
+      <keyword name="getDecoratorNames" id="getDecoratorNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#getDecoratorNames" />
       <keyword name="getDefaultConfiguration" id="getDefaultConfiguration" ref="eric7.CodeFormatting.BlackUtilities.html#getDefaultConfiguration" />
       <keyword name="getDefaultIconPaths" id="getDefaultIconPaths" ref="eric7.Toolbox.Startup.html#getDefaultIconPaths" />
       <keyword name="getDefaultLexerAssociations" id="getDefaultLexerAssociations" ref="eric7.QScintilla.Lexers.__init__.html#getDefaultLexerAssociations" />
@@ -20924,6 +20975,7 @@
       <keyword name="has_info" id="has_info" ref="eric7.MicroPython.Tools.uf2conv.html#has_info" />
       <keyword name="hashPassword" id="hashPassword" ref="eric7.EricUtilities.crypto.py3PBKDF2.html#hashPassword" />
       <keyword name="hashPasswordTuple" id="hashPasswordTuple" ref="eric7.EricUtilities.crypto.py3PBKDF2.html#hashPasswordTuple" />
+      <keyword name="hashlibInsecureFunctions (Module)" id="hashlibInsecureFunctions (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html" />
       <keyword name="hg (Module)" id="hg (Module)" ref="eric7.Plugins.VcsPlugins.vcsMercurial.hg.html" />
       <keyword name="hgVersion" id="hgVersion" ref="eric7.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html#hgVersion" />
       <keyword name="histedit (Module)" id="histedit (Module)" ref="eric7.Plugins.VcsPlugins.vcsMercurial.HisteditExtension.histedit.html" />
@@ -20958,7 +21010,6 @@
       <keyword name="injectionShell (Module)" id="injectionShell (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell.html" />
       <keyword name="injectionSql (Module)" id="injectionSql (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html" />
       <keyword name="injectionWildcard (Module)" id="injectionWildcard (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionWildcard.html" />
-      <keyword name="insecureHashlibNew (Module)" id="insecureHashlibNew (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html" />
       <keyword name="insecureSslTls (Module)" id="insecureSslTls (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.html" />
       <keyword name="installDependencies" id="installDependencies" ref="eric7.Plugins.WizardPlugins.EricPluginWizard.Templates.html#installDependencies" />
       <keyword name="installGoogleAPIPackages" id="installGoogleAPIPackages" ref="eric7.EricNetwork.EricGoogleMailHelpers.html#installGoogleAPIPackages" />
@@ -20976,21 +21027,25 @@
       <keyword name="isCondaAvailable" id="isCondaAvailable" ref="eric7.CondaInterface.__init__.html#isCondaAvailable" />
       <keyword name="isConfigured" id="isConfigured" ref="eric7.Preferences.__init__.html#isConfigured" />
       <keyword name="isCupsAvailable" id="isCupsAvailable" ref="eric7.WebBrowser.WebBrowserView.html#isCupsAvailable" />
+      <keyword name="isDataclass" id="isDataclass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#isDataclass" />
       <keyword name="isDeviceFileName" id="isDeviceFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#isDeviceFileName" />
       <keyword name="isDrive" id="isDrive" ref="eric7.SystemUtilities.FileSystemUtilities.html#isDrive" />
       <keyword name="isEllipsis" id="isEllipsis" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isEllipsis" />
       <keyword name="isExecutable" id="isExecutable" ref="eric7.DebugClients.Python.DebugUtilities.html#isExecutable" />
       <keyword name="isExecutable" id="isExecutable" ref="eric7.SystemUtilities.FileSystemUtilities.html#isExecutable" />
       <keyword name="isFreeBsdPlatform" id="isFreeBsdPlatform" ref="eric7.SystemUtilities.OSUtilities.html#isFreeBsdPlatform" />
+      <keyword name="isFunction" id="isFunction" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#isFunction" />
       <keyword name="isGnomeDesktop" id="isGnomeDesktop" ref="eric7.SystemUtilities.DesktopUtilities.html#isGnomeDesktop" />
       <keyword name="isKdeDesktop" id="isKdeDesktop" ref="eric7.SystemUtilities.DesktopUtilities.html#isKdeDesktop" />
       <keyword name="isLanguageSupported" id="isLanguageSupported" ref="eric7.Testing.__init__.html#isLanguageSupported" />
       <keyword name="isLinuxPlatform" id="isLinuxPlatform" ref="eric7.SystemUtilities.OSUtilities.html#isLinuxPlatform" />
       <keyword name="isMacPlatform" id="isMacPlatform" ref="eric7.SystemUtilities.OSUtilities.html#isMacPlatform" />
+      <keyword name="isName" id="isName" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#isName" />
       <keyword name="isNameConstant" id="isNameConstant" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNameConstant" />
       <keyword name="isNumber" id="isNumber" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.AstUtilities.html#isNumber" />
       <keyword name="isPlainFileName" id="isPlainFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#isPlainFileName" />
       <keyword name="isProgressInfo" id="isProgressInfo" ref="eric7.Plugins.VcsPlugins.vcsMercurial.HgUtilities.html#isProgressInfo" />
+      <keyword name="isPydanticModel" id="isPydanticModel" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html#isPydanticModel" />
       <keyword name="isPythonProgram" id="isPythonProgram" ref="eric7.DebugClients.Python.DebugUtilities.html#isPythonProgram" />
       <keyword name="isPythonSource" id="isPythonSource" ref="eric7.SystemUtilities.PythonUtilities.html#isPythonSource" />
       <keyword name="isRemoteFileName" id="isRemoteFileName" ref="eric7.SystemUtilities.FileSystemUtilities.html#isRemoteFileName" />
@@ -21345,6 +21400,7 @@
       <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.translations.html" />
       <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.translations.html" />
       <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.translations.html" />
+      <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations.html" />
       <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.translations.html" />
       <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.translations.html" />
       <keyword name="translations (Module)" id="translations (Module)" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.translations.html" />
@@ -21742,6 +21798,7 @@
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCodeSelectionDialog.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleStatisticsDialog.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.mccabe.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.translations.html</file>
@@ -21755,8 +21812,14 @@
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.translations.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousDefaults.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.translations.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.ImportNode.html</file>
@@ -21767,6 +21830,10 @@
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.translations.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.translations.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.__init__.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.assert.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.awsHardcodedPassword.html</file>
@@ -21779,11 +21846,11 @@
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalFilePermissions.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedPassword.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.generalHardcodedTmp.html</file>
+      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionShell.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionSql.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionWildcard.html</file>
-      <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.jinja2Templates.html</file>
       <file>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.loggingConfigInsecureListen.html</file>
@@ -22731,6 +22798,7 @@
       <file>index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.html</file>
       <file>index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.html</file>
       <file>index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.html</file>
+      <file>index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.html</file>
       <file>index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.html</file>
       <file>index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.html</file>
       <file>index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.html</file>
--- a/src/eric7/Documentation/Source/eric7.PipInterface.PipPackagesWidget.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.PipInterface.PipPackagesWidget.html	Sat Mar 01 15:52:40 2025 +0100
@@ -228,10 +228,22 @@
 <td>Private slot to repair the pip installation of the selected environment.</td>
 </tr>
 <tr>
+<td><a href="#PipPackagesWidget.__resetPackageSearchHighlight">__resetPackageSearchHighlight</a></td>
+<td>Private method to reset the package search marker of an individual item.</td>
+</tr>
+<tr>
+<td><a href="#PipPackagesWidget.__resetPackageSearchHighlights">__resetPackageSearchHighlights</a></td>
+<td>Private method to reset the package search markers.</td>
+</tr>
+<tr>
 <td><a href="#PipPackagesWidget.__selectedUpdateableItems">__selectedUpdateableItems</a></td>
 <td>Private method to get a list of selected items that can be updated.</td>
 </tr>
 <tr>
+<td><a href="#PipPackagesWidget.__setPackageSearchHighlights">__setPackageSearchHighlights</a></td>
+<td>Private method to highlight the given package items.</td>
+</tr>
+<tr>
 <td><a href="#PipPackagesWidget.__showCacheInfo">__showCacheInfo</a></td>
 <td>Private slot to show information about the cache.</td>
 </tr>
@@ -344,6 +356,10 @@
 <td>Private slot handling the switching of the 'not required' mode.</td>
 </tr>
 <tr>
+<td><a href="#PipPackagesWidget.on_packageSearchEdit_textChanged">on_packageSearchEdit_textChanged</a></td>
+<td>Private slot to search packages in the dependencies tree.</td>
+</tr>
+<tr>
 <td><a href="#PipPackagesWidget.on_packagesList_itemActivated">on_packagesList_itemActivated</a></td>
 <td>Private slot reacting on a package item being activated.</td>
 </tr>
@@ -740,6 +756,34 @@
         environment.
 </p>
 
+<a NAME="PipPackagesWidget.__resetPackageSearchHighlight" ID="PipPackagesWidget.__resetPackageSearchHighlight"></a>
+<h4>PipPackagesWidget.__resetPackageSearchHighlight</h4>
+<b>__resetPackageSearchHighlight</b>(<i>packageItem</i>)
+<p>
+        Private method to reset the package search marker of an individual item.
+</p>
+
+<dl>
+
+<dt><i>packageItem</i> (QTreeWidgetItem)</dt>
+<dd>
+reference to the package item
+</dd>
+</dl>
+<a NAME="PipPackagesWidget.__resetPackageSearchHighlights" ID="PipPackagesWidget.__resetPackageSearchHighlights"></a>
+<h4>PipPackagesWidget.__resetPackageSearchHighlights</h4>
+<b>__resetPackageSearchHighlights</b>(<i>parent=None</i>)
+<p>
+        Private method to reset the package search markers.
+</p>
+
+<dl>
+
+<dt><i>parent</i> (QTreeWidgetItem (optional))</dt>
+<dd>
+reference to the parent item (defaults to None)
+</dd>
+</dl>
 <a NAME="PipPackagesWidget.__selectedUpdateableItems" ID="PipPackagesWidget.__selectedUpdateableItems"></a>
 <h4>PipPackagesWidget.__selectedUpdateableItems</h4>
 <b>__selectedUpdateableItems</b>(<i></i>)
@@ -759,6 +803,20 @@
 list of QTreeWidgetItem
 </dd>
 </dl>
+<a NAME="PipPackagesWidget.__setPackageSearchHighlights" ID="PipPackagesWidget.__setPackageSearchHighlights"></a>
+<h4>PipPackagesWidget.__setPackageSearchHighlights</h4>
+<b>__setPackageSearchHighlights</b>(<i>packageItems</i>)
+<p>
+        Private method to highlight the given package items.
+</p>
+
+<dl>
+
+<dt><i>packageItems</i> (list of QTreeWidgetItem)</dt>
+<dd>
+list of package dependency items to be highlighted
+</dd>
+</dl>
 <a NAME="PipPackagesWidget.__showCacheInfo" ID="PipPackagesWidget.__showCacheInfo"></a>
 <h4>PipPackagesWidget.__showCacheInfo</h4>
 <b>__showCacheInfo</b>(<i></i>)
@@ -1102,6 +1160,20 @@
         Private slot handling the switching of the 'not required' mode.
 </p>
 
+<a NAME="PipPackagesWidget.on_packageSearchEdit_textChanged" ID="PipPackagesWidget.on_packageSearchEdit_textChanged"></a>
+<h4>PipPackagesWidget.on_packageSearchEdit_textChanged</h4>
+<b>on_packageSearchEdit_textChanged</b>(<i>package</i>)
+<p>
+        Private slot to search packages in the dependencies tree.
+</p>
+
+<dl>
+
+<dt><i>package</i> (str)</dt>
+<dd>
+package text to search for
+</dd>
+</dl>
 <a NAME="PipPackagesWidget.on_packagesList_itemActivated" ID="PipPackagesWidget.on_packagesList_itemActivated"></a>
 <h4>PipPackagesWidget.on_packagesList_itemActivated</h4>
 <b>on_packagesList_itemActivated</b>(<i>item, column</i>)
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Annotations.AnnotationsChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -38,9 +38,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -88,10 +89,6 @@
 <td>Private method to classify the missing type annotation based on the Function & Argument metadata.</td>
 </tr>
 <tr>
-<td><a href="#AnnotationsChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
 <td><a href="#AnnotationsChecker.__getAnnotationComplexity">__getAnnotationComplexity</a></td>
 <td>Private method to determine the annotation complexity.</td>
 </tr>
@@ -104,17 +101,9 @@
 <td>Private method to check for type annotations.</td>
 </tr>
 <tr>
-<td><a href="#AnnotationsChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
 <td><a href="#AnnotationsChecker.__returnErrorClassifier">__returnErrorClassifier</a></td>
 <td>Private method to classify a return type annotation issue.</td>
 </tr>
-<tr>
-<td><a href="#AnnotationsChecker.run">run</a></td>
-<td>Public method to check the given source against annotation issues.</td>
-</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -273,32 +262,6 @@
 reference to the Argument object
 </dd>
 </dl>
-<a NAME="AnnotationsChecker.__error" ID="AnnotationsChecker.__error"></a>
-<h4>AnnotationsChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
 <a NAME="AnnotationsChecker.__getAnnotationComplexity" ID="AnnotationsChecker.__getAnnotationComplexity"></a>
 <h4>AnnotationsChecker.__getAnnotationComplexity</h4>
 <b>__getAnnotationComplexity</b>(<i>annotationNode, defaultComplexity=1</i>)
@@ -383,32 +346,6 @@
 bool
 </dd>
 </dl>
-<a NAME="AnnotationsChecker.__ignoreCode" ID="AnnotationsChecker.__ignoreCode"></a>
-<h4>AnnotationsChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="AnnotationsChecker.__returnErrorClassifier" ID="AnnotationsChecker.__returnErrorClassifier"></a>
 <h4>AnnotationsChecker.__returnErrorClassifier</h4>
 <b>__returnErrorClassifier</b>(<i>isClassMethod, classDecoratorType, functionType</i>)
@@ -443,13 +380,6 @@
 str
 </dd>
 </dl>
-<a NAME="AnnotationsChecker.run" ID="AnnotationsChecker.run"></a>
-<h4>AnnotationsChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against annotation issues.
-</p>
-
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Async.AsyncChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -38,9 +38,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -59,18 +60,6 @@
 <td><a href="#AsyncChecker.__checkSyncUses">__checkSyncUses</a></td>
 <td>Private method to check for use of synchroneous functions in async methods.</td>
 </tr>
-<tr>
-<td><a href="#AsyncChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
-<td><a href="#AsyncChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
-<td><a href="#AsyncChecker.run">run</a></td>
-<td>Public method to check the given source against miscellaneous conditions.</td>
-</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -128,66 +117,6 @@
         Private method to check for use of synchroneous functions in async methods.
 </p>
 
-<a NAME="AsyncChecker.__error" ID="AsyncChecker.__error"></a>
-<h4>AsyncChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
-<a NAME="AsyncChecker.__ignoreCode" ID="AsyncChecker.__ignoreCode"></a>
-<h4>AsyncChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="AsyncChecker.run" ID="AsyncChecker.run"></a>
-<h4>AsyncChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against miscellaneous
-        conditions.
-</p>
-
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -122,7 +122,7 @@
 </dl>
 <a NAME="CodeStyleCheckerReport.error_args" ID="CodeStyleCheckerReport.error_args"></a>
 <h4>CodeStyleCheckerReport.error_args</h4>
-<b>error_args</b>(<i>line_number, offset, errorCode, check, *args</i>)
+<b>error_args</b>(<i>line_number, offset, text, _check, *args</i>)
 <p>
         Public method to collect the error messages.
 </p>
@@ -137,11 +137,11 @@
 <dd>
 position within line of the issue
 </dd>
-<dt><i>errorCode</i> (str)</dt>
+<dt><i>text</i> (str)</dt>
 <dd>
-error message code
+issue message code or issue text
 </dd>
-<dt><i>check</i> (function)</dt>
+<dt><i>_check</i> (function)</dt>
 <dd>
 reference to the checker function
 </dd>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleCheckerDialog.html	Sat Mar 01 15:52:40 2025 +0100
@@ -74,14 +74,14 @@
 <td>Private method to assemble the list of excluded checks.</td>
 </tr>
 <tr>
+<td><a href="#CodeStyleCheckerDialog.__assembleIncludeMessages">__assembleIncludeMessages</a></td>
+<td>Private method to assemble the list of included checks.</td>
+</tr>
+<tr>
 <td><a href="#CodeStyleCheckerDialog.__batchFinished">__batchFinished</a></td>
 <td>Private slot handling the completion of a batch job.</td>
 </tr>
 <tr>
-<td><a href="#CodeStyleCheckerDialog.__cleanupData">__cleanupData</a></td>
-<td>Private method to clean the loaded/entered data of redundant entries.</td>
-</tr>
-<tr>
 <td><a href="#CodeStyleCheckerDialog.__clearErrors">__clearErrors</a></td>
 <td>Private method to clear all warning markers of open editors to be checked.</td>
 </tr>
@@ -154,6 +154,10 @@
 <td>Private method to check, if an item has a fixable issue.</td>
 </tr>
 <tr>
+<td><a href="#CodeStyleCheckerDialog.__migrateIssueCodes">__migrateIssueCodes</a></td>
+<td>Private method to migrate the issue codes to the form 'category'-'number'.</td>
+</tr>
+<tr>
 <td><a href="#CodeStyleCheckerDialog.__modifyFixedResultItem">__modifyFixedResultItem</a></td>
 <td>Private method to modify a result list entry to show its positive fixed state.</td>
 </tr>
@@ -367,6 +371,25 @@
 str
 </dd>
 </dl>
+<a NAME="CodeStyleCheckerDialog.__assembleIncludeMessages" ID="CodeStyleCheckerDialog.__assembleIncludeMessages"></a>
+<h4>CodeStyleCheckerDialog.__assembleIncludeMessages</h4>
+<b>__assembleIncludeMessages</b>(<i></i>)
+<p>
+        Private method to assemble the list of included checks.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+list of included checks as a comma separated string.
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
 <a NAME="CodeStyleCheckerDialog.__batchFinished" ID="CodeStyleCheckerDialog.__batchFinished"></a>
 <h4>CodeStyleCheckerDialog.__batchFinished</h4>
 <b>__batchFinished</b>(<i></i>)
@@ -374,13 +397,6 @@
         Private slot handling the completion of a batch job.
 </p>
 
-<a NAME="CodeStyleCheckerDialog.__cleanupData" ID="CodeStyleCheckerDialog.__cleanupData"></a>
-<h4>CodeStyleCheckerDialog.__cleanupData</h4>
-<b>__cleanupData</b>(<i></i>)
-<p>
-        Private method to clean the loaded/entered data of redundant entries.
-</p>
-
 <a NAME="CodeStyleCheckerDialog.__clearErrors" ID="CodeStyleCheckerDialog.__clearErrors"></a>
 <h4>CodeStyleCheckerDialog.__clearErrors</h4>
 <b>__clearErrors</b>(<i>files</i>)
@@ -727,6 +743,13 @@
 bool
 </dd>
 </dl>
+<a NAME="CodeStyleCheckerDialog.__migrateIssueCodes" ID="CodeStyleCheckerDialog.__migrateIssueCodes"></a>
+<h4>CodeStyleCheckerDialog.__migrateIssueCodes</h4>
+<b>__migrateIssueCodes</b>(<i></i>)
+<p>
+        Private method to migrate the issue codes to the form 'category'-'number'.
+</p>
+
 <a NAME="CodeStyleCheckerDialog.__modifyFixedResultItem" ID="CodeStyleCheckerDialog.__modifyFixedResultItem"></a>
 <h4>CodeStyleCheckerDialog.__modifyFixedResultItem</h4>
 <b>__modifyFixedResultItem</b>(<i>itm, result</i>)
@@ -753,7 +776,7 @@
         Private method to modify the options based on eflag: entries.
 </p>
 <p>
-        This method looks for comment lines like '# eflag: noqa = M601'
+        This method looks for comment lines like '# eflag: noqa = M-601'
         at the end of the source in order to extend the list of excluded
         messages for one file only.
 </p>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleFixer.html	Sat Mar 01 15:52:40 2025 +0100
@@ -1616,7 +1616,7 @@
         Private method to fix the long lines by breaking them.
 </p>
 <p>
-        Codes: E501
+        Codes: E-501
 </p>
 
 <dl>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,233 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker</h1>
+<p>
+Module implementing the topic checker base class containing common methods.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#CodeStyleTopicChecker">CodeStyleTopicChecker</a></td>
+<td>Class implementing the topic checker base class.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="CodeStyleTopicChecker" ID="CodeStyleTopicChecker"></a>
+<h2>CodeStyleTopicChecker</h2>
+<p>
+    Class implementing the topic checker base class.
+</p>
+
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#CodeStyleTopicChecker.__init__">CodeStyleTopicChecker</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#CodeStyleTopicChecker._ignoreCode">_ignoreCode</a></td>
+<td>Protected method to check if the message code should be ignored.</td>
+</tr>
+<tr>
+<td><a href="#CodeStyleTopicChecker._initializeCheckers">_initializeCheckers</a></td>
+<td>Protected method to determine the list of check methods to be run.</td>
+</tr>
+<tr>
+<td><a href="#CodeStyleTopicChecker.addError">addError</a></td>
+<td>Public method to record an issue.</td>
+</tr>
+<tr>
+<td><a href="#CodeStyleTopicChecker.addErrorFromNode">addErrorFromNode</a></td>
+<td>Public method to record an issue given the faulty ast node.</td>
+</tr>
+<tr>
+<td><a href="#CodeStyleTopicChecker.run">run</a></td>
+<td>Public method to execute the relevant checks.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="CodeStyleTopicChecker.__init__" ID="CodeStyleTopicChecker.__init__"></a>
+<h4>CodeStyleTopicChecker (Constructor)</h4>
+<b>CodeStyleTopicChecker</b>(<i>category, source, filename, tree, select, ignore, expected, repeat, args</i>)
+<p>
+        Constructor
+</p>
+
+<dl>
+
+<dt><i>category</i> (str)</dt>
+<dd>
+checker category code (one to three uppercase characters
+</dd>
+<dt><i>source</i> (list of str)</dt>
+<dd>
+source code to be checked
+</dd>
+<dt><i>filename</i> (str)</dt>
+<dd>
+name of the source file
+</dd>
+<dt><i>tree</i> (ast.Module)</dt>
+<dd>
+AST tree of the source code
+</dd>
+<dt><i>select</i> (list of str)</dt>
+<dd>
+list of selected codes
+</dd>
+<dt><i>ignore</i> (list of str)</dt>
+<dd>
+list of codes to be ignored
+</dd>
+<dt><i>expected</i> (list of str)</dt>
+<dd>
+list of expected codes
+</dd>
+<dt><i>repeat</i> (bool)</dt>
+<dd>
+flag indicating to report each occurrence of a code
+</dd>
+<dt><i>args</i> (dict)</dt>
+<dd>
+dictionary of arguments for the various checks
+</dd>
+</dl>
+<a NAME="CodeStyleTopicChecker._ignoreCode" ID="CodeStyleTopicChecker._ignoreCode"></a>
+<h4>CodeStyleTopicChecker._ignoreCode</h4>
+<b>_ignoreCode</b>(<i>code</i>)
+<p>
+        Protected method to check if the message code should be ignored.
+</p>
+
+<dl>
+
+<dt><i>code</i> (str)</dt>
+<dd>
+message code to check for
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating to ignore the given code
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="CodeStyleTopicChecker._initializeCheckers" ID="CodeStyleTopicChecker._initializeCheckers"></a>
+<h4>CodeStyleTopicChecker._initializeCheckers</h4>
+<b>_initializeCheckers</b>(<i>checkersWithCodes</i>)
+<p>
+        Protected method to determine the list of check methods to be run.
+</p>
+<p>
+        This list is determined considering the list if selected and ignored issue
+        codes.
+</p>
+
+<dl>
+
+<dt><i>checkersWithCodes</i> (TYPE)</dt>
+<dd>
+DESCRIPTION
+</dd>
+</dl>
+<a NAME="CodeStyleTopicChecker.addError" ID="CodeStyleTopicChecker.addError"></a>
+<h4>CodeStyleTopicChecker.addError</h4>
+<b>addError</b>(<i>lineNumber, offset, msgCode, *args</i>)
+<p>
+        Public method to record an issue.
+</p>
+
+<dl>
+
+<dt><i>lineNumber</i> (int)</dt>
+<dd>
+line number of the issue (one based)
+</dd>
+<dt><i>offset</i> (int)</dt>
+<dd>
+position within line of the issue
+</dd>
+<dt><i>msgCode</i> (str)</dt>
+<dd>
+message code
+</dd>
+<dt><i>args</i> (list)</dt>
+<dd>
+arguments for the message
+</dd>
+</dl>
+<a NAME="CodeStyleTopicChecker.addErrorFromNode" ID="CodeStyleTopicChecker.addErrorFromNode"></a>
+<h4>CodeStyleTopicChecker.addErrorFromNode</h4>
+<b>addErrorFromNode</b>(<i>node, msgCode, *args</i>)
+<p>
+        Public method to record an issue given the faulty ast node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node containing the issue
+</dd>
+<dt><i>msgCode</i> (str)</dt>
+<dd>
+message code
+</dd>
+<dt><i>args</i> (list)</dt>
+<dd>
+arguments for the message
+</dd>
+</dl>
+<a NAME="CodeStyleTopicChecker.run" ID="CodeStyleTopicChecker.run"></a>
+<h4>CodeStyleTopicChecker.run</h4>
+<b>run</b>(<i></i>)
+<p>
+        Public method to execute the relevant checks.
+</p>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Complexity.ComplexityChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -42,9 +42,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -67,18 +68,6 @@
 <td><a href="#ComplexityChecker.__checkMcCabeComplexity">__checkMcCabeComplexity</a></td>
 <td>Private method to check the McCabe code complexity.</td>
 </tr>
-<tr>
-<td><a href="#ComplexityChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
-<td><a href="#ComplexityChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
-<td><a href="#ComplexityChecker.run">run</a></td>
-<td>Public method to check the given source for code complexity.</td>
-</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -140,65 +129,6 @@
         Private method to check the McCabe code complexity.
 </p>
 
-<a NAME="ComplexityChecker.__error" ID="ComplexityChecker.__error"></a>
-<h4>ComplexityChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
-<a NAME="ComplexityChecker.__ignoreCode" ID="ComplexityChecker.__ignoreCode"></a>
-<h4>ComplexityChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="ComplexityChecker.run" ID="ComplexityChecker.run"></a>
-<h4>ComplexityChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source for code complexity.
-</p>
-
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.DocStyle.DocStyleChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -42,9 +42,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -180,10 +181,6 @@
 <td>Private method to check, that all docstrings are surrounded by triple double quotes.</td>
 </tr>
 <tr>
-<td><a href="#DocStyleChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
 <td><a href="#DocStyleChecker.__getArgNames">__getArgNames</a></td>
 <td>Private method to get the argument names of a function node.</td>
 </tr>
@@ -196,10 +193,6 @@
 <td>Private method to extract the summary lines.</td>
 </tr>
 <tr>
-<td><a href="#DocStyleChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the error code should be ignored.</td>
-</tr>
-<tr>
 <td><a href="#DocStyleChecker.__parseClasses">__parseClasses</a></td>
 <td>Private method to extract top-level classes.</td>
 </tr>
@@ -240,6 +233,10 @@
 <td>Private method to skip over an indented block of source code.</td>
 </tr>
 <tr>
+<td><a href="#DocStyleChecker.addError">addError</a></td>
+<td>Public method to record an issue.</td>
+</tr>
+<tr>
 <td><a href="#DocStyleChecker.run">run</a></td>
 <td>Public method to check the given source for violations of doc string conventions.</td>
 </tr>
@@ -865,32 +862,6 @@
 context of the docstring (unused)
 </dd>
 </dl>
-<a NAME="DocStyleChecker.__error" ID="DocStyleChecker.__error"></a>
-<h4>DocStyleChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
 <a NAME="DocStyleChecker.__getArgNames" ID="DocStyleChecker.__getArgNames"></a>
 <h4>DocStyleChecker.__getArgNames</h4>
 <b>__getArgNames</b>(<i>node</i>)
@@ -970,32 +941,6 @@
 int
 </dd>
 </dl>
-<a NAME="DocStyleChecker.__ignoreCode" ID="DocStyleChecker.__ignoreCode"></a>
-<h4>DocStyleChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the error code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="DocStyleChecker.__parseClasses" ID="DocStyleChecker.__parseClasses"></a>
 <h4>DocStyleChecker.__parseClasses</h4>
 <b>__parseClasses</b>(<i></i>)
@@ -1213,6 +1158,32 @@
 tuple
 </dd>
 </dl>
+<a NAME="DocStyleChecker.addError" ID="DocStyleChecker.addError"></a>
+<h4>DocStyleChecker.addError</h4>
+<b>addError</b>(<i>lineNumber, offset, msgCode, *args</i>)
+<p>
+        Public method to record an issue.
+</p>
+
+<dl>
+
+<dt><i>lineNumber</i> (int)</dt>
+<dd>
+line number of the issue (zero based)
+</dd>
+<dt><i>offset</i> (int)</dt>
+<dd>
+position within line of the issue
+</dd>
+<dt><i>msgCode</i> (str)</dt>
+<dd>
+message code
+</dd>
+<dt><i>args</i> (list)</dt>
+<dd>
+arguments for the message
+</dd>
+</dl>
 <a NAME="DocStyleChecker.run" ID="DocStyleChecker.run"></a>
 <h4>DocStyleChecker.run</h4>
 <b>run</b>(<i></i>)
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Imports.ImportsChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -38,9 +38,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -76,14 +77,6 @@
 <td>Private method to convert a pattern to a regex such that ".*" matches zero or more modules.</td>
 </tr>
 <tr>
-<td><a href="#ImportsChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
-<td><a href="#ImportsChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
 <td><a href="#ImportsChecker.__isModuleBanned">__isModuleBanned</a></td>
 <td>Private method to check, if the given module name banned.</td>
 </tr>
@@ -91,10 +84,6 @@
 <td><a href="#ImportsChecker.__tidyImports">__tidyImports</a></td>
 <td>Private method to check various other import related topics.</td>
 </tr>
-<tr>
-<td><a href="#ImportsChecker.run">run</a></td>
-<td>Public method to check the given source against miscellaneous conditions.</td>
-</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -221,58 +210,6 @@
 re.regex object
 </dd>
 </dl>
-<a NAME="ImportsChecker.__error" ID="ImportsChecker.__error"></a>
-<h4>ImportsChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
-<a NAME="ImportsChecker.__ignoreCode" ID="ImportsChecker.__ignoreCode"></a>
-<h4>ImportsChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="ImportsChecker.__isModuleBanned" ID="ImportsChecker.__isModuleBanned"></a>
 <h4>ImportsChecker.__isModuleBanned</h4>
 <b>__isModuleBanned</b>(<i>moduleName</i>)
@@ -306,14 +243,6 @@
         Private method to check various other import related topics.
 </p>
 
-<a NAME="ImportsChecker.run" ID="ImportsChecker.run"></a>
-<h4>ImportsChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against miscellaneous
-        conditions.
-</p>
-
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -38,9 +38,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -59,18 +60,6 @@
 <td><a href="#LoggingChecker.__checkLogging">__checkLogging</a></td>
 <td>Private method to check logging statements.</td>
 </tr>
-<tr>
-<td><a href="#LoggingChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
-<td><a href="#LoggingChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
-<td><a href="#LoggingChecker.run">run</a></td>
-<td>Public method to check the given source against miscellaneous conditions.</td>
-</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -128,66 +117,6 @@
         Private method to check logging statements.
 </p>
 
-<a NAME="LoggingChecker.__error" ID="LoggingChecker.__error"></a>
-<h4>LoggingChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
-<a NAME="LoggingChecker.__ignoreCode" ID="LoggingChecker.__ignoreCode"></a>
-<h4>LoggingChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="LoggingChecker.run" ID="LoggingChecker.run"></a>
-<h4>LoggingChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against miscellaneous
-        conditions.
-</p>
-
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Logging.LoggingVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -84,10 +84,6 @@
 <td>Private method to check, if the node is an Add with a non string argument.</td>
 </tr>
 <tr>
-<td><a href="#LoggingVisitor.__keywordPos">__keywordPos</a></td>
-<td>Private method determine line number and column offset of a given keyword node.</td>
-</tr>
-<tr>
 <td><a href="#LoggingVisitor.visit">visit</a></td>
 <td></td>
 </tr>
@@ -241,32 +237,6 @@
 bool
 </dd>
 </dl>
-<a NAME="LoggingVisitor.__keywordPos" ID="LoggingVisitor.__keywordPos"></a>
-<h4>LoggingVisitor.__keywordPos</h4>
-<b>__keywordPos</b>(<i>node</i>)
-<p>
-        Private method determine line number and column offset of a given keyword node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.keyword)</dt>
-<dd>
-reference to the keyword node
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-tuple containing the line number and the column offset
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-tuple of (int, int)
-</dd>
-</dl>
 <a NAME="LoggingVisitor.visit" ID="LoggingVisitor.visit"></a>
 <h4>LoggingVisitor.visit</h4>
 <b>visit</b>(<i></i>)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,2589 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor</h1>
+<p>
+Module implementing a visitor to check for various potential issues.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>BugBearContext</td></tr>
+<tr><td>BugbearImmutableCalls</td></tr>
+<tr><td>BugbearMutableCalls</td></tr>
+<tr><td>BugbearMutableComprehensions</td></tr>
+<tr><td>BugbearMutableLiterals</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#BugBearVisitor">BugBearVisitor</a></td>
+<td>Class implementing a node visitor to check for various topics.</td>
+</tr>
+<tr>
+<td><a href="#ExceptBaseExceptionVisitor">ExceptBaseExceptionVisitor</a></td>
+<td>Class to determine, if a 'BaseException' is re-raised.</td>
+</tr>
+<tr>
+<td><a href="#FunctionDefDefaultsVisitor">FunctionDefDefaultsVisitor</a></td>
+<td>Class used by M506, M508 and M539.</td>
+</tr>
+<tr>
+<td><a href="#M520NameFinder">M520NameFinder</a></td>
+<td>Class to extract a name out of a tree of nodes ignoring names defined within the local scope of a comprehension.</td>
+</tr>
+<tr>
+<td><a href="#M540CaughtException">M540CaughtException</a></td>
+<td>Class to hold the data for a caught exception.</td>
+</tr>
+<tr>
+<td><a href="#M541UnhandledKeyType">M541UnhandledKeyType</a></td>
+<td>Class to hold a dictionary key of a type that we do not check for duplicates.</td>
+</tr>
+<tr>
+<td><a href="#M541VariableKeyType">M541VariableKeyType</a></td>
+<td>Class to hold the name of a variable key type.</td>
+</tr>
+<tr>
+<td><a href="#M569Checker">M569Checker</a></td>
+<td>Class traversing a 'for' loop body to check for modifications to a loop's mutable iterable.</td>
+</tr>
+<tr>
+<td><a href="#NameFinder">NameFinder</a></td>
+<td>Class to extract a name out of a tree of nodes.</td>
+</tr>
+<tr>
+<td><a href="#NamedExprFinder">NamedExprFinder</a></td>
+<td>Class to extract names defined through an ast.NamedExpr.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#composeCallPath">composeCallPath</a></td>
+<td>Generator function to assemble the call path of a given node.</td>
+</tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="BugBearVisitor" ID="BugBearVisitor"></a>
+<h2>BugBearVisitor</h2>
+<p>
+    Class implementing a node visitor to check for various topics.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>CONTEXTFUL_NODES</td></tr>
+<tr><td>FUNCTION_NODES</td></tr>
+<tr><td>NodeWindowSize</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#BugBearVisitor.__init__">BugBearVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM505">__checkForM505</a></td>
+<td>Private method to check the use of *strip().</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM506_M508">__checkForM506_M508</a></td>
+<td>Private method to check the use of mutable literals, comprehensions and calls.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM507">__checkForM507</a></td>
+<td>Private method to check for unused loop variables.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM512">__checkForM512</a></td>
+<td>Private method to check for return/continue/break inside finally blocks.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM513_M514_M529_M530">__checkForM513_M514_M529_M530</a></td>
+<td>Private method to check various exception handler situations.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM515">__checkForM515</a></td>
+<td>Private method to check for pointless comparisons.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM516">__checkForM516</a></td>
+<td>Private method to check for raising a literal instead of an exception.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM517">__checkForM517</a></td>
+<td>Private method to check for use of the evil syntax 'with assertRaises(Exception): or 'with pytest.raises(Exception):'.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM518">__checkForM518</a></td>
+<td>Private method to check for useless expressions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM519">__checkForM519</a></td>
+<td>Private method to check for use of 'functools.lru_cache' or 'functools.cache'.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM520">__checkForM520</a></td>
+<td>Private method to check for a loop that modifies its iterable.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM521">__checkForM521</a></td>
+<td>Private method to check for use of an f-string as docstring.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM522">__checkForM522</a></td>
+<td>Private method to check for use of an f-string as docstring.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM523">__checkForM523</a></td>
+<td>Private method to check that functions (including lambdas) do not use loop variables.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM524_M527">__checkForM524_M527</a></td>
+<td>Private method to check for inheritance from abstract classes in abc and lack of any methods decorated with abstract*.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM525">__checkForM525</a></td>
+<td>Private method to check for exceptions being handled multiple times.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM526">__checkForM526</a></td>
+<td>Private method to check for Star-arg unpacking after keyword argument.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM528">__checkForM528</a></td>
+<td>Private method to check for warn without stacklevel.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM531">__checkForM531</a></td>
+<td>Private method to check that 'itertools.groupby' isn't iterated over more than once.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM532">__checkForM532</a></td>
+<td>Private method to check for possible unintentional typing annotation.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM533">__checkForM533</a></td>
+<td>Private method to check a set for duplicate items.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM534">__checkForM534</a></td>
+<td>Private method to check that re.sub/subn/split arguments flags/count/maxsplit are passed as keyword arguments.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM535">__checkForM535</a></td>
+<td>Private method to check that a static key isn't used in a dict comprehension.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM539">__checkForM539</a></td>
+<td>Private method to check for correct ContextVar usage.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM540AddNote">__checkForM540AddNote</a></td>
+<td>Private method to check add_note usage.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM540Usage">__checkForM540Usage</a></td>
+<td>Private method to check the usage of exceptions with added note.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM541">__checkForM541</a></td>
+<td>Private method to check for duplicate key value pairs in a dictionary literal.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkForM569">__checkForM569</a></td>
+<td>Private method to check for changes to a loop's mutable iterable.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__checkRedundantExcepthandlers">__checkRedundantExcepthandlers</a></td>
+<td>Private method to check for redundant exception types in an exception handler.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__childrenInScope">__childrenInScope</a></td>
+<td>Private method to get all child nodes in the given scope.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__flattenExcepthandler">__flattenExcepthandler</a></td>
+<td>Private method to flatten the list of exceptions handled by an except handler.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__getAssignedNames">__getAssignedNames</a></td>
+<td>Private method to get the names of a for loop.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__getDictCompLoopAndNamedExprVarNames">__getDictCompLoopAndNamedExprVarNames</a></td>
+<td>Private method to get the names of comprehension loop variables.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__getNamesFromTuple">__getNamesFromTuple</a></td>
+<td>Private method to get the names from an ast.Tuple node.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__inClassInit">__inClassInit</a></td>
+<td>Private method to check, if we are inside an '__init__' method.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__isIdentifier">__isIdentifier</a></td>
+<td>Private method to check if arg is a valid identifier.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__namesFromAssignments">__namesFromAssignments</a></td>
+<td>Private method to get names of an assignment.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__typesafeIssubclass">__typesafeIssubclass</a></td>
+<td>Private method implementing a type safe issubclass() function.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__walkList">__walkList</a></td>
+<td>Private method to walk a given list of nodes.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor._loop">_loop</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.check">check</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.convertToValue">convertToValue</a></td>
+<td>Function to extract the value of a given item.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.emptyBody">emptyBody</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.isAbcClass">isAbcClass</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.isAbstractDecorator">isAbstractDecorator</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.isOverload">isOverload</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.isStrOrEllipsis">isStrOrEllipsis</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.nodeStack">nodeStack</a></td>
+<td>Public method to get a reference to the most recent node stack.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.superwalk">superwalk</a></td>
+<td>Function to walk an AST node or a list of AST nodes.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.toNameStr">toNameStr</a></td>
+<td>Public method to turn Name and Attribute nodes to strings, handling any depth of attribute accesses.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit">visit</a></td>
+<td>Public method to traverse a given AST node.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_AnnAssign">visit_AnnAssign</a></td>
+<td>Public method to check annotated assign statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Assert">visit_Assert</a></td>
+<td>Public method to handle 'assert' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Assign">visit_Assign</a></td>
+<td>Public method to handle assignments.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_AsyncFor">visit_AsyncFor</a></td>
+<td>Public method to handle 'for' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
+<td>Public method to handle async function definitions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Call">visit_Call</a></td>
+<td>Public method to handle a function call.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_ClassDef">visit_ClassDef</a></td>
+<td>Public method to handle class definitions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Compare">visit_Compare</a></td>
+<td>Public method to handle comparison statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Dict">visit_Dict</a></td>
+<td>Public method to check a dictionary.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_DictComp">visit_DictComp</a></td>
+<td>Public method to handle dictionary comprehensions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_ExceptHandler">visit_ExceptHandler</a></td>
+<td>Public method to handle exception handlers.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_For">visit_For</a></td>
+<td>Public method to handle 'for' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_FunctionDef">visit_FunctionDef</a></td>
+<td>Public method to handle function definitions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_GeneratorExp">visit_GeneratorExp</a></td>
+<td>Public method to handle generator expressions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Import">visit_Import</a></td>
+<td>Public method to check imports.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_ImportFrom">visit_ImportFrom</a></td>
+<td>Public method to check from imports.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_JoinedStr">visit_JoinedStr</a></td>
+<td>Public method to handle f-string arguments.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_ListComp">visit_ListComp</a></td>
+<td>Public method to handle list comprehensions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Module">visit_Module</a></td>
+<td>Public method to handle a module node.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Raise">visit_Raise</a></td>
+<td>Public method to handle 'raise' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Return">visit_Return</a></td>
+<td>Public method to handle 'Return' nodes.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Set">visit_Set</a></td>
+<td>Public method to check a set.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_SetComp">visit_SetComp</a></td>
+<td>Public method to handle set comprehensions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Try">visit_Try</a></td>
+<td>Public method to handle 'try' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_TryStar">visit_TryStar</a></td>
+<td>Public method to handle 'except*' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_UAdd">visit_UAdd</a></td>
+<td>Public method to handle unary additions.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_While">visit_While</a></td>
+<td>Public method to handle 'while' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_With">visit_With</a></td>
+<td>Public method to handle 'with' statements.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_Yield">visit_Yield</a></td>
+<td>Public method to handle 'Yield' nodes.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.visit_YieldFrom">visit_YieldFrom</a></td>
+<td>Public method to handle 'YieldFrom' nodes.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="BugBearVisitor.__init__" ID="BugBearVisitor.__init__"></a>
+<h4>BugBearVisitor (Constructor)</h4>
+<b>BugBearVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="BugBearVisitor.__checkForM505" ID="BugBearVisitor.__checkForM505"></a>
+<h4>BugBearVisitor.__checkForM505</h4>
+<b>__checkForM505</b>(<i>node</i>)
+<p>
+        Private method to check the use of *strip().
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM506_M508" ID="BugBearVisitor.__checkForM506_M508"></a>
+<h4>BugBearVisitor.__checkForM506_M508</h4>
+<b>__checkForM506_M508</b>(<i>node</i>)
+<p>
+        Private method to check the use of mutable literals, comprehensions and calls.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AsyncFunctionDef or ast.FunctionDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM507" ID="BugBearVisitor.__checkForM507"></a>
+<h4>BugBearVisitor.__checkForM507</h4>
+<b>__checkForM507</b>(<i>node</i>)
+<p>
+        Private method to check for unused loop variables.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.For or ast.AsyncFor)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM512" ID="BugBearVisitor.__checkForM512"></a>
+<h4>BugBearVisitor.__checkForM512</h4>
+<b>__checkForM512</b>(<i>node</i>)
+<p>
+        Private method to check for return/continue/break inside finally blocks.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Try)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM513_M514_M529_M530" ID="BugBearVisitor.__checkForM513_M514_M529_M530"></a>
+<h4>BugBearVisitor.__checkForM513_M514_M529_M530</h4>
+<b>__checkForM513_M514_M529_M530</b>(<i>node</i>)
+<p>
+        Private method to check various exception handler situations.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ExceptHandler)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+list of exception handler names
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list of str
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM515" ID="BugBearVisitor.__checkForM515"></a>
+<h4>BugBearVisitor.__checkForM515</h4>
+<b>__checkForM515</b>(<i>node</i>)
+<p>
+        Private method to check for pointless comparisons.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Compare)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM516" ID="BugBearVisitor.__checkForM516"></a>
+<h4>BugBearVisitor.__checkForM516</h4>
+<b>__checkForM516</b>(<i>node</i>)
+<p>
+        Private method to check for raising a literal instead of an exception.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Raise)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM517" ID="BugBearVisitor.__checkForM517"></a>
+<h4>BugBearVisitor.__checkForM517</h4>
+<b>__checkForM517</b>(<i>node</i>)
+<p>
+        Private method to check for use of the evil syntax
+        'with assertRaises(Exception): or 'with pytest.raises(Exception):'.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.With)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM518" ID="BugBearVisitor.__checkForM518"></a>
+<h4>BugBearVisitor.__checkForM518</h4>
+<b>__checkForM518</b>(<i>node</i>)
+<p>
+        Private method to check for useless expressions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM519" ID="BugBearVisitor.__checkForM519"></a>
+<h4>BugBearVisitor.__checkForM519</h4>
+<b>__checkForM519</b>(<i>node</i>)
+<p>
+        Private method to check for use of 'functools.lru_cache' or 'functools.cache'.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM520" ID="BugBearVisitor.__checkForM520"></a>
+<h4>BugBearVisitor.__checkForM520</h4>
+<b>__checkForM520</b>(<i>node</i>)
+<p>
+        Private method to check for a loop that modifies its iterable.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.For or ast.AsyncFor)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM521" ID="BugBearVisitor.__checkForM521"></a>
+<h4>BugBearVisitor.__checkForM521</h4>
+<b>__checkForM521</b>(<i>node</i>)
+<p>
+        Private method to check for use of an f-string as docstring.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef or ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM522" ID="BugBearVisitor.__checkForM522"></a>
+<h4>BugBearVisitor.__checkForM522</h4>
+<b>__checkForM522</b>(<i>node</i>)
+<p>
+        Private method to check for use of an f-string as docstring.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.With)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM523" ID="BugBearVisitor.__checkForM523"></a>
+<h4>BugBearVisitor.__checkForM523</h4>
+<b>__checkForM523</b>(<i>loopNode</i>)
+<p>
+        Private method to check that functions (including lambdas) do not use loop
+        variables.
+</p>
+
+<dl>
+
+<dt><i>loopNode</i> (ast.For, ast.AsyncFor, ast.While, ast.ListComp, ast.SetComp,ast.DictComp,)</dt>
+<dd>
+reference to the node to be processed
+            or ast.GeneratorExp
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM524_M527" ID="BugBearVisitor.__checkForM524_M527"></a>
+<h4>BugBearVisitor.__checkForM524_M527</h4>
+<b>__checkForM524_M527</b>(<i>node</i>)
+<p>
+        Private method to check for inheritance from abstract classes in abc and lack of
+        any methods decorated with abstract*.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM525" ID="BugBearVisitor.__checkForM525"></a>
+<h4>BugBearVisitor.__checkForM525</h4>
+<b>__checkForM525</b>(<i>node</i>)
+<p>
+        Private method to check for exceptions being handled multiple times.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Try)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM526" ID="BugBearVisitor.__checkForM526"></a>
+<h4>BugBearVisitor.__checkForM526</h4>
+<b>__checkForM526</b>(<i>node</i>)
+<p>
+        Private method to check for Star-arg unpacking after keyword argument.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM528" ID="BugBearVisitor.__checkForM528"></a>
+<h4>BugBearVisitor.__checkForM528</h4>
+<b>__checkForM528</b>(<i>node</i>)
+<p>
+        Private method to check for warn without stacklevel.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM531" ID="BugBearVisitor.__checkForM531"></a>
+<h4>BugBearVisitor.__checkForM531</h4>
+<b>__checkForM531</b>(<i>loopNode</i>)
+<p>
+        Private method to check that 'itertools.groupby' isn't iterated over more than
+        once.
+</p>
+<p>
+        A warning is emitted when the generator returned by 'groupby()' is used
+        more than once inside a loop body or when it's used in a nested loop.
+</p>
+
+<dl>
+
+<dt><i>loopNode</i> (ast.For or ast.AsyncFor)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM532" ID="BugBearVisitor.__checkForM532"></a>
+<h4>BugBearVisitor.__checkForM532</h4>
+<b>__checkForM532</b>(<i>node</i>)
+<p>
+        Private method to check for possible unintentional typing annotation.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AnnAssign)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM533" ID="BugBearVisitor.__checkForM533"></a>
+<h4>BugBearVisitor.__checkForM533</h4>
+<b>__checkForM533</b>(<i>node</i>)
+<p>
+        Private method to check a set for duplicate items.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Set)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM534" ID="BugBearVisitor.__checkForM534"></a>
+<h4>BugBearVisitor.__checkForM534</h4>
+<b>__checkForM534</b>(<i>node</i>)
+<p>
+        Private method to check that re.sub/subn/split arguments flags/count/maxsplit
+        are passed as keyword arguments.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM535" ID="BugBearVisitor.__checkForM535"></a>
+<h4>BugBearVisitor.__checkForM535</h4>
+<b>__checkForM535</b>(<i>node</i>)
+<p>
+        Private method to check that a static key isn't used in a dict comprehension.
+</p>
+<p>
+        Record a warning if a likely unchanging key is used - either a constant,
+        or a variable that isn't coming from the generator expression.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.DictComp)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM539" ID="BugBearVisitor.__checkForM539"></a>
+<h4>BugBearVisitor.__checkForM539</h4>
+<b>__checkForM539</b>(<i>node</i>)
+<p>
+        Private method to check for correct ContextVar usage.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM540AddNote" ID="BugBearVisitor.__checkForM540AddNote"></a>
+<h4>BugBearVisitor.__checkForM540AddNote</h4>
+<b>__checkForM540AddNote</b>(<i>node</i>)
+<p>
+        Private method to check add_note usage.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Attribute)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM540Usage" ID="BugBearVisitor.__checkForM540Usage"></a>
+<h4>BugBearVisitor.__checkForM540Usage</h4>
+<b>__checkForM540Usage</b>(<i>node</i>)
+<p>
+        Private method to check the usage of exceptions with added note.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.expr or None)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM541" ID="BugBearVisitor.__checkForM541"></a>
+<h4>BugBearVisitor.__checkForM541</h4>
+<b>__checkForM541</b>(<i>node</i>)
+<p>
+        Private method to check for duplicate key value pairs in a dictionary literal.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Dict)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkForM569" ID="BugBearVisitor.__checkForM569"></a>
+<h4>BugBearVisitor.__checkForM569</h4>
+<b>__checkForM569</b>(<i>node</i>)
+<p>
+        Private method to check for changes to a loop's mutable iterable.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.For)</dt>
+<dd>
+loop node to be checked
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__checkRedundantExcepthandlers" ID="BugBearVisitor.__checkRedundantExcepthandlers"></a>
+<h4>BugBearVisitor.__checkRedundantExcepthandlers</h4>
+<b>__checkRedundantExcepthandlers</b>(<i>names, node, inTryStar</i>)
+<p>
+        Private method to check for redundant exception types in an exception handler.
+</p>
+
+<dl>
+
+<dt><i>names</i> (list of ast.Name)</dt>
+<dd>
+list of exception types to be checked
+</dd>
+<dt><i>node</i> (ast.ExceptionHandler)</dt>
+<dd>
+reference to the exception handler node
+</dd>
+<dt><i>inTryStar</i> (str)</dt>
+<dd>
+character indicating an 'except*' handler
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+tuple containing the error data
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+tuple of (ast.Node, str, str, str, str)
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__childrenInScope" ID="BugBearVisitor.__childrenInScope"></a>
+<h4>BugBearVisitor.__childrenInScope</h4>
+<b>__childrenInScope</b>(<i>node</i>)
+<p>
+        Private method to get all child nodes in the given scope.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+reference to a child node
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+ast.Node
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__flattenExcepthandler" ID="BugBearVisitor.__flattenExcepthandler"></a>
+<h4>BugBearVisitor.__flattenExcepthandler</h4>
+<b>__flattenExcepthandler</b>(<i>node</i>)
+<p>
+        Private method to flatten the list of exceptions handled by an except handler.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+reference to the exception type node
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+ast.Node
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__getAssignedNames" ID="BugBearVisitor.__getAssignedNames"></a>
+<h4>BugBearVisitor.__getAssignedNames</h4>
+<b>__getAssignedNames</b>(<i>loopNode</i>)
+<p>
+        Private method to get the names of a for loop.
+</p>
+
+<dl>
+
+<dt><i>loopNode</i> (ast.For)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+DESCRIPTION
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+TYPE
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" ID="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames"></a>
+<h4>BugBearVisitor.__getDictCompLoopAndNamedExprVarNames</h4>
+<b>__getDictCompLoopAndNamedExprVarNames</b>(<i>node</i>)
+<p>
+        Private method to get the names of comprehension loop variables.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.DictComp)</dt>
+<dd>
+ast node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+loop variable names
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__getNamesFromTuple" ID="BugBearVisitor.__getNamesFromTuple"></a>
+<h4>BugBearVisitor.__getNamesFromTuple</h4>
+<b>__getNamesFromTuple</b>(<i>node</i>)
+<p>
+        Private method to get the names from an ast.Tuple node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Tuple)</dt>
+<dd>
+ast node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+names
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__inClassInit" ID="BugBearVisitor.__inClassInit"></a>
+<h4>BugBearVisitor.__inClassInit</h4>
+<b>__inClassInit</b>(<i></i>)
+<p>
+        Private method to check, if we are inside an '__init__' method.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating being within the '__init__' method
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__isIdentifier" ID="BugBearVisitor.__isIdentifier"></a>
+<h4>BugBearVisitor.__isIdentifier</h4>
+<b>__isIdentifier</b>(<i>arg</i>)
+<p>
+        Private method to check if arg is a valid identifier.
+</p>
+<p>
+        See https://docs.python.org/2/reference/lexical_analysis.html#identifiers
+</p>
+
+<dl>
+
+<dt><i>arg</i> (ast.Node)</dt>
+<dd>
+reference to an argument node
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a valid identifier
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+TYPE
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__namesFromAssignments" ID="BugBearVisitor.__namesFromAssignments"></a>
+<h4>BugBearVisitor.__namesFromAssignments</h4>
+<b>__namesFromAssignments</b>(<i>assignTarget</i>)
+<p>
+        Private method to get names of an assignment.
+</p>
+
+<dl>
+
+<dt><i>assignTarget</i> (ast.Node)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+name of the assignment
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__typesafeIssubclass" ID="BugBearVisitor.__typesafeIssubclass"></a>
+<h4>BugBearVisitor.__typesafeIssubclass</h4>
+<b>__typesafeIssubclass</b>(<i>obj, classOrTuple</i>)
+<p>
+        Private method implementing a type safe issubclass() function.
+</p>
+
+<dl>
+
+<dt><i>obj</i> (Any)</dt>
+<dd>
+reference to the object to be tested
+</dd>
+<dt><i>classOrTuple</i> (type)</dt>
+<dd>
+type to check against
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a subclass
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="BugBearVisitor.__walkList" ID="BugBearVisitor.__walkList"></a>
+<h4>BugBearVisitor.__walkList</h4>
+<b>__walkList</b>(<i>nodes</i>)
+<p>
+        Private method to walk a given list of nodes.
+</p>
+
+<dl>
+
+<dt><i>nodes</i> (list of ast.Node)</dt>
+<dd>
+list of nodes to walk
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+node references as determined by the ast.walk() function
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+ast.Node
+</dd>
+</dl>
+<a NAME="BugBearVisitor._loop" ID="BugBearVisitor._loop"></a>
+<h4>BugBearVisitor._loop</h4>
+<b>_loop</b>(<i>badNodeTypes</i>)
+
+<a NAME="BugBearVisitor.check" ID="BugBearVisitor.check"></a>
+<h4>BugBearVisitor.check</h4>
+<b>check</b>(<i>paramName</i>)
+
+<a NAME="BugBearVisitor.convertToValue" ID="BugBearVisitor.convertToValue"></a>
+<h4>BugBearVisitor.convertToValue</h4>
+<b>convertToValue</b>(<i></i>)
+<p>
+            Function to extract the value of a given item.
+</p>
+
+<dl>
+
+<dt><i>item</i> (ast.Ast)</dt>
+<dd>
+node to extract value from
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+value of the node
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+Any
+</dd>
+</dl>
+<a NAME="BugBearVisitor.emptyBody" ID="BugBearVisitor.emptyBody"></a>
+<h4>BugBearVisitor.emptyBody</h4>
+<b>emptyBody</b>(<i></i>)
+
+<a NAME="BugBearVisitor.isAbcClass" ID="BugBearVisitor.isAbcClass"></a>
+<h4>BugBearVisitor.isAbcClass</h4>
+<b>isAbcClass</b>(<i>name="ABC"</i>)
+
+<a NAME="BugBearVisitor.isAbstractDecorator" ID="BugBearVisitor.isAbstractDecorator"></a>
+<h4>BugBearVisitor.isAbstractDecorator</h4>
+<b>isAbstractDecorator</b>(<i></i>)
+
+<a NAME="BugBearVisitor.isOverload" ID="BugBearVisitor.isOverload"></a>
+<h4>BugBearVisitor.isOverload</h4>
+<b>isOverload</b>(<i></i>)
+
+<a NAME="BugBearVisitor.isStrOrEllipsis" ID="BugBearVisitor.isStrOrEllipsis"></a>
+<h4>BugBearVisitor.isStrOrEllipsis</h4>
+<b>isStrOrEllipsis</b>(<i></i>)
+
+<a NAME="BugBearVisitor.nodeStack" ID="BugBearVisitor.nodeStack"></a>
+<h4>BugBearVisitor.nodeStack</h4>
+<b>nodeStack</b>(<i></i>)
+<p>
+        Public method to get a reference to the most recent node stack.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the most recent node stack
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+list
+</dd>
+</dl>
+<a NAME="BugBearVisitor.superwalk" ID="BugBearVisitor.superwalk"></a>
+<h4>BugBearVisitor.superwalk</h4>
+<b>superwalk</b>(<i></i>)
+<p>
+            Function to walk an AST node or a list of AST nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST or list[ast.AST])</dt>
+<dd>
+reference to the node or a list of nodes to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+next node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+ast.AST
+</dd>
+</dl>
+<a NAME="BugBearVisitor.toNameStr" ID="BugBearVisitor.toNameStr"></a>
+<h4>BugBearVisitor.toNameStr</h4>
+<b>toNameStr</b>(<i>node</i>)
+<p>
+        Public method to turn Name and Attribute nodes to strings, handling any
+        depth of attribute accesses.
+</p>
+<p>
+
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Name or ast.Attribute)</dt>
+<dd>
+reference to the node
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+string representation
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit" ID="BugBearVisitor.visit"></a>
+<h4>BugBearVisitor.visit</h4>
+<b>visit</b>(<i>node</i>)
+<p>
+        Public method to traverse a given AST node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+AST node to be traversed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_AnnAssign" ID="BugBearVisitor.visit_AnnAssign"></a>
+<h4>BugBearVisitor.visit_AnnAssign</h4>
+<b>visit_AnnAssign</b>(<i>node</i>)
+<p>
+        Public method to check annotated assign statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AnnAssign)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Assert" ID="BugBearVisitor.visit_Assert"></a>
+<h4>BugBearVisitor.visit_Assert</h4>
+<b>visit_Assert</b>(<i>node</i>)
+<p>
+        Public method to handle 'assert' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Assert)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Assign" ID="BugBearVisitor.visit_Assign"></a>
+<h4>BugBearVisitor.visit_Assign</h4>
+<b>visit_Assign</b>(<i>node</i>)
+<p>
+        Public method to handle assignments.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Assign)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_AsyncFor" ID="BugBearVisitor.visit_AsyncFor"></a>
+<h4>BugBearVisitor.visit_AsyncFor</h4>
+<b>visit_AsyncFor</b>(<i>node</i>)
+<p>
+        Public method to handle 'for' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AsyncFor)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_AsyncFunctionDef" ID="BugBearVisitor.visit_AsyncFunctionDef"></a>
+<h4>BugBearVisitor.visit_AsyncFunctionDef</h4>
+<b>visit_AsyncFunctionDef</b>(<i>node</i>)
+<p>
+        Public method to handle async function definitions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Call" ID="BugBearVisitor.visit_Call"></a>
+<h4>BugBearVisitor.visit_Call</h4>
+<b>visit_Call</b>(<i>node</i>)
+<p>
+        Public method to handle a function call.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_ClassDef" ID="BugBearVisitor.visit_ClassDef"></a>
+<h4>BugBearVisitor.visit_ClassDef</h4>
+<b>visit_ClassDef</b>(<i>node</i>)
+<p>
+        Public method to handle class definitions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Compare" ID="BugBearVisitor.visit_Compare"></a>
+<h4>BugBearVisitor.visit_Compare</h4>
+<b>visit_Compare</b>(<i>node</i>)
+<p>
+        Public method to handle comparison statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Compare)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Dict" ID="BugBearVisitor.visit_Dict"></a>
+<h4>BugBearVisitor.visit_Dict</h4>
+<b>visit_Dict</b>(<i>node</i>)
+<p>
+        Public method to check a dictionary.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Dict)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_DictComp" ID="BugBearVisitor.visit_DictComp"></a>
+<h4>BugBearVisitor.visit_DictComp</h4>
+<b>visit_DictComp</b>(<i>node</i>)
+<p>
+        Public method to handle dictionary comprehensions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.DictComp)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_ExceptHandler" ID="BugBearVisitor.visit_ExceptHandler"></a>
+<h4>BugBearVisitor.visit_ExceptHandler</h4>
+<b>visit_ExceptHandler</b>(<i>node</i>)
+<p>
+        Public method to handle exception handlers.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ExceptHandler)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_For" ID="BugBearVisitor.visit_For"></a>
+<h4>BugBearVisitor.visit_For</h4>
+<b>visit_For</b>(<i>node</i>)
+<p>
+        Public method to handle 'for' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.For)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_FunctionDef" ID="BugBearVisitor.visit_FunctionDef"></a>
+<h4>BugBearVisitor.visit_FunctionDef</h4>
+<b>visit_FunctionDef</b>(<i>node</i>)
+<p>
+        Public method to handle function definitions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_GeneratorExp" ID="BugBearVisitor.visit_GeneratorExp"></a>
+<h4>BugBearVisitor.visit_GeneratorExp</h4>
+<b>visit_GeneratorExp</b>(<i>node</i>)
+<p>
+        Public method to handle generator expressions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.GeneratorExp)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Import" ID="BugBearVisitor.visit_Import"></a>
+<h4>BugBearVisitor.visit_Import</h4>
+<b>visit_Import</b>(<i>node</i>)
+<p>
+        Public method to check imports.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Import)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_ImportFrom" ID="BugBearVisitor.visit_ImportFrom"></a>
+<h4>BugBearVisitor.visit_ImportFrom</h4>
+<b>visit_ImportFrom</b>(<i>node</i>)
+<p>
+        Public method to check from imports.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Import)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_JoinedStr" ID="BugBearVisitor.visit_JoinedStr"></a>
+<h4>BugBearVisitor.visit_JoinedStr</h4>
+<b>visit_JoinedStr</b>(<i>node</i>)
+<p>
+        Public method to handle f-string arguments.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.JoinedStr)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_ListComp" ID="BugBearVisitor.visit_ListComp"></a>
+<h4>BugBearVisitor.visit_ListComp</h4>
+<b>visit_ListComp</b>(<i>node</i>)
+<p>
+        Public method to handle list comprehensions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ListComp)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Module" ID="BugBearVisitor.visit_Module"></a>
+<h4>BugBearVisitor.visit_Module</h4>
+<b>visit_Module</b>(<i>node</i>)
+<p>
+        Public method to handle a module node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Module)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Raise" ID="BugBearVisitor.visit_Raise"></a>
+<h4>BugBearVisitor.visit_Raise</h4>
+<b>visit_Raise</b>(<i>node</i>)
+<p>
+        Public method to handle 'raise' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Raise)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Return" ID="BugBearVisitor.visit_Return"></a>
+<h4>BugBearVisitor.visit_Return</h4>
+<b>visit_Return</b>(<i>node</i>)
+<p>
+        Public method to handle 'Return' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Return)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Set" ID="BugBearVisitor.visit_Set"></a>
+<h4>BugBearVisitor.visit_Set</h4>
+<b>visit_Set</b>(<i>node</i>)
+<p>
+        Public method to check a set.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Set)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_SetComp" ID="BugBearVisitor.visit_SetComp"></a>
+<h4>BugBearVisitor.visit_SetComp</h4>
+<b>visit_SetComp</b>(<i>node</i>)
+<p>
+        Public method to handle set comprehensions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.SetComp)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Try" ID="BugBearVisitor.visit_Try"></a>
+<h4>BugBearVisitor.visit_Try</h4>
+<b>visit_Try</b>(<i>node</i>)
+<p>
+        Public method to handle 'try' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Try)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_TryStar" ID="BugBearVisitor.visit_TryStar"></a>
+<h4>BugBearVisitor.visit_TryStar</h4>
+<b>visit_TryStar</b>(<i>node</i>)
+<p>
+        Public method to handle 'except*' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.TryStar)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_UAdd" ID="BugBearVisitor.visit_UAdd"></a>
+<h4>BugBearVisitor.visit_UAdd</h4>
+<b>visit_UAdd</b>(<i>node</i>)
+<p>
+        Public method to handle unary additions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.UAdd)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_While" ID="BugBearVisitor.visit_While"></a>
+<h4>BugBearVisitor.visit_While</h4>
+<b>visit_While</b>(<i>node</i>)
+<p>
+        Public method to handle 'while' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.While)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_With" ID="BugBearVisitor.visit_With"></a>
+<h4>BugBearVisitor.visit_With</h4>
+<b>visit_With</b>(<i>node</i>)
+<p>
+        Public method to handle 'with' statements.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.With)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_Yield" ID="BugBearVisitor.visit_Yield"></a>
+<h4>BugBearVisitor.visit_Yield</h4>
+<b>visit_Yield</b>(<i>node</i>)
+<p>
+        Public method to handle 'Yield' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Yield)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="BugBearVisitor.visit_YieldFrom" ID="BugBearVisitor.visit_YieldFrom"></a>
+<h4>BugBearVisitor.visit_YieldFrom</h4>
+<b>visit_YieldFrom</b>(<i>node</i>)
+<p>
+        Public method to handle 'YieldFrom' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.YieldFrom)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="ExceptBaseExceptionVisitor" ID="ExceptBaseExceptionVisitor"></a>
+<h2>ExceptBaseExceptionVisitor</h2>
+<p>
+    Class to determine, if a 'BaseException' is re-raised.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#ExceptBaseExceptionVisitor.__init__">ExceptBaseExceptionVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#ExceptBaseExceptionVisitor.reRaised">reRaised</a></td>
+<td>Public method to check, if the exception is re-raised.</td>
+</tr>
+<tr>
+<td><a href="#ExceptBaseExceptionVisitor.visit_ExceptHandler">visit_ExceptHandler</a></td>
+<td>Public method to handle 'ExceptHandler' nodes.</td>
+</tr>
+<tr>
+<td><a href="#ExceptBaseExceptionVisitor.visit_Raise">visit_Raise</a></td>
+<td>Public method to handle 'Raise' nodes.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="ExceptBaseExceptionVisitor.__init__" ID="ExceptBaseExceptionVisitor.__init__"></a>
+<h4>ExceptBaseExceptionVisitor (Constructor)</h4>
+<b>ExceptBaseExceptionVisitor</b>(<i>exceptNode</i>)
+<p>
+        Constructor
+</p>
+
+<dl>
+
+<dt><i>exceptNode</i> (ast.ExceptHandler)</dt>
+<dd>
+exception node to be inspected
+</dd>
+</dl>
+<a NAME="ExceptBaseExceptionVisitor.reRaised" ID="ExceptBaseExceptionVisitor.reRaised"></a>
+<h4>ExceptBaseExceptionVisitor.reRaised</h4>
+<b>reRaised</b>(<i></i>)
+<p>
+        Public method to check, if the exception is re-raised.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a re-raised exception
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="ExceptBaseExceptionVisitor.visit_ExceptHandler" ID="ExceptBaseExceptionVisitor.visit_ExceptHandler"></a>
+<h4>ExceptBaseExceptionVisitor.visit_ExceptHandler</h4>
+<b>visit_ExceptHandler</b>(<i>node: ast.ExceptHandler</i>)
+<p>
+        Public method to handle 'ExceptHandler' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ExceptHandler)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="ExceptBaseExceptionVisitor.visit_Raise" ID="ExceptBaseExceptionVisitor.visit_Raise"></a>
+<h4>ExceptBaseExceptionVisitor.visit_Raise</h4>
+<b>visit_Raise</b>(<i>node</i>)
+<p>
+        Public method to handle 'Raise' nodes.
+</p>
+<p>
+        If we find a corresponding `raise` or `raise e` where e was from
+        `except BaseException as e:` then we mark re_raised as True and can
+        stop scanning.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Raise)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="FunctionDefDefaultsVisitor" ID="FunctionDefDefaultsVisitor"></a>
+<h2>FunctionDefDefaultsVisitor</h2>
+<p>
+    Class used by M506, M508 and M539.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#FunctionDefDefaultsVisitor.__init__">FunctionDefDefaultsVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension">__visitMutableLiteralOrComprehension</a></td>
+<td>Private method to flag mutable literals and comprehensions.</td>
+</tr>
+<tr>
+<td><a href="#FunctionDefDefaultsVisitor.visit">visit</a></td>
+<td>Public method to traverse an AST node or a list of AST nodes.</td>
+</tr>
+<tr>
+<td><a href="#FunctionDefDefaultsVisitor.visit_Call">visit_Call</a></td>
+<td>Public method to process Call nodes.</td>
+</tr>
+<tr>
+<td><a href="#FunctionDefDefaultsVisitor.visit_Lambda">visit_Lambda</a></td>
+<td>Public method to process Lambda nodes.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="FunctionDefDefaultsVisitor.__init__" ID="FunctionDefDefaultsVisitor.__init__"></a>
+<h4>FunctionDefDefaultsVisitor (Constructor)</h4>
+<b>FunctionDefDefaultsVisitor</b>(<i>errorCodeCalls, errorCodeLiterals, </i>)
+<p>
+        Constructor
+</p>
+
+<dl>
+
+<dt><i>errorCodeCalls</i> (str)</dt>
+<dd>
+error code for ast.Call nodes
+</dd>
+<dt><i>errorCodeLiterals</i> (str)</dt>
+<dd>
+error code for literal nodes
+</dd>
+</dl>
+<a NAME="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" ID="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension"></a>
+<h4>FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension</h4>
+<b>__visitMutableLiteralOrComprehension</b>(<i>node</i>)
+<p>
+        Private method to flag mutable literals and comprehensions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Dict, ast.List, ast.Set, ast.ListComp, ast.DictComp or ast.SetComp)</dt>
+<dd>
+AST node to be processed
+</dd>
+</dl>
+<a NAME="FunctionDefDefaultsVisitor.visit" ID="FunctionDefDefaultsVisitor.visit"></a>
+<h4>FunctionDefDefaultsVisitor.visit</h4>
+<b>visit</b>(<i>node</i>)
+<p>
+        Public method to traverse an AST node or a list of AST nodes.
+</p>
+<p>
+        This is an extended method that can also handle a list of AST nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST or list of ast.AST)</dt>
+<dd>
+AST node or list of AST nodes to be processed
+</dd>
+</dl>
+<a NAME="FunctionDefDefaultsVisitor.visit_Call" ID="FunctionDefDefaultsVisitor.visit_Call"></a>
+<h4>FunctionDefDefaultsVisitor.visit_Call</h4>
+<b>visit_Call</b>(<i>node</i>)
+<p>
+        Public method to process Call nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+AST node to be processed
+</dd>
+</dl>
+<a NAME="FunctionDefDefaultsVisitor.visit_Lambda" ID="FunctionDefDefaultsVisitor.visit_Lambda"></a>
+<h4>FunctionDefDefaultsVisitor.visit_Lambda</h4>
+<b>visit_Lambda</b>(<i>node</i>)
+<p>
+        Public method to process Lambda nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Lambda)</dt>
+<dd>
+AST node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="M520NameFinder" ID="M520NameFinder"></a>
+<h2>M520NameFinder</h2>
+<p>
+    Class to extract a name out of a tree of nodes ignoring names defined within the
+    local scope of a comprehension.
+</p>
+
+<h3>Derived from</h3>
+NameFinder
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#M520NameFinder.visit_DictComp">visit_DictComp</a></td>
+<td>Public method  to handle a dictionary comprehension.</td>
+</tr>
+<tr>
+<td><a href="#M520NameFinder.visit_GeneratorExp">visit_GeneratorExp</a></td>
+<td>Public method to handle a generator expressions.</td>
+</tr>
+<tr>
+<td><a href="#M520NameFinder.visit_Lambda">visit_Lambda</a></td>
+<td>Public method  to handle a Lambda function.</td>
+</tr>
+<tr>
+<td><a href="#M520NameFinder.visit_ListComp">visit_ListComp</a></td>
+<td>Public method  to handle a list comprehension.</td>
+</tr>
+<tr>
+<td><a href="#M520NameFinder.visit_comprehension">visit_comprehension</a></td>
+<td>Public method  to handle the 'for' of a comprehension.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="M520NameFinder.visit_DictComp" ID="M520NameFinder.visit_DictComp"></a>
+<h4>M520NameFinder.visit_DictComp</h4>
+<b>visit_DictComp</b>(<i>node</i>)
+<p>
+        Public method  to handle a dictionary comprehension.
+</p>
+
+<dl>
+
+<dt><i>node</i> (TYPE)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="M520NameFinder.visit_GeneratorExp" ID="M520NameFinder.visit_GeneratorExp"></a>
+<h4>M520NameFinder.visit_GeneratorExp</h4>
+<b>visit_GeneratorExp</b>(<i>node</i>)
+<p>
+        Public method to handle a generator expressions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.GeneratorExp)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="M520NameFinder.visit_Lambda" ID="M520NameFinder.visit_Lambda"></a>
+<h4>M520NameFinder.visit_Lambda</h4>
+<b>visit_Lambda</b>(<i>node</i>)
+<p>
+        Public method  to handle a Lambda function.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Lambda)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="M520NameFinder.visit_ListComp" ID="M520NameFinder.visit_ListComp"></a>
+<h4>M520NameFinder.visit_ListComp</h4>
+<b>visit_ListComp</b>(<i>node</i>)
+<p>
+        Public method  to handle a list comprehension.
+</p>
+
+<dl>
+
+<dt><i>node</i> (TYPE)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="M520NameFinder.visit_comprehension" ID="M520NameFinder.visit_comprehension"></a>
+<h4>M520NameFinder.visit_comprehension</h4>
+<b>visit_comprehension</b>(<i>node</i>)
+<p>
+        Public method  to handle the 'for' of a comprehension.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.comprehension)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="M540CaughtException" ID="M540CaughtException"></a>
+<h2>M540CaughtException</h2>
+<p>
+    Class to hold the data for a caught exception.
+</p>
+
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+<table>
+<tr><td>hasNote</td></tr>
+<tr><td>name</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="M541UnhandledKeyType" ID="M541UnhandledKeyType"></a>
+<h2>M541UnhandledKeyType</h2>
+<p>
+    Class to hold a dictionary key of a type that we do not check for duplicates.
+</p>
+
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="M541VariableKeyType" ID="M541VariableKeyType"></a>
+<h2>M541VariableKeyType</h2>
+<p>
+    Class to hold the name of a variable key type.
+</p>
+
+<h3>Derived from</h3>
+None
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#M541VariableKeyType.__init__">M541VariableKeyType</a></td>
+<td>Constructor</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="M541VariableKeyType.__init__" ID="M541VariableKeyType.__init__"></a>
+<h4>M541VariableKeyType (Constructor)</h4>
+<b>M541VariableKeyType</b>(<i>name</i>)
+<p>
+        Constructor
+</p>
+
+<dl>
+
+<dt><i>name</i> (str)</dt>
+<dd>
+name of the variable key type
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="M569Checker" ID="M569Checker"></a>
+<h2>M569Checker</h2>
+<p>
+    Class traversing a 'for' loop body to check for modifications to a loop's
+    mutable iterable.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>MUTATING_FUNCTIONS</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#M569Checker.__init__">M569Checker</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#M569Checker.visit">visit</a></td>
+<td>Public method to inspect an ast node.</td>
+</tr>
+<tr>
+<td><a href="#M569Checker.visit_Call">visit_Call</a></td>
+<td>Public method handling 'Call' nodes.</td>
+</tr>
+<tr>
+<td><a href="#M569Checker.visit_Delete">visit_Delete</a></td>
+<td>Public method handling 'Delete' nodes.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="M569Checker.__init__" ID="M569Checker.__init__"></a>
+<h4>M569Checker (Constructor)</h4>
+<b>M569Checker</b>(<i>name, bugbear</i>)
+<p>
+        Constructor
+</p>
+
+<dl>
+
+<dt><i>name</i> (str)</dt>
+<dd>
+name of the iterator
+</dd>
+<dt><i>bugbear</i> (BugBearVisitor)</dt>
+<dd>
+reference to the bugbear visitor
+</dd>
+</dl>
+<a NAME="M569Checker.visit" ID="M569Checker.visit"></a>
+<h4>M569Checker.visit</h4>
+<b>visit</b>(<i>node</i>)
+<p>
+        Public method to inspect an ast node.
+</p>
+<p>
+        Like super-visit but supports iteration over lists.
+</p>
+
+<dl>
+
+<dt><i>node</i> (TYPE)</dt>
+<dd>
+AST node to be traversed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the last processed node
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+ast.Node
+</dd>
+</dl>
+<a NAME="M569Checker.visit_Call" ID="M569Checker.visit_Call"></a>
+<h4>M569Checker.visit_Call</h4>
+<b>visit_Call</b>(<i>node</i>)
+<p>
+        Public method handling 'Call' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="M569Checker.visit_Delete" ID="M569Checker.visit_Delete"></a>
+<h4>M569Checker.visit_Delete</h4>
+<b>visit_Delete</b>(<i>node</i>)
+<p>
+        Public method handling 'Delete' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Delete)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="NameFinder" ID="NameFinder"></a>
+<h2>NameFinder</h2>
+<p>
+    Class to extract a name out of a tree of nodes.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#NameFinder.__init__">NameFinder</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#NameFinder.getNames">getNames</a></td>
+<td>Public method to return the extracted names and Name nodes.</td>
+</tr>
+<tr>
+<td><a href="#NameFinder.visit">visit</a></td>
+<td>Public method to traverse a given AST node.</td>
+</tr>
+<tr>
+<td><a href="#NameFinder.visit_Name">visit_Name</a></td>
+<td>Public method to handle 'Name' nodes.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="NameFinder.__init__" ID="NameFinder.__init__"></a>
+<h4>NameFinder (Constructor)</h4>
+<b>NameFinder</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="NameFinder.getNames" ID="NameFinder.getNames"></a>
+<h4>NameFinder.getNames</h4>
+<b>getNames</b>(<i></i>)
+<p>
+        Public method to return the extracted names and Name nodes.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the names as keys and the list of nodes
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="NameFinder.visit" ID="NameFinder.visit"></a>
+<h4>NameFinder.visit</h4>
+<b>visit</b>(<i>node</i>)
+<p>
+        Public method to traverse a given AST node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+AST node to be traversed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the last processed node
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+ast.Node
+</dd>
+</dl>
+<a NAME="NameFinder.visit_Name" ID="NameFinder.visit_Name"></a>
+<h4>NameFinder.visit_Name</h4>
+<b>visit_Name</b>(<i>node</i>)
+<p>
+        Public method to handle 'Name' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Name)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="NamedExprFinder" ID="NamedExprFinder"></a>
+<h2>NamedExprFinder</h2>
+<p>
+    Class to extract names defined through an ast.NamedExpr.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#NamedExprFinder.__init__">NamedExprFinder</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#NamedExprFinder.getNames">getNames</a></td>
+<td>Public method to return the extracted names and Name nodes.</td>
+</tr>
+<tr>
+<td><a href="#NamedExprFinder.visit">visit</a></td>
+<td>Public method to traverse a given AST node.</td>
+</tr>
+<tr>
+<td><a href="#NamedExprFinder.visit_NamedExpr">visit_NamedExpr</a></td>
+<td>Public method handling 'NamedExpr' nodes.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="NamedExprFinder.__init__" ID="NamedExprFinder.__init__"></a>
+<h4>NamedExprFinder (Constructor)</h4>
+<b>NamedExprFinder</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="NamedExprFinder.getNames" ID="NamedExprFinder.getNames"></a>
+<h4>NamedExprFinder.getNames</h4>
+<b>getNames</b>(<i></i>)
+<p>
+        Public method to return the extracted names and Name nodes.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the names as keys and the list of nodes
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="NamedExprFinder.visit" ID="NamedExprFinder.visit"></a>
+<h4>NamedExprFinder.visit</h4>
+<b>visit</b>(<i>node</i>)
+<p>
+        Public method to traverse a given AST node.
+</p>
+<p>
+        Like super-visit but supports iteration over lists.
+</p>
+
+<dl>
+
+<dt><i>node</i> (TYPE)</dt>
+<dd>
+AST node to be traversed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the last processed node
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+ast.Node
+</dd>
+</dl>
+<a NAME="NamedExprFinder.visit_NamedExpr" ID="NamedExprFinder.visit_NamedExpr"></a>
+<h4>NamedExprFinder.visit_NamedExpr</h4>
+<b>visit_NamedExpr</b>(<i>node: ast.NamedExpr</i>)
+<p>
+        Public method handling 'NamedExpr' nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.NamedExpr)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="composeCallPath" ID="composeCallPath"></a>
+<h2>composeCallPath</h2>
+<b>composeCallPath</b>(<i>node</i>)
+<p>
+    Generator function to assemble the call path of a given node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+node to assemble call path for
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+call path components
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor</h1>
+<p>
+Module implementing a node visitor to check datetime function calls.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#DateTimeVisitor">DateTimeVisitor</a></td>
+<td>Class implementing a node visitor to check datetime function calls.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="DateTimeVisitor" ID="DateTimeVisitor"></a>
+<h2>DateTimeVisitor</h2>
+<p>
+    Class implementing a node visitor to check datetime function calls.
+</p>
+<p>
+    Note: This class is modeled after flake8_datetimez v20.10.0 checker.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#DateTimeVisitor.__init__">DateTimeVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#DateTimeVisitor.__getFromKeywords">__getFromKeywords</a></td>
+<td>Private method to get a keyword node given its name.</td>
+</tr>
+<tr>
+<td><a href="#DateTimeVisitor.visit_Call">visit_Call</a></td>
+<td>Public method to handle a function call.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="DateTimeVisitor.__init__" ID="DateTimeVisitor.__init__"></a>
+<h4>DateTimeVisitor (Constructor)</h4>
+<b>DateTimeVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="DateTimeVisitor.__getFromKeywords" ID="DateTimeVisitor.__getFromKeywords"></a>
+<h4>DateTimeVisitor.__getFromKeywords</h4>
+<b>__getFromKeywords</b>(<i>keywords, name</i>)
+<p>
+        Private method to get a keyword node given its name.
+</p>
+
+<dl>
+
+<dt><i>keywords</i> (list of ast.AST)</dt>
+<dd>
+list of keyword argument nodes
+</dd>
+<dt><i>name</i> (str)</dt>
+<dd>
+name of the keyword node
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+keyword node
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+ast.AST
+</dd>
+</dl>
+<a NAME="DateTimeVisitor.visit_Call" ID="DateTimeVisitor.visit_Call"></a>
+<h4>DateTimeVisitor.visit_Call</h4>
+<b>visit_Call</b>(<i>node</i>)
+<p>
+        Public method to handle a function call.
+</p>
+<p>
+        Every datetime related function call is check for use of the naive
+        variant (i.e. use without TZ info).
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,249 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor</h1>
+<p>
+Module implementing a node visitor to check default match cases.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor">DefaultMatchCaseVisitor</a></td>
+<td>Class implementing a node visitor to check default match cases.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="DefaultMatchCaseVisitor" ID="DefaultMatchCaseVisitor"></a>
+<h2>DefaultMatchCaseVisitor</h2>
+<p>
+    Class implementing a node visitor to check default match cases.
+</p>
+<p>
+    Note: This class is modeled after flake8-spm v0.0.1.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor.__init__">DefaultMatchCaseVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor.__badNodes">__badNodes</a></td>
+<td>Private method to yield bad match nodes.</td>
+</tr>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor.__emptyMatchDefault">__emptyMatchDefault</a></td>
+<td>Private method to check for an empty default match case.</td>
+</tr>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor.__findBadNode">__findBadNode</a></td>
+<td>Private method returning a reference to the bad node of a case node.</td>
+</tr>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor.__lastStatementDoesNotRaise">__lastStatementDoesNotRaise</a></td>
+<td>Private method to check that the last case statement does not raise an exception.</td>
+</tr>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor.__returnPrecedesExceptionRaising">__returnPrecedesExceptionRaising</a></td>
+<td>Private method to check that no return precedes an exception raising.</td>
+</tr>
+<tr>
+<td><a href="#DefaultMatchCaseVisitor.visit_Match">visit_Match</a></td>
+<td>Public method to handle Match nodes.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="DefaultMatchCaseVisitor.__init__" ID="DefaultMatchCaseVisitor.__init__"></a>
+<h4>DefaultMatchCaseVisitor (Constructor)</h4>
+<b>DefaultMatchCaseVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="DefaultMatchCaseVisitor.__badNodes" ID="DefaultMatchCaseVisitor.__badNodes"></a>
+<h4>DefaultMatchCaseVisitor.__badNodes</h4>
+<b>__badNodes</b>(<i>node</i>)
+<p>
+        Private method to yield bad match nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Match)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+tuple containing a reference to bad match case node and the corresponding
+            issue code
+</dd>
+</dl>
+<dl>
+<dt>Yield Type:</dt>
+<dd>
+tyuple of (ast.AST, str)
+</dd>
+</dl>
+<a NAME="DefaultMatchCaseVisitor.__emptyMatchDefault" ID="DefaultMatchCaseVisitor.__emptyMatchDefault"></a>
+<h4>DefaultMatchCaseVisitor.__emptyMatchDefault</h4>
+<b>__emptyMatchDefault</b>(<i>case</i>)
+<p>
+        Private method to check for an empty default match case.
+</p>
+
+<dl>
+
+<dt><i>case</i> (ast.match_case)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating an empty default match case
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="DefaultMatchCaseVisitor.__findBadNode" ID="DefaultMatchCaseVisitor.__findBadNode"></a>
+<h4>DefaultMatchCaseVisitor.__findBadNode</h4>
+<b>__findBadNode</b>(<i>case</i>)
+<p>
+        Private method returning a reference to the bad node of a case node.
+</p>
+
+<dl>
+
+<dt><i>case</i> (ast.match_case)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+reference to the bad node
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+ast.AST
+</dd>
+</dl>
+<a NAME="DefaultMatchCaseVisitor.__lastStatementDoesNotRaise" ID="DefaultMatchCaseVisitor.__lastStatementDoesNotRaise"></a>
+<h4>DefaultMatchCaseVisitor.__lastStatementDoesNotRaise</h4>
+<b>__lastStatementDoesNotRaise</b>(<i>case</i>)
+<p>
+        Private method to check that the last case statement does not raise an
+        exception.
+</p>
+
+<dl>
+
+<dt><i>case</i> (ast.match_case)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the last case statement does not raise an
+            exception
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="DefaultMatchCaseVisitor.__returnPrecedesExceptionRaising" ID="DefaultMatchCaseVisitor.__returnPrecedesExceptionRaising"></a>
+<h4>DefaultMatchCaseVisitor.__returnPrecedesExceptionRaising</h4>
+<b>__returnPrecedesExceptionRaising</b>(<i>case</i>)
+<p>
+        Private method to check that no return precedes an exception raising.
+</p>
+
+<dl>
+
+<dt><i>case</i> (ast.match_case)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that a return precedes an exception raising
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="DefaultMatchCaseVisitor.visit_Match" ID="DefaultMatchCaseVisitor.visit_Match"></a>
+<h4>DefaultMatchCaseVisitor.visit_Match</h4>
+<b>visit_Match</b>(<i>node</i>)
+<p>
+        Public method to handle Match nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Match)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -13,76 +13,20 @@
 
 <h3>Global Attributes</h3>
 <table>
-<tr><td>BugBearContext</td></tr>
-<tr><td>BugbearImmutableCalls</td></tr>
-<tr><td>BugbearMutableCalls</td></tr>
-<tr><td>BugbearMutableComprehensions</td></tr>
-<tr><td>BugbearMutableLiterals</td></tr>
+<tr><td>None</td></tr>
 </table>
 
 <h3>Classes</h3>
 <table>
 <tr>
-<td><a href="#BugBearVisitor">BugBearVisitor</a></td>
-<td>Class implementing a node visitor to check for various topics.</td>
-</tr>
-<tr>
-<td><a href="#DateTimeVisitor">DateTimeVisitor</a></td>
-<td>Class implementing a node visitor to check datetime function calls.</td>
-</tr>
-<tr>
-<td><a href="#ExceptBaseExceptionVisitor">ExceptBaseExceptionVisitor</a></td>
-<td>Class to determine, if a 'BaseException' is re-raised.</td>
-</tr>
-<tr>
-<td><a href="#FunctionDefDefaultsVisitor">FunctionDefDefaultsVisitor</a></td>
-<td>Class used by M506, M508 and M539.</td>
-</tr>
-<tr>
-<td><a href="#M520NameFinder">M520NameFinder</a></td>
-<td>Class to extract a name out of a tree of nodes ignoring names defined within the local scope of a comprehension.</td>
-</tr>
-<tr>
-<td><a href="#M540CaughtException">M540CaughtException</a></td>
-<td>Class to hold the data for a caught exception.</td>
-</tr>
-<tr>
-<td><a href="#M569Checker">M569Checker</a></td>
-<td>Class traversing a 'for' loop body to check for modifications to a loop's mutable iterable.</td>
-</tr>
-<tr>
 <td><a href="#MiscellaneousChecker">MiscellaneousChecker</a></td>
 <td>Class implementing a checker for miscellaneous checks.</td>
 </tr>
-<tr>
-<td><a href="#NameFinder">NameFinder</a></td>
-<td>Class to extract a name out of a tree of nodes.</td>
-</tr>
-<tr>
-<td><a href="#NamedExprFinder">NamedExprFinder</a></td>
-<td>Class to extract names defined through an ast.NamedExpr.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor">ReturnVisitor</a></td>
-<td>Class implementing a node visitor to check return statements.</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor">SysVersionVisitor</a></td>
-<td>Class implementing a node visitor to check the use of sys.version and sys.version_info.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor">TextVisitor</a></td>
-<td>Class implementing a node visitor for bytes and str instances.</td>
-</tr>
 </table>
 
 <h3>Functions</h3>
 <table>
 <tr>
-<td><a href="#composeCallPath">composeCallPath</a></td>
-<td>Generator function to assemble the call path of a given node.</td>
-</tr>
-<tr>
 <td><a href="#pairwise">pairwise</a></td>
 <td></td>
 </tr>
@@ -90,2193 +34,6 @@
 
 <hr />
 <hr />
-<a NAME="BugBearVisitor" ID="BugBearVisitor"></a>
-<h2>BugBearVisitor</h2>
-<p>
-    Class implementing a node visitor to check for various topics.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>CONTEXTFUL_NODES</td></tr>
-<tr><td>FUNCTION_NODES</td></tr>
-<tr><td>NodeWindowSize</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#BugBearVisitor.__init__">BugBearVisitor</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM505">__checkForM505</a></td>
-<td>Private method to check the use of *strip().</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM506_M508">__checkForM506_M508</a></td>
-<td>Private method to check the use of mutable literals, comprehensions and calls.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM507">__checkForM507</a></td>
-<td>Private method to check for unused loop variables.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM512">__checkForM512</a></td>
-<td>Private method to check for return/continue/break inside finally blocks.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM513_M529_M530">__checkForM513_M529_M530</a></td>
-<td>Private method to check various exception handler situations.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM515">__checkForM515</a></td>
-<td>Private method to check for pointless comparisons.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM516">__checkForM516</a></td>
-<td>Private method to check for raising a literal instead of an exception.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM517">__checkForM517</a></td>
-<td>Private method to check for use of the evil syntax 'with assertRaises(Exception): or 'with pytest.raises(Exception):'.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM518">__checkForM518</a></td>
-<td>Private method to check for useless expressions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM519">__checkForM519</a></td>
-<td>Private method to check for use of 'functools.lru_cache' or 'functools.cache'.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM520">__checkForM520</a></td>
-<td>Private method to check for a loop that modifies its iterable.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM521">__checkForM521</a></td>
-<td>Private method to check for use of an f-string as docstring.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM522">__checkForM522</a></td>
-<td>Private method to check for use of an f-string as docstring.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM523">__checkForM523</a></td>
-<td>Private method to check that functions (including lambdas) do not use loop variables.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM524_M527">__checkForM524_M527</a></td>
-<td>Private method to check for inheritance from abstract classes in abc and lack of any methods decorated with abstract*.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM525">__checkForM525</a></td>
-<td>Private method to check for exceptions being handled multiple times.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM526">__checkForM526</a></td>
-<td>Private method to check for Star-arg unpacking after keyword argument.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM528">__checkForM528</a></td>
-<td>Private method to check for warn without stacklevel.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM531">__checkForM531</a></td>
-<td>Private method to check that 'itertools.groupby' isn't iterated over more than once.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM532">__checkForM532</a></td>
-<td>Private method to check for possible unintentional typing annotation.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM533">__checkForM533</a></td>
-<td>Private method to check a set for duplicate items.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM534">__checkForM534</a></td>
-<td>Private method to check that re.sub/subn/split arguments flags/count/maxsplit are passed as keyword arguments.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM535">__checkForM535</a></td>
-<td>Private method to check that a static key isn't used in a dict comprehension.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM539">__checkForM539</a></td>
-<td>Private method to check for correct ContextVar usage.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM540AddNote">__checkForM540AddNote</a></td>
-<td>Private method to check add_note usage.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM540Usage">__checkForM540Usage</a></td>
-<td>Private method to check the usage of exceptions with added note.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkForM569">__checkForM569</a></td>
-<td>Private method to check for changes to a loop's mutable iterable.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__checkRedundantExcepthandlers">__checkRedundantExcepthandlers</a></td>
-<td>Private method to check for redundant exception types in an exception handler.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__childrenInScope">__childrenInScope</a></td>
-<td>Private method to get all child nodes in the given scope.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__flattenExcepthandler">__flattenExcepthandler</a></td>
-<td>Private method to flatten the list of exceptions handled by an except handler.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__getAssignedNames">__getAssignedNames</a></td>
-<td>Private method to get the names of a for loop.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__getDictCompLoopAndNamedExprVarNames">__getDictCompLoopAndNamedExprVarNames</a></td>
-<td>Private method to get the names of comprehension loop variables.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__getNamesFromTuple">__getNamesFromTuple</a></td>
-<td>Private method to get the names from an ast.Tuple node.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__inClassInit">__inClassInit</a></td>
-<td>Private method to check, if we are inside an '__init__' method.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__isIdentifier">__isIdentifier</a></td>
-<td>Private method to check if arg is a valid identifier.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__namesFromAssignments">__namesFromAssignments</a></td>
-<td>Private method to get names of an assignment.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__typesafeIssubclass">__typesafeIssubclass</a></td>
-<td>Private method implementing a type safe issubclass() function.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.__walkList">__walkList</a></td>
-<td>Private method to walk a given list of nodes.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor._loop">_loop</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.check">check</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.emptyBody">emptyBody</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.isAbcClass">isAbcClass</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.isAbstractDecorator">isAbstractDecorator</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.isOverload">isOverload</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.isStrOrEllipsis">isStrOrEllipsis</a></td>
-<td></td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.nodeStack">nodeStack</a></td>
-<td>Public method to get a reference to the most recent node stack.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.superwalk">superwalk</a></td>
-<td>Function to walk an AST node or a list of AST nodes.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.toNameStr">toNameStr</a></td>
-<td>Public method to turn Name and Attribute nodes to strings, handling any depth of attribute accesses.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit">visit</a></td>
-<td>Public method to traverse a given AST node.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_AnnAssign">visit_AnnAssign</a></td>
-<td>Public method to check annotated assign statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Assert">visit_Assert</a></td>
-<td>Public method to handle 'assert' statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Assign">visit_Assign</a></td>
-<td>Public method to handle assignments.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_AsyncFor">visit_AsyncFor</a></td>
-<td>Public method to handle 'for' statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
-<td>Public method to handle async function definitions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Call">visit_Call</a></td>
-<td>Public method to handle a function call.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_ClassDef">visit_ClassDef</a></td>
-<td>Public method to handle class definitions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Compare">visit_Compare</a></td>
-<td>Public method to handle comparison statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_DictComp">visit_DictComp</a></td>
-<td>Public method to handle dictionary comprehensions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_ExceptHandler">visit_ExceptHandler</a></td>
-<td>Public method to handle exception handlers.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_For">visit_For</a></td>
-<td>Public method to handle 'for' statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_FunctionDef">visit_FunctionDef</a></td>
-<td>Public method to handle function definitions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_GeneratorExp">visit_GeneratorExp</a></td>
-<td>Public method to handle generator expressions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Import">visit_Import</a></td>
-<td>Public method to check imports.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_ImportFrom">visit_ImportFrom</a></td>
-<td>Public method to check from imports.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_JoinedStr">visit_JoinedStr</a></td>
-<td>Public method to handle f-string arguments.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_ListComp">visit_ListComp</a></td>
-<td>Public method to handle list comprehensions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Module">visit_Module</a></td>
-<td>Public method to handle a module node.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Raise">visit_Raise</a></td>
-<td>Public method to handle 'raise' statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Return">visit_Return</a></td>
-<td>Public method to handle 'Return' nodes.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Set">visit_Set</a></td>
-<td>Public method to check a set.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_SetComp">visit_SetComp</a></td>
-<td>Public method to handle set comprehensions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Try">visit_Try</a></td>
-<td>Public method to handle 'try' statements'.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_UAdd">visit_UAdd</a></td>
-<td>Public method to handle unary additions.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_While">visit_While</a></td>
-<td>Public method to handle 'while' statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_With">visit_With</a></td>
-<td>Public method to handle 'with' statements.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_Yield">visit_Yield</a></td>
-<td>Public method to handle 'Yield' nodes.</td>
-</tr>
-<tr>
-<td><a href="#BugBearVisitor.visit_YieldFrom">visit_YieldFrom</a></td>
-<td>Public method to handle 'YieldFrom' nodes.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="BugBearVisitor.__init__" ID="BugBearVisitor.__init__"></a>
-<h4>BugBearVisitor (Constructor)</h4>
-<b>BugBearVisitor</b>(<i></i>)
-<p>
-        Constructor
-</p>
-
-<a NAME="BugBearVisitor.__checkForM505" ID="BugBearVisitor.__checkForM505"></a>
-<h4>BugBearVisitor.__checkForM505</h4>
-<b>__checkForM505</b>(<i>node</i>)
-<p>
-        Private method to check the use of *strip().
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM506_M508" ID="BugBearVisitor.__checkForM506_M508"></a>
-<h4>BugBearVisitor.__checkForM506_M508</h4>
-<b>__checkForM506_M508</b>(<i>node</i>)
-<p>
-        Private method to check the use of mutable literals, comprehensions and calls.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AsyncFunctionDef or ast.FunctionDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM507" ID="BugBearVisitor.__checkForM507"></a>
-<h4>BugBearVisitor.__checkForM507</h4>
-<b>__checkForM507</b>(<i>node</i>)
-<p>
-        Private method to check for unused loop variables.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.For or ast.AsyncFor)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM512" ID="BugBearVisitor.__checkForM512"></a>
-<h4>BugBearVisitor.__checkForM512</h4>
-<b>__checkForM512</b>(<i>node</i>)
-<p>
-        Private method to check for return/continue/break inside finally blocks.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Try)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM513_M529_M530" ID="BugBearVisitor.__checkForM513_M529_M530"></a>
-<h4>BugBearVisitor.__checkForM513_M529_M530</h4>
-<b>__checkForM513_M529_M530</b>(<i>node</i>)
-<p>
-        Private method to check various exception handler situations.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ExceptHandler)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-list of exception handler names
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-list of str
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM515" ID="BugBearVisitor.__checkForM515"></a>
-<h4>BugBearVisitor.__checkForM515</h4>
-<b>__checkForM515</b>(<i>node</i>)
-<p>
-        Private method to check for pointless comparisons.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Compare)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM516" ID="BugBearVisitor.__checkForM516"></a>
-<h4>BugBearVisitor.__checkForM516</h4>
-<b>__checkForM516</b>(<i>node</i>)
-<p>
-        Private method to check for raising a literal instead of an exception.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Raise)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM517" ID="BugBearVisitor.__checkForM517"></a>
-<h4>BugBearVisitor.__checkForM517</h4>
-<b>__checkForM517</b>(<i>node</i>)
-<p>
-        Private method to check for use of the evil syntax
-        'with assertRaises(Exception): or 'with pytest.raises(Exception):'.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.With)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM518" ID="BugBearVisitor.__checkForM518"></a>
-<h4>BugBearVisitor.__checkForM518</h4>
-<b>__checkForM518</b>(<i>node</i>)
-<p>
-        Private method to check for useless expressions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM519" ID="BugBearVisitor.__checkForM519"></a>
-<h4>BugBearVisitor.__checkForM519</h4>
-<b>__checkForM519</b>(<i>node</i>)
-<p>
-        Private method to check for use of 'functools.lru_cache' or 'functools.cache'.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM520" ID="BugBearVisitor.__checkForM520"></a>
-<h4>BugBearVisitor.__checkForM520</h4>
-<b>__checkForM520</b>(<i>node</i>)
-<p>
-        Private method to check for a loop that modifies its iterable.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.For or ast.AsyncFor)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM521" ID="BugBearVisitor.__checkForM521"></a>
-<h4>BugBearVisitor.__checkForM521</h4>
-<b>__checkForM521</b>(<i>node</i>)
-<p>
-        Private method to check for use of an f-string as docstring.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef or ast.ClassDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM522" ID="BugBearVisitor.__checkForM522"></a>
-<h4>BugBearVisitor.__checkForM522</h4>
-<b>__checkForM522</b>(<i>node</i>)
-<p>
-        Private method to check for use of an f-string as docstring.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.With)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM523" ID="BugBearVisitor.__checkForM523"></a>
-<h4>BugBearVisitor.__checkForM523</h4>
-<b>__checkForM523</b>(<i>loopNode</i>)
-<p>
-        Private method to check that functions (including lambdas) do not use loop
-        variables.
-</p>
-
-<dl>
-
-<dt><i>loopNode</i> (ast.For, ast.AsyncFor, ast.While, ast.ListComp, ast.SetComp,ast.DictComp,)</dt>
-<dd>
-reference to the node to be processed
-            or ast.GeneratorExp
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM524_M527" ID="BugBearVisitor.__checkForM524_M527"></a>
-<h4>BugBearVisitor.__checkForM524_M527</h4>
-<b>__checkForM524_M527</b>(<i>node</i>)
-<p>
-        Private method to check for inheritance from abstract classes in abc and lack of
-        any methods decorated with abstract*.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ClassDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM525" ID="BugBearVisitor.__checkForM525"></a>
-<h4>BugBearVisitor.__checkForM525</h4>
-<b>__checkForM525</b>(<i>node</i>)
-<p>
-        Private method to check for exceptions being handled multiple times.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Try)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM526" ID="BugBearVisitor.__checkForM526"></a>
-<h4>BugBearVisitor.__checkForM526</h4>
-<b>__checkForM526</b>(<i>node</i>)
-<p>
-        Private method to check for Star-arg unpacking after keyword argument.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM528" ID="BugBearVisitor.__checkForM528"></a>
-<h4>BugBearVisitor.__checkForM528</h4>
-<b>__checkForM528</b>(<i>node</i>)
-<p>
-        Private method to check for warn without stacklevel.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM531" ID="BugBearVisitor.__checkForM531"></a>
-<h4>BugBearVisitor.__checkForM531</h4>
-<b>__checkForM531</b>(<i>loopNode</i>)
-<p>
-        Private method to check that 'itertools.groupby' isn't iterated over more than
-        once.
-</p>
-<p>
-        A warning is emitted when the generator returned by 'groupby()' is used
-        more than once inside a loop body or when it's used in a nested loop.
-</p>
-
-<dl>
-
-<dt><i>loopNode</i> (ast.For or ast.AsyncFor)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM532" ID="BugBearVisitor.__checkForM532"></a>
-<h4>BugBearVisitor.__checkForM532</h4>
-<b>__checkForM532</b>(<i>node</i>)
-<p>
-        Private method to check for possible unintentional typing annotation.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AnnAssign)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM533" ID="BugBearVisitor.__checkForM533"></a>
-<h4>BugBearVisitor.__checkForM533</h4>
-<b>__checkForM533</b>(<i>node</i>)
-<p>
-        Private method to check a set for duplicate items.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Set)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM534" ID="BugBearVisitor.__checkForM534"></a>
-<h4>BugBearVisitor.__checkForM534</h4>
-<b>__checkForM534</b>(<i>node</i>)
-<p>
-        Private method to check that re.sub/subn/split arguments flags/count/maxsplit
-        are passed as keyword arguments.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM535" ID="BugBearVisitor.__checkForM535"></a>
-<h4>BugBearVisitor.__checkForM535</h4>
-<b>__checkForM535</b>(<i>node</i>)
-<p>
-        Private method to check that a static key isn't used in a dict comprehension.
-</p>
-<p>
-        Record a warning if a likely unchanging key is used - either a constant,
-        or a variable that isn't coming from the generator expression.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.DictComp)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM539" ID="BugBearVisitor.__checkForM539"></a>
-<h4>BugBearVisitor.__checkForM539</h4>
-<b>__checkForM539</b>(<i>node</i>)
-<p>
-        Private method to check for correct ContextVar usage.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM540AddNote" ID="BugBearVisitor.__checkForM540AddNote"></a>
-<h4>BugBearVisitor.__checkForM540AddNote</h4>
-<b>__checkForM540AddNote</b>(<i>node</i>)
-<p>
-        Private method to check add_note usage.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Attribute)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM540Usage" ID="BugBearVisitor.__checkForM540Usage"></a>
-<h4>BugBearVisitor.__checkForM540Usage</h4>
-<b>__checkForM540Usage</b>(<i>node</i>)
-<p>
-        Private method to check the usage of exceptions with added note.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.expr or None)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkForM569" ID="BugBearVisitor.__checkForM569"></a>
-<h4>BugBearVisitor.__checkForM569</h4>
-<b>__checkForM569</b>(<i>node</i>)
-<p>
-        Private method to check for changes to a loop's mutable iterable.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.For)</dt>
-<dd>
-loop node to be checked
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__checkRedundantExcepthandlers" ID="BugBearVisitor.__checkRedundantExcepthandlers"></a>
-<h4>BugBearVisitor.__checkRedundantExcepthandlers</h4>
-<b>__checkRedundantExcepthandlers</b>(<i>names, node</i>)
-<p>
-        Private method to check for redundant exception types in an exception handler.
-</p>
-
-<dl>
-
-<dt><i>names</i> (list of ast.Name)</dt>
-<dd>
-list of exception types to be checked
-</dd>
-<dt><i>node</i> (ast.ExceptionHandler)</dt>
-<dd>
-reference to the exception handler node
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-tuple containing the error data
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-tuple of (ast.Node, str, str, str, str)
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__childrenInScope" ID="BugBearVisitor.__childrenInScope"></a>
-<h4>BugBearVisitor.__childrenInScope</h4>
-<b>__childrenInScope</b>(<i>node</i>)
-<p>
-        Private method to get all child nodes in the given scope.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Node)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-reference to a child node
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-ast.Node
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__flattenExcepthandler" ID="BugBearVisitor.__flattenExcepthandler"></a>
-<h4>BugBearVisitor.__flattenExcepthandler</h4>
-<b>__flattenExcepthandler</b>(<i>node</i>)
-<p>
-        Private method to flatten the list of exceptions handled by an except handler.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Node)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-reference to the exception type node
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-ast.Node
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__getAssignedNames" ID="BugBearVisitor.__getAssignedNames"></a>
-<h4>BugBearVisitor.__getAssignedNames</h4>
-<b>__getAssignedNames</b>(<i>loopNode</i>)
-<p>
-        Private method to get the names of a for loop.
-</p>
-
-<dl>
-
-<dt><i>loopNode</i> (ast.For)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-DESCRIPTION
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-TYPE
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames" ID="BugBearVisitor.__getDictCompLoopAndNamedExprVarNames"></a>
-<h4>BugBearVisitor.__getDictCompLoopAndNamedExprVarNames</h4>
-<b>__getDictCompLoopAndNamedExprVarNames</b>(<i>node</i>)
-<p>
-        Private method to get the names of comprehension loop variables.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.DictComp)</dt>
-<dd>
-ast node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-loop variable names
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-str
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__getNamesFromTuple" ID="BugBearVisitor.__getNamesFromTuple"></a>
-<h4>BugBearVisitor.__getNamesFromTuple</h4>
-<b>__getNamesFromTuple</b>(<i>node</i>)
-<p>
-        Private method to get the names from an ast.Tuple node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Tuple)</dt>
-<dd>
-ast node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-names
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-str
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__inClassInit" ID="BugBearVisitor.__inClassInit"></a>
-<h4>BugBearVisitor.__inClassInit</h4>
-<b>__inClassInit</b>(<i></i>)
-<p>
-        Private method to check, if we are inside an '__init__' method.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating being within the '__init__' method
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__isIdentifier" ID="BugBearVisitor.__isIdentifier"></a>
-<h4>BugBearVisitor.__isIdentifier</h4>
-<b>__isIdentifier</b>(<i>arg</i>)
-<p>
-        Private method to check if arg is a valid identifier.
-</p>
-<p>
-        See https://docs.python.org/2/reference/lexical_analysis.html#identifiers
-</p>
-
-<dl>
-
-<dt><i>arg</i> (ast.Node)</dt>
-<dd>
-reference to an argument node
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a valid identifier
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-TYPE
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__namesFromAssignments" ID="BugBearVisitor.__namesFromAssignments"></a>
-<h4>BugBearVisitor.__namesFromAssignments</h4>
-<b>__namesFromAssignments</b>(<i>assignTarget</i>)
-<p>
-        Private method to get names of an assignment.
-</p>
-
-<dl>
-
-<dt><i>assignTarget</i> (ast.Node)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-name of the assignment
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-str
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__typesafeIssubclass" ID="BugBearVisitor.__typesafeIssubclass"></a>
-<h4>BugBearVisitor.__typesafeIssubclass</h4>
-<b>__typesafeIssubclass</b>(<i>obj, classOrTuple</i>)
-<p>
-        Private method implementing a type safe issubclass() function.
-</p>
-
-<dl>
-
-<dt><i>obj</i> (Any)</dt>
-<dd>
-reference to the object to be tested
-</dd>
-<dt><i>classOrTuple</i> (type)</dt>
-<dd>
-type to check against
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a subclass
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="BugBearVisitor.__walkList" ID="BugBearVisitor.__walkList"></a>
-<h4>BugBearVisitor.__walkList</h4>
-<b>__walkList</b>(<i>nodes</i>)
-<p>
-        Private method to walk a given list of nodes.
-</p>
-
-<dl>
-
-<dt><i>nodes</i> (list of ast.Node)</dt>
-<dd>
-list of nodes to walk
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-node references as determined by the ast.walk() function
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-ast.Node
-</dd>
-</dl>
-<a NAME="BugBearVisitor._loop" ID="BugBearVisitor._loop"></a>
-<h4>BugBearVisitor._loop</h4>
-<b>_loop</b>(<i>badNodeTypes</i>)
-
-<a NAME="BugBearVisitor.check" ID="BugBearVisitor.check"></a>
-<h4>BugBearVisitor.check</h4>
-<b>check</b>(<i>paramName</i>)
-
-<a NAME="BugBearVisitor.emptyBody" ID="BugBearVisitor.emptyBody"></a>
-<h4>BugBearVisitor.emptyBody</h4>
-<b>emptyBody</b>(<i></i>)
-
-<a NAME="BugBearVisitor.isAbcClass" ID="BugBearVisitor.isAbcClass"></a>
-<h4>BugBearVisitor.isAbcClass</h4>
-<b>isAbcClass</b>(<i>name="ABC"</i>)
-
-<a NAME="BugBearVisitor.isAbstractDecorator" ID="BugBearVisitor.isAbstractDecorator"></a>
-<h4>BugBearVisitor.isAbstractDecorator</h4>
-<b>isAbstractDecorator</b>(<i></i>)
-
-<a NAME="BugBearVisitor.isOverload" ID="BugBearVisitor.isOverload"></a>
-<h4>BugBearVisitor.isOverload</h4>
-<b>isOverload</b>(<i></i>)
-
-<a NAME="BugBearVisitor.isStrOrEllipsis" ID="BugBearVisitor.isStrOrEllipsis"></a>
-<h4>BugBearVisitor.isStrOrEllipsis</h4>
-<b>isStrOrEllipsis</b>(<i></i>)
-
-<a NAME="BugBearVisitor.nodeStack" ID="BugBearVisitor.nodeStack"></a>
-<h4>BugBearVisitor.nodeStack</h4>
-<b>nodeStack</b>(<i></i>)
-<p>
-        Public method to get a reference to the most recent node stack.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-reference to the most recent node stack
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-list
-</dd>
-</dl>
-<a NAME="BugBearVisitor.superwalk" ID="BugBearVisitor.superwalk"></a>
-<h4>BugBearVisitor.superwalk</h4>
-<b>superwalk</b>(<i></i>)
-<p>
-            Function to walk an AST node or a list of AST nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST or list[ast.AST])</dt>
-<dd>
-reference to the node or a list of nodes to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-next node to be processed
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-ast.AST
-</dd>
-</dl>
-<a NAME="BugBearVisitor.toNameStr" ID="BugBearVisitor.toNameStr"></a>
-<h4>BugBearVisitor.toNameStr</h4>
-<b>toNameStr</b>(<i>node</i>)
-<p>
-        Public method to turn Name and Attribute nodes to strings, handling any
-        depth of attribute accesses.
-</p>
-<p>
-
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Name or ast.Attribute)</dt>
-<dd>
-reference to the node
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-string representation
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-str
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit" ID="BugBearVisitor.visit"></a>
-<h4>BugBearVisitor.visit</h4>
-<b>visit</b>(<i>node</i>)
-<p>
-        Public method to traverse a given AST node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Node)</dt>
-<dd>
-AST node to be traversed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_AnnAssign" ID="BugBearVisitor.visit_AnnAssign"></a>
-<h4>BugBearVisitor.visit_AnnAssign</h4>
-<b>visit_AnnAssign</b>(<i>node</i>)
-<p>
-        Public method to check annotated assign statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AnnAssign)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Assert" ID="BugBearVisitor.visit_Assert"></a>
-<h4>BugBearVisitor.visit_Assert</h4>
-<b>visit_Assert</b>(<i>node</i>)
-<p>
-        Public method to handle 'assert' statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Assert)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Assign" ID="BugBearVisitor.visit_Assign"></a>
-<h4>BugBearVisitor.visit_Assign</h4>
-<b>visit_Assign</b>(<i>node</i>)
-<p>
-        Public method to handle assignments.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Assign)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_AsyncFor" ID="BugBearVisitor.visit_AsyncFor"></a>
-<h4>BugBearVisitor.visit_AsyncFor</h4>
-<b>visit_AsyncFor</b>(<i>node</i>)
-<p>
-        Public method to handle 'for' statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AsyncFor)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_AsyncFunctionDef" ID="BugBearVisitor.visit_AsyncFunctionDef"></a>
-<h4>BugBearVisitor.visit_AsyncFunctionDef</h4>
-<b>visit_AsyncFunctionDef</b>(<i>node</i>)
-<p>
-        Public method to handle async function definitions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Call" ID="BugBearVisitor.visit_Call"></a>
-<h4>BugBearVisitor.visit_Call</h4>
-<b>visit_Call</b>(<i>node</i>)
-<p>
-        Public method to handle a function call.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_ClassDef" ID="BugBearVisitor.visit_ClassDef"></a>
-<h4>BugBearVisitor.visit_ClassDef</h4>
-<b>visit_ClassDef</b>(<i>node</i>)
-<p>
-        Public method to handle class definitions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ClassDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Compare" ID="BugBearVisitor.visit_Compare"></a>
-<h4>BugBearVisitor.visit_Compare</h4>
-<b>visit_Compare</b>(<i>node</i>)
-<p>
-        Public method to handle comparison statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Compare)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_DictComp" ID="BugBearVisitor.visit_DictComp"></a>
-<h4>BugBearVisitor.visit_DictComp</h4>
-<b>visit_DictComp</b>(<i>node</i>)
-<p>
-        Public method to handle dictionary comprehensions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.DictComp)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_ExceptHandler" ID="BugBearVisitor.visit_ExceptHandler"></a>
-<h4>BugBearVisitor.visit_ExceptHandler</h4>
-<b>visit_ExceptHandler</b>(<i>node</i>)
-<p>
-        Public method to handle exception handlers.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ExceptHandler)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_For" ID="BugBearVisitor.visit_For"></a>
-<h4>BugBearVisitor.visit_For</h4>
-<b>visit_For</b>(<i>node</i>)
-<p>
-        Public method to handle 'for' statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.For)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_FunctionDef" ID="BugBearVisitor.visit_FunctionDef"></a>
-<h4>BugBearVisitor.visit_FunctionDef</h4>
-<b>visit_FunctionDef</b>(<i>node</i>)
-<p>
-        Public method to handle function definitions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_GeneratorExp" ID="BugBearVisitor.visit_GeneratorExp"></a>
-<h4>BugBearVisitor.visit_GeneratorExp</h4>
-<b>visit_GeneratorExp</b>(<i>node</i>)
-<p>
-        Public method to handle generator expressions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.GeneratorExp)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Import" ID="BugBearVisitor.visit_Import"></a>
-<h4>BugBearVisitor.visit_Import</h4>
-<b>visit_Import</b>(<i>node</i>)
-<p>
-        Public method to check imports.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Import)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_ImportFrom" ID="BugBearVisitor.visit_ImportFrom"></a>
-<h4>BugBearVisitor.visit_ImportFrom</h4>
-<b>visit_ImportFrom</b>(<i>node</i>)
-<p>
-        Public method to check from imports.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Import)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_JoinedStr" ID="BugBearVisitor.visit_JoinedStr"></a>
-<h4>BugBearVisitor.visit_JoinedStr</h4>
-<b>visit_JoinedStr</b>(<i>node</i>)
-<p>
-        Public method to handle f-string arguments.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.JoinedStr)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_ListComp" ID="BugBearVisitor.visit_ListComp"></a>
-<h4>BugBearVisitor.visit_ListComp</h4>
-<b>visit_ListComp</b>(<i>node</i>)
-<p>
-        Public method to handle list comprehensions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ListComp)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Module" ID="BugBearVisitor.visit_Module"></a>
-<h4>BugBearVisitor.visit_Module</h4>
-<b>visit_Module</b>(<i>node</i>)
-<p>
-        Public method to handle a module node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Module)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Raise" ID="BugBearVisitor.visit_Raise"></a>
-<h4>BugBearVisitor.visit_Raise</h4>
-<b>visit_Raise</b>(<i>node</i>)
-<p>
-        Public method to handle 'raise' statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Raise)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Return" ID="BugBearVisitor.visit_Return"></a>
-<h4>BugBearVisitor.visit_Return</h4>
-<b>visit_Return</b>(<i>node</i>)
-<p>
-        Public method to handle 'Return' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Return)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Set" ID="BugBearVisitor.visit_Set"></a>
-<h4>BugBearVisitor.visit_Set</h4>
-<b>visit_Set</b>(<i>node</i>)
-<p>
-        Public method to check a set.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Set)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_SetComp" ID="BugBearVisitor.visit_SetComp"></a>
-<h4>BugBearVisitor.visit_SetComp</h4>
-<b>visit_SetComp</b>(<i>node</i>)
-<p>
-        Public method to handle set comprehensions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.SetComp)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Try" ID="BugBearVisitor.visit_Try"></a>
-<h4>BugBearVisitor.visit_Try</h4>
-<b>visit_Try</b>(<i>node</i>)
-<p>
-        Public method to handle 'try' statements'.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Try)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_UAdd" ID="BugBearVisitor.visit_UAdd"></a>
-<h4>BugBearVisitor.visit_UAdd</h4>
-<b>visit_UAdd</b>(<i>node</i>)
-<p>
-        Public method to handle unary additions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.UAdd)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_While" ID="BugBearVisitor.visit_While"></a>
-<h4>BugBearVisitor.visit_While</h4>
-<b>visit_While</b>(<i>node</i>)
-<p>
-        Public method to handle 'while' statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.While)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_With" ID="BugBearVisitor.visit_With"></a>
-<h4>BugBearVisitor.visit_With</h4>
-<b>visit_With</b>(<i>node</i>)
-<p>
-        Public method to handle 'with' statements.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.With)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_Yield" ID="BugBearVisitor.visit_Yield"></a>
-<h4>BugBearVisitor.visit_Yield</h4>
-<b>visit_Yield</b>(<i>node</i>)
-<p>
-        Public method to handle 'Yield' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Yield)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="BugBearVisitor.visit_YieldFrom" ID="BugBearVisitor.visit_YieldFrom"></a>
-<h4>BugBearVisitor.visit_YieldFrom</h4>
-<b>visit_YieldFrom</b>(<i>node</i>)
-<p>
-        Public method to handle 'YieldFrom' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.YieldFrom)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="DateTimeVisitor" ID="DateTimeVisitor"></a>
-<h2>DateTimeVisitor</h2>
-<p>
-    Class implementing a node visitor to check datetime function calls.
-</p>
-<p>
-    Note: This class is modeled after flake8_datetimez checker.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#DateTimeVisitor.__init__">DateTimeVisitor</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#DateTimeVisitor.__getFromKeywords">__getFromKeywords</a></td>
-<td>Private method to get a keyword node given its name.</td>
-</tr>
-<tr>
-<td><a href="#DateTimeVisitor.visit_Call">visit_Call</a></td>
-<td>Public method to handle a function call.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="DateTimeVisitor.__init__" ID="DateTimeVisitor.__init__"></a>
-<h4>DateTimeVisitor (Constructor)</h4>
-<b>DateTimeVisitor</b>(<i></i>)
-<p>
-        Constructor
-</p>
-
-<a NAME="DateTimeVisitor.__getFromKeywords" ID="DateTimeVisitor.__getFromKeywords"></a>
-<h4>DateTimeVisitor.__getFromKeywords</h4>
-<b>__getFromKeywords</b>(<i>keywords, name</i>)
-<p>
-        Private method to get a keyword node given its name.
-</p>
-
-<dl>
-
-<dt><i>keywords</i> (list of ast.AST)</dt>
-<dd>
-list of keyword argument nodes
-</dd>
-<dt><i>name</i> (str)</dt>
-<dd>
-name of the keyword node
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-keyword node
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-ast.AST
-</dd>
-</dl>
-<a NAME="DateTimeVisitor.visit_Call" ID="DateTimeVisitor.visit_Call"></a>
-<h4>DateTimeVisitor.visit_Call</h4>
-<b>visit_Call</b>(<i>node</i>)
-<p>
-        Public method to handle a function call.
-</p>
-<p>
-        Every datetime related function call is check for use of the naive
-        variant (i.e. use without TZ info).
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="ExceptBaseExceptionVisitor" ID="ExceptBaseExceptionVisitor"></a>
-<h2>ExceptBaseExceptionVisitor</h2>
-<p>
-    Class to determine, if a 'BaseException' is re-raised.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#ExceptBaseExceptionVisitor.__init__">ExceptBaseExceptionVisitor</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#ExceptBaseExceptionVisitor.reRaised">reRaised</a></td>
-<td>Public method to check, if the exception is re-raised.</td>
-</tr>
-<tr>
-<td><a href="#ExceptBaseExceptionVisitor.visit_ExceptHandler">visit_ExceptHandler</a></td>
-<td>Public method to handle 'ExceptHandler' nodes.</td>
-</tr>
-<tr>
-<td><a href="#ExceptBaseExceptionVisitor.visit_Raise">visit_Raise</a></td>
-<td>Public method to handle 'Raise' nodes.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="ExceptBaseExceptionVisitor.__init__" ID="ExceptBaseExceptionVisitor.__init__"></a>
-<h4>ExceptBaseExceptionVisitor (Constructor)</h4>
-<b>ExceptBaseExceptionVisitor</b>(<i>exceptNode</i>)
-<p>
-        Constructor
-</p>
-
-<dl>
-
-<dt><i>exceptNode</i> (ast.ExceptHandler)</dt>
-<dd>
-exception node to be inspected
-</dd>
-</dl>
-<a NAME="ExceptBaseExceptionVisitor.reRaised" ID="ExceptBaseExceptionVisitor.reRaised"></a>
-<h4>ExceptBaseExceptionVisitor.reRaised</h4>
-<b>reRaised</b>(<i></i>)
-<p>
-        Public method to check, if the exception is re-raised.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a re-raised exception
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="ExceptBaseExceptionVisitor.visit_ExceptHandler" ID="ExceptBaseExceptionVisitor.visit_ExceptHandler"></a>
-<h4>ExceptBaseExceptionVisitor.visit_ExceptHandler</h4>
-<b>visit_ExceptHandler</b>(<i>node: ast.ExceptHandler</i>)
-<p>
-        Public method to handle 'ExceptHandler' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ExceptHandler)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="ExceptBaseExceptionVisitor.visit_Raise" ID="ExceptBaseExceptionVisitor.visit_Raise"></a>
-<h4>ExceptBaseExceptionVisitor.visit_Raise</h4>
-<b>visit_Raise</b>(<i>node</i>)
-<p>
-        Public method to handle 'Raise' nodes.
-</p>
-<p>
-        If we find a corresponding `raise` or `raise e` where e was from
-        `except BaseException as e:` then we mark re_raised as True and can
-        stop scanning.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Raise)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="FunctionDefDefaultsVisitor" ID="FunctionDefDefaultsVisitor"></a>
-<h2>FunctionDefDefaultsVisitor</h2>
-<p>
-    Class used by M506, M508 and M539.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#FunctionDefDefaultsVisitor.__init__">FunctionDefDefaultsVisitor</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension">__visitMutableLiteralOrComprehension</a></td>
-<td>Private method to flag mutable literals and comprehensions.</td>
-</tr>
-<tr>
-<td><a href="#FunctionDefDefaultsVisitor.visit">visit</a></td>
-<td>Public method to traverse an AST node or a list of AST nodes.</td>
-</tr>
-<tr>
-<td><a href="#FunctionDefDefaultsVisitor.visit_Call">visit_Call</a></td>
-<td>Public method to process Call nodes.</td>
-</tr>
-<tr>
-<td><a href="#FunctionDefDefaultsVisitor.visit_Lambda">visit_Lambda</a></td>
-<td>Public method to process Lambda nodes.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="FunctionDefDefaultsVisitor.__init__" ID="FunctionDefDefaultsVisitor.__init__"></a>
-<h4>FunctionDefDefaultsVisitor (Constructor)</h4>
-<b>FunctionDefDefaultsVisitor</b>(<i>errorCodeCalls, errorCodeLiterals, </i>)
-<p>
-        Constructor
-</p>
-
-<dl>
-
-<dt><i>errorCodeCalls</i> (str)</dt>
-<dd>
-error code for ast.Call nodes
-</dd>
-<dt><i>errorCodeLiterals</i> (str)</dt>
-<dd>
-error code for literal nodes
-</dd>
-</dl>
-<a NAME="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension" ID="FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension"></a>
-<h4>FunctionDefDefaultsVisitor.__visitMutableLiteralOrComprehension</h4>
-<b>__visitMutableLiteralOrComprehension</b>(<i>node</i>)
-<p>
-        Private method to flag mutable literals and comprehensions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Dict, ast.List, ast.Set, ast.ListComp, ast.DictComp or ast.SetComp)</dt>
-<dd>
-AST node to be processed
-</dd>
-</dl>
-<a NAME="FunctionDefDefaultsVisitor.visit" ID="FunctionDefDefaultsVisitor.visit"></a>
-<h4>FunctionDefDefaultsVisitor.visit</h4>
-<b>visit</b>(<i>node</i>)
-<p>
-        Public method to traverse an AST node or a list of AST nodes.
-</p>
-<p>
-        This is an extended method that can also handle a list of AST nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST or list of ast.AST)</dt>
-<dd>
-AST node or list of AST nodes to be processed
-</dd>
-</dl>
-<a NAME="FunctionDefDefaultsVisitor.visit_Call" ID="FunctionDefDefaultsVisitor.visit_Call"></a>
-<h4>FunctionDefDefaultsVisitor.visit_Call</h4>
-<b>visit_Call</b>(<i>node</i>)
-<p>
-        Public method to process Call nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-AST node to be processed
-</dd>
-</dl>
-<a NAME="FunctionDefDefaultsVisitor.visit_Lambda" ID="FunctionDefDefaultsVisitor.visit_Lambda"></a>
-<h4>FunctionDefDefaultsVisitor.visit_Lambda</h4>
-<b>visit_Lambda</b>(<i>node</i>)
-<p>
-        Public method to process Lambda nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Lambda)</dt>
-<dd>
-AST node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="M520NameFinder" ID="M520NameFinder"></a>
-<h2>M520NameFinder</h2>
-<p>
-    Class to extract a name out of a tree of nodes ignoring names defined within the
-    local scope of a comprehension.
-</p>
-
-<h3>Derived from</h3>
-NameFinder
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#M520NameFinder.visit_DictComp">visit_DictComp</a></td>
-<td>Public method  to handle a dictionary comprehension.</td>
-</tr>
-<tr>
-<td><a href="#M520NameFinder.visit_GeneratorExp">visit_GeneratorExp</a></td>
-<td>Public method to handle a generator expressions.</td>
-</tr>
-<tr>
-<td><a href="#M520NameFinder.visit_Lambda">visit_Lambda</a></td>
-<td>Public method  to handle a Lambda function.</td>
-</tr>
-<tr>
-<td><a href="#M520NameFinder.visit_ListComp">visit_ListComp</a></td>
-<td>Public method  to handle a list comprehension.</td>
-</tr>
-<tr>
-<td><a href="#M520NameFinder.visit_comprehension">visit_comprehension</a></td>
-<td>Public method  to handle the 'for' of a comprehension.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="M520NameFinder.visit_DictComp" ID="M520NameFinder.visit_DictComp"></a>
-<h4>M520NameFinder.visit_DictComp</h4>
-<b>visit_DictComp</b>(<i>node</i>)
-<p>
-        Public method  to handle a dictionary comprehension.
-</p>
-
-<dl>
-
-<dt><i>node</i> (TYPE)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="M520NameFinder.visit_GeneratorExp" ID="M520NameFinder.visit_GeneratorExp"></a>
-<h4>M520NameFinder.visit_GeneratorExp</h4>
-<b>visit_GeneratorExp</b>(<i>node</i>)
-<p>
-        Public method to handle a generator expressions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.GeneratorExp)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="M520NameFinder.visit_Lambda" ID="M520NameFinder.visit_Lambda"></a>
-<h4>M520NameFinder.visit_Lambda</h4>
-<b>visit_Lambda</b>(<i>node</i>)
-<p>
-        Public method  to handle a Lambda function.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Lambda)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="M520NameFinder.visit_ListComp" ID="M520NameFinder.visit_ListComp"></a>
-<h4>M520NameFinder.visit_ListComp</h4>
-<b>visit_ListComp</b>(<i>node</i>)
-<p>
-        Public method  to handle a list comprehension.
-</p>
-
-<dl>
-
-<dt><i>node</i> (TYPE)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="M520NameFinder.visit_comprehension" ID="M520NameFinder.visit_comprehension"></a>
-<h4>M520NameFinder.visit_comprehension</h4>
-<b>visit_comprehension</b>(<i>node</i>)
-<p>
-        Public method  to handle the 'for' of a comprehension.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.comprehension)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="M540CaughtException" ID="M540CaughtException"></a>
-<h2>M540CaughtException</h2>
-<p>
-    Class to hold the data for a caught exception.
-</p>
-
-<h3>Derived from</h3>
-None
-<h3>Class Attributes</h3>
-<table>
-<tr><td>hasNote</td></tr>
-<tr><td>name</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="M569Checker" ID="M569Checker"></a>
-<h2>M569Checker</h2>
-<p>
-    Class traversing a 'for' loop body to check for modifications to a loop's
-    mutable iterable.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>MUTATING_FUNCTIONS</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#M569Checker.__init__">M569Checker</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#M569Checker.visit">visit</a></td>
-<td>Public method to inspect an ast node.</td>
-</tr>
-<tr>
-<td><a href="#M569Checker.visit_Call">visit_Call</a></td>
-<td>Public method handling 'Call' nodes.</td>
-</tr>
-<tr>
-<td><a href="#M569Checker.visit_Delete">visit_Delete</a></td>
-<td>Public method handling 'Delete' nodes.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="M569Checker.__init__" ID="M569Checker.__init__"></a>
-<h4>M569Checker (Constructor)</h4>
-<b>M569Checker</b>(<i>name, bugbear</i>)
-<p>
-        Constructor
-</p>
-
-<dl>
-
-<dt><i>name</i> (str)</dt>
-<dd>
-name of the iterator
-</dd>
-<dt><i>bugbear</i> (BugBearVisitor)</dt>
-<dd>
-reference to the bugbear visitor
-</dd>
-</dl>
-<a NAME="M569Checker.visit" ID="M569Checker.visit"></a>
-<h4>M569Checker.visit</h4>
-<b>visit</b>(<i>node</i>)
-<p>
-        Public method to inspect an ast node.
-</p>
-<p>
-        Like super-visit but supports iteration over lists.
-</p>
-
-<dl>
-
-<dt><i>node</i> (TYPE)</dt>
-<dd>
-AST node to be traversed
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-reference to the last processed node
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-ast.Node
-</dd>
-</dl>
-<a NAME="M569Checker.visit_Call" ID="M569Checker.visit_Call"></a>
-<h4>M569Checker.visit_Call</h4>
-<b>visit_Call</b>(<i>node</i>)
-<p>
-        Public method handling 'Call' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="M569Checker.visit_Delete" ID="M569Checker.visit_Delete"></a>
-<h4>M569Checker.visit_Delete</h4>
-<b>visit_Delete</b>(<i>node</i>)
-<p>
-        Public method handling 'Delete' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Delete)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
 <a NAME="MiscellaneousChecker" ID="MiscellaneousChecker"></a>
 <h2>MiscellaneousChecker</h2>
 <p>
@@ -2284,10 +41,11 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
 <tr><td>BuiltinsWhiteList</td></tr>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 <tr><td>FormatFieldRegex</td></tr>
 <tr><td>Formatter</td></tr>
@@ -2333,6 +91,10 @@
 <td>Private method to check use of naive datetime functions.</td>
 </tr>
 <tr>
+<td><a href="#MiscellaneousChecker.__checkDefaultMatchCase">__checkDefaultMatchCase</a></td>
+<td>Private method to check the default match case.</td>
+</tr>
+<tr>
 <td><a href="#MiscellaneousChecker.__checkDictWithSortedKeys">__checkDictWithSortedKeys</a></td>
 <td>Private method to check, if dictionary keys appear in sorted order.</td>
 </tr>
@@ -2389,10 +151,6 @@
 <td>Private function to test, if the node should be checked.</td>
 </tr>
 <tr>
-<td><a href="#MiscellaneousChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
 <td><a href="#MiscellaneousChecker.__getCoding">__getCoding</a></td>
 <td>Private method to get the defined coding of the source.</td>
 </tr>
@@ -2401,17 +159,9 @@
 <td>Private method to extract the format field information.</td>
 </tr>
 <tr>
-<td><a href="#MiscellaneousChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
 <td><a href="#MiscellaneousChecker.__isImplicitStringConcat">__isImplicitStringConcat</a></td>
 <td>Private method to check, if the given strings indicate an implicit string concatenation.</td>
 </tr>
-<tr>
-<td><a href="#MiscellaneousChecker.run">run</a></td>
-<td>Public method to check the given source against miscellaneous conditions.</td>
-</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -2498,7 +248,7 @@
         Private method to check some comprehension related things.
 </p>
 <p>
-        This method is adapted from: flake8-comprehensions v3.15.0
+        This method is adapted from: flake8-comprehensions v3.16.0
         Original: Copyright (c) 2017 Adam Johnson
 </p>
 
@@ -2516,6 +266,13 @@
         Private method to check use of naive datetime functions.
 </p>
 
+<a NAME="MiscellaneousChecker.__checkDefaultMatchCase" ID="MiscellaneousChecker.__checkDefaultMatchCase"></a>
+<h4>MiscellaneousChecker.__checkDefaultMatchCase</h4>
+<b>__checkDefaultMatchCase</b>(<i></i>)
+<p>
+        Private method to check the default match case.
+</p>
+
 <a NAME="MiscellaneousChecker.__checkDictWithSortedKeys" ID="MiscellaneousChecker.__checkDictWithSortedKeys"></a>
 <h4>MiscellaneousChecker.__checkDictWithSortedKeys</h4>
 <b>__checkDictWithSortedKeys</b>(<i></i>)
@@ -2633,32 +390,6 @@
 bool
 </dd>
 </dl>
-<a NAME="MiscellaneousChecker.__error" ID="MiscellaneousChecker.__error"></a>
-<h4>MiscellaneousChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
 <a NAME="MiscellaneousChecker.__getCoding" ID="MiscellaneousChecker.__getCoding"></a>
 <h4>MiscellaneousChecker.__getCoding</h4>
 <b>__getCoding</b>(<i></i>)
@@ -2705,32 +436,6 @@
 tuple of set of str, bool, bool
 </dd>
 </dl>
-<a NAME="MiscellaneousChecker.__ignoreCode" ID="MiscellaneousChecker.__ignoreCode"></a>
-<h4>MiscellaneousChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="MiscellaneousChecker.__isImplicitStringConcat" ID="MiscellaneousChecker.__isImplicitStringConcat"></a>
 <h4>MiscellaneousChecker.__isImplicitStringConcat</h4>
 <b>__isImplicitStringConcat</b>(<i>first, second</i>)
@@ -2762,1196 +467,6 @@
 bool
 </dd>
 </dl>
-<a NAME="MiscellaneousChecker.run" ID="MiscellaneousChecker.run"></a>
-<h4>MiscellaneousChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against miscellaneous
-        conditions.
-</p>
-
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="NameFinder" ID="NameFinder"></a>
-<h2>NameFinder</h2>
-<p>
-    Class to extract a name out of a tree of nodes.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#NameFinder.__init__">NameFinder</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#NameFinder.getNames">getNames</a></td>
-<td>Public method to return the extracted names and Name nodes.</td>
-</tr>
-<tr>
-<td><a href="#NameFinder.visit">visit</a></td>
-<td>Public method to traverse a given AST node.</td>
-</tr>
-<tr>
-<td><a href="#NameFinder.visit_Name">visit_Name</a></td>
-<td>Public method to handle 'Name' nodes.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="NameFinder.__init__" ID="NameFinder.__init__"></a>
-<h4>NameFinder (Constructor)</h4>
-<b>NameFinder</b>(<i></i>)
-<p>
-        Constructor
-</p>
-
-<a NAME="NameFinder.getNames" ID="NameFinder.getNames"></a>
-<h4>NameFinder.getNames</h4>
-<b>getNames</b>(<i></i>)
-<p>
-        Public method to return the extracted names and Name nodes.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-dictionary containing the names as keys and the list of nodes
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-dict
-</dd>
-</dl>
-<a NAME="NameFinder.visit" ID="NameFinder.visit"></a>
-<h4>NameFinder.visit</h4>
-<b>visit</b>(<i>node</i>)
-<p>
-        Public method to traverse a given AST node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Node)</dt>
-<dd>
-AST node to be traversed
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-reference to the last processed node
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-ast.Node
-</dd>
-</dl>
-<a NAME="NameFinder.visit_Name" ID="NameFinder.visit_Name"></a>
-<h4>NameFinder.visit_Name</h4>
-<b>visit_Name</b>(<i>node</i>)
-<p>
-        Public method to handle 'Name' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Name)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="NamedExprFinder" ID="NamedExprFinder"></a>
-<h2>NamedExprFinder</h2>
-<p>
-    Class to extract names defined through an ast.NamedExpr.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#NamedExprFinder.__init__">NamedExprFinder</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#NamedExprFinder.getNames">getNames</a></td>
-<td>Public method to return the extracted names and Name nodes.</td>
-</tr>
-<tr>
-<td><a href="#NamedExprFinder.visit">visit</a></td>
-<td>Public method to traverse a given AST node.</td>
-</tr>
-<tr>
-<td><a href="#NamedExprFinder.visit_NamedExpr">visit_NamedExpr</a></td>
-<td>Public method handling 'NamedExpr' nodes.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="NamedExprFinder.__init__" ID="NamedExprFinder.__init__"></a>
-<h4>NamedExprFinder (Constructor)</h4>
-<b>NamedExprFinder</b>(<i></i>)
-<p>
-        Constructor
-</p>
-
-<a NAME="NamedExprFinder.getNames" ID="NamedExprFinder.getNames"></a>
-<h4>NamedExprFinder.getNames</h4>
-<b>getNames</b>(<i></i>)
-<p>
-        Public method to return the extracted names and Name nodes.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-dictionary containing the names as keys and the list of nodes
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-dict
-</dd>
-</dl>
-<a NAME="NamedExprFinder.visit" ID="NamedExprFinder.visit"></a>
-<h4>NamedExprFinder.visit</h4>
-<b>visit</b>(<i>node</i>)
-<p>
-        Public method to traverse a given AST node.
-</p>
-<p>
-        Like super-visit but supports iteration over lists.
-</p>
-
-<dl>
-
-<dt><i>node</i> (TYPE)</dt>
-<dd>
-AST node to be traversed
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-reference to the last processed node
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-ast.Node
-</dd>
-</dl>
-<a NAME="NamedExprFinder.visit_NamedExpr" ID="NamedExprFinder.visit_NamedExpr"></a>
-<h4>NamedExprFinder.visit_NamedExpr</h4>
-<b>visit_NamedExpr</b>(<i>node: ast.NamedExpr</i>)
-<p>
-        Public method handling 'NamedExpr' nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.NamedExpr)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="ReturnVisitor" ID="ReturnVisitor"></a>
-<h2>ReturnVisitor</h2>
-<p>
-    Class implementing a node visitor to check return statements.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>Assigns</td></tr>
-<tr><td>Refs</td></tr>
-<tr><td>Returns</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#ReturnVisitor.__init__">ReturnVisitor</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__checkFunction">__checkFunction</a></td>
-<td>Private method to check a function definition node.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__checkImplicitReturn">__checkImplicitReturn</a></td>
-<td>Private method to check for an implicit return statement.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__checkImplicitReturnValue">__checkImplicitReturnValue</a></td>
-<td>Private method to check for implicit return values.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__checkUnnecessaryAssign">__checkUnnecessaryAssign</a></td>
-<td>Private method to check for an unnecessary assign statement.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__checkUnnecessaryReturnNone">__checkUnnecessaryReturnNone</a></td>
-<td>Private method to check for an unnecessary 'return None' statement.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__hasRefsBeforeNextAssign">__hasRefsBeforeNextAssign</a></td>
-<td>Private method to check for references before a following assign statement.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__isFalse">__isFalse</a></td>
-<td>Private method to check, if a node value is False.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__isNone">__isNone</a></td>
-<td>Private method to check, if a node value is None.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__resultExists">__resultExists</a></td>
-<td>Private method to check the existance of a return result.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__visitAssignTarget">__visitAssignTarget</a></td>
-<td>Private method to handle an assign target node.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__visitLoop">__visitLoop</a></td>
-<td>Private method to handle loop nodes.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.__visitWithStack">__visitWithStack</a></td>
-<td>Private method to traverse a given function node using a stack.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.assigns">assigns</a></td>
-<td>Public method to get the Assign nodes.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.refs">refs</a></td>
-<td>Public method to get the References nodes.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.returns">returns</a></td>
-<td>Public method to get the Return nodes.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_Assign">visit_Assign</a></td>
-<td>Public method to handle an assign node.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_AsyncFor">visit_AsyncFor</a></td>
-<td>Public method to handle an async for loop.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
-<td>Public method to handle a function definition.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_For">visit_For</a></td>
-<td>Public method to handle a for loop.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_FunctionDef">visit_FunctionDef</a></td>
-<td>Public method to handle a function definition.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_Name">visit_Name</a></td>
-<td>Public method to handle a name node.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_Return">visit_Return</a></td>
-<td>Public method to handle a return node.</td>
-</tr>
-<tr>
-<td><a href="#ReturnVisitor.visit_While">visit_While</a></td>
-<td>Public method to handle a while loop.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="ReturnVisitor.__init__" ID="ReturnVisitor.__init__"></a>
-<h4>ReturnVisitor (Constructor)</h4>
-<b>ReturnVisitor</b>(<i></i>)
-<p>
-        Constructor
-</p>
-
-<a NAME="ReturnVisitor.__checkFunction" ID="ReturnVisitor.__checkFunction"></a>
-<h4>ReturnVisitor.__checkFunction</h4>
-<b>__checkFunction</b>(<i>node</i>)
-<p>
-        Private method to check a function definition node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AsyncFunctionDef or ast.FunctionDef)</dt>
-<dd>
-reference to the node to check
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__checkImplicitReturn" ID="ReturnVisitor.__checkImplicitReturn"></a>
-<h4>ReturnVisitor.__checkImplicitReturn</h4>
-<b>__checkImplicitReturn</b>(<i>node</i>)
-<p>
-        Private method to check for an implicit return statement.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-reference to the node to check
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__checkImplicitReturnValue" ID="ReturnVisitor.__checkImplicitReturnValue"></a>
-<h4>ReturnVisitor.__checkImplicitReturnValue</h4>
-<b>__checkImplicitReturnValue</b>(<i></i>)
-<p>
-        Private method to check for implicit return values.
-</p>
-
-<a NAME="ReturnVisitor.__checkUnnecessaryAssign" ID="ReturnVisitor.__checkUnnecessaryAssign"></a>
-<h4>ReturnVisitor.__checkUnnecessaryAssign</h4>
-<b>__checkUnnecessaryAssign</b>(<i>node</i>)
-<p>
-        Private method to check for an unnecessary assign statement.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-reference to the node to check
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__checkUnnecessaryReturnNone" ID="ReturnVisitor.__checkUnnecessaryReturnNone"></a>
-<h4>ReturnVisitor.__checkUnnecessaryReturnNone</h4>
-<b>__checkUnnecessaryReturnNone</b>(<i></i>)
-<p>
-        Private method to check for an unnecessary 'return None' statement.
-</p>
-
-<a NAME="ReturnVisitor.__hasRefsBeforeNextAssign" ID="ReturnVisitor.__hasRefsBeforeNextAssign"></a>
-<h4>ReturnVisitor.__hasRefsBeforeNextAssign</h4>
-<b>__hasRefsBeforeNextAssign</b>(<i>varname, returnLineno</i>)
-<p>
-        Private method to check for references before a following assign
-        statement.
-</p>
-
-<dl>
-
-<dt><i>varname</i> (str)</dt>
-<dd>
-variable name to check for
-</dd>
-<dt><i>returnLineno</i> (int)</dt>
-<dd>
-line number of the return statement
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating the existence of references
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__isFalse" ID="ReturnVisitor.__isFalse"></a>
-<h4>ReturnVisitor.__isFalse</h4>
-<b>__isFalse</b>(<i>node</i>)
-<p>
-        Private method to check, if a node value is False.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-reference to the node to check
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating the node contains a False value
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__isNone" ID="ReturnVisitor.__isNone"></a>
-<h4>ReturnVisitor.__isNone</h4>
-<b>__isNone</b>(<i>node</i>)
-<p>
-        Private method to check, if a node value is None.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-reference to the node to check
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating the node contains a None value
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__resultExists" ID="ReturnVisitor.__resultExists"></a>
-<h4>ReturnVisitor.__resultExists</h4>
-<b>__resultExists</b>(<i></i>)
-<p>
-        Private method to check the existance of a return result.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating the existence of a return result
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__visitAssignTarget" ID="ReturnVisitor.__visitAssignTarget"></a>
-<h4>ReturnVisitor.__visitAssignTarget</h4>
-<b>__visitAssignTarget</b>(<i>node</i>)
-<p>
-        Private method to handle an assign target node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__visitLoop" ID="ReturnVisitor.__visitLoop"></a>
-<h4>ReturnVisitor.__visitLoop</h4>
-<b>__visitLoop</b>(<i>node</i>)
-<p>
-        Private method to handle loop nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.For, ast.AsyncFor or ast.While)</dt>
-<dd>
-reference to the loop node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.__visitWithStack" ID="ReturnVisitor.__visitWithStack"></a>
-<h4>ReturnVisitor.__visitWithStack</h4>
-<b>__visitWithStack</b>(<i>node</i>)
-<p>
-        Private method to traverse a given function node using a stack.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef or ast.AsyncFunctionDef)</dt>
-<dd>
-AST node to be traversed
-</dd>
-</dl>
-<a NAME="ReturnVisitor.assigns" ID="ReturnVisitor.assigns"></a>
-<h4>ReturnVisitor.assigns</h4>
-<b>assigns</b>(<i></i>)
-<p>
-        Public method to get the Assign nodes.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-dictionary containing the node name as key and line number
-            as value
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-dict
-</dd>
-</dl>
-<a NAME="ReturnVisitor.refs" ID="ReturnVisitor.refs"></a>
-<h4>ReturnVisitor.refs</h4>
-<b>refs</b>(<i></i>)
-<p>
-        Public method to get the References nodes.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-dictionary containing the node name as key and line number
-            as value
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-dict
-</dd>
-</dl>
-<a NAME="ReturnVisitor.returns" ID="ReturnVisitor.returns"></a>
-<h4>ReturnVisitor.returns</h4>
-<b>returns</b>(<i></i>)
-<p>
-        Public method to get the Return nodes.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-dictionary containing the node name as key and line number
-            as value
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-dict
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_Assign" ID="ReturnVisitor.visit_Assign"></a>
-<h4>ReturnVisitor.visit_Assign</h4>
-<b>visit_Assign</b>(<i>node</i>)
-<p>
-        Public method to handle an assign node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Assign)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_AsyncFor" ID="ReturnVisitor.visit_AsyncFor"></a>
-<h4>ReturnVisitor.visit_AsyncFor</h4>
-<b>visit_AsyncFor</b>(<i>node</i>)
-<p>
-        Public method to handle an async for loop.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AsyncFor)</dt>
-<dd>
-reference to the async for node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_AsyncFunctionDef" ID="ReturnVisitor.visit_AsyncFunctionDef"></a>
-<h4>ReturnVisitor.visit_AsyncFunctionDef</h4>
-<b>visit_AsyncFunctionDef</b>(<i>node</i>)
-<p>
-        Public method to handle a function definition.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_For" ID="ReturnVisitor.visit_For"></a>
-<h4>ReturnVisitor.visit_For</h4>
-<b>visit_For</b>(<i>node</i>)
-<p>
-        Public method to handle a for loop.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.For)</dt>
-<dd>
-reference to the for node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_FunctionDef" ID="ReturnVisitor.visit_FunctionDef"></a>
-<h4>ReturnVisitor.visit_FunctionDef</h4>
-<b>visit_FunctionDef</b>(<i>node</i>)
-<p>
-        Public method to handle a function definition.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_Name" ID="ReturnVisitor.visit_Name"></a>
-<h4>ReturnVisitor.visit_Name</h4>
-<b>visit_Name</b>(<i>node</i>)
-<p>
-        Public method to handle a name node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Name)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_Return" ID="ReturnVisitor.visit_Return"></a>
-<h4>ReturnVisitor.visit_Return</h4>
-<b>visit_Return</b>(<i>node</i>)
-<p>
-        Public method to handle a return node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Return)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="ReturnVisitor.visit_While" ID="ReturnVisitor.visit_While"></a>
-<h4>ReturnVisitor.visit_While</h4>
-<b>visit_While</b>(<i>node</i>)
-<p>
-        Public method to handle a while loop.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.While)</dt>
-<dd>
-reference to the while node to handle
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="SysVersionVisitor" ID="SysVersionVisitor"></a>
-<h2>SysVersionVisitor</h2>
-<p>
-    Class implementing a node visitor to check the use of sys.version and
-    sys.version_info.
-</p>
-<p>
-    Note: This class is modeled after flake8-2020 checker.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#SysVersionVisitor.__init__">SysVersionVisitor</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor.__isSys">__isSys</a></td>
-<td>Private method to check for a reference to sys attribute.</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor.__isSysVersionUpperSlice">__isSysVersionUpperSlice</a></td>
-<td>Private method to check the upper slice of sys.version.</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor.visit_Attribute">visit_Attribute</a></td>
-<td>Public method to handle an attribute.</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor.visit_Compare">visit_Compare</a></td>
-<td>Public method to handle a comparison.</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor.visit_ImportFrom">visit_ImportFrom</a></td>
-<td>Public method to handle a from ...</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor.visit_Name">visit_Name</a></td>
-<td>Public method to handle an name.</td>
-</tr>
-<tr>
-<td><a href="#SysVersionVisitor.visit_Subscript">visit_Subscript</a></td>
-<td>Public method to handle a subscript.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="SysVersionVisitor.__init__" ID="SysVersionVisitor.__init__"></a>
-<h4>SysVersionVisitor (Constructor)</h4>
-<b>SysVersionVisitor</b>(<i></i>)
-<p>
-        Constructor
-</p>
-
-<a NAME="SysVersionVisitor.__isSys" ID="SysVersionVisitor.__isSys"></a>
-<h4>SysVersionVisitor.__isSys</h4>
-<b>__isSys</b>(<i>attr, node</i>)
-<p>
-        Private method to check for a reference to sys attribute.
-</p>
-
-<dl>
-
-<dt><i>attr</i> (str)</dt>
-<dd>
-attribute name
-</dd>
-<dt><i>node</i> (ast.Node)</dt>
-<dd>
-reference to the node to be checked
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a match
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="SysVersionVisitor.__isSysVersionUpperSlice" ID="SysVersionVisitor.__isSysVersionUpperSlice"></a>
-<h4>SysVersionVisitor.__isSysVersionUpperSlice</h4>
-<b>__isSysVersionUpperSlice</b>(<i>node, n</i>)
-<p>
-        Private method to check the upper slice of sys.version.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Node)</dt>
-<dd>
-reference to the node to be checked
-</dd>
-<dt><i>n</i> (int)</dt>
-<dd>
-slice value to check against
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating a match
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="SysVersionVisitor.visit_Attribute" ID="SysVersionVisitor.visit_Attribute"></a>
-<h4>SysVersionVisitor.visit_Attribute</h4>
-<b>visit_Attribute</b>(<i>node</i>)
-<p>
-        Public method to handle an attribute.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Attribute)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="SysVersionVisitor.visit_Compare" ID="SysVersionVisitor.visit_Compare"></a>
-<h4>SysVersionVisitor.visit_Compare</h4>
-<b>visit_Compare</b>(<i>node</i>)
-<p>
-        Public method to handle a comparison.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Compare)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="SysVersionVisitor.visit_ImportFrom" ID="SysVersionVisitor.visit_ImportFrom"></a>
-<h4>SysVersionVisitor.visit_ImportFrom</h4>
-<b>visit_ImportFrom</b>(<i>node</i>)
-<p>
-        Public method to handle a from ... import ... statement.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ImportFrom)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="SysVersionVisitor.visit_Name" ID="SysVersionVisitor.visit_Name"></a>
-<h4>SysVersionVisitor.visit_Name</h4>
-<b>visit_Name</b>(<i>node</i>)
-<p>
-        Public method to handle an name.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Name)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<a NAME="SysVersionVisitor.visit_Subscript" ID="SysVersionVisitor.visit_Subscript"></a>
-<h4>SysVersionVisitor.visit_Subscript</h4>
-<b>visit_Subscript</b>(<i>node</i>)
-<p>
-        Public method to handle a subscript.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Subscript)</dt>
-<dd>
-reference to the node to be processed
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="TextVisitor" ID="TextVisitor"></a>
-<h2>TextVisitor</h2>
-<p>
-    Class implementing a node visitor for bytes and str instances.
-</p>
-<p>
-    It tries to detect docstrings as string of the first expression of each
-    module, class or function.
-</p>
-
-<h3>Derived from</h3>
-ast.NodeVisitor
-<h3>Class Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Class Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Methods</h3>
-<table>
-<tr>
-<td><a href="#TextVisitor.__init__">TextVisitor</a></td>
-<td>Constructor</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.__addNode">__addNode</a></td>
-<td>Private method to add a node to our list of nodes.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.__visitBody">__visitBody</a></td>
-<td>Private method to traverse the body of the node manually.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.__visitDefinition">__visitDefinition</a></td>
-<td>Private method handling class and function definitions.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
-<td>Public method to handle an asynchronous function definition.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.visit_Call">visit_Call</a></td>
-<td>Public method to handle a function call.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.visit_ClassDef">visit_ClassDef</a></td>
-<td>Public method to handle a class definition.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.visit_Constant">visit_Constant</a></td>
-<td>Public method to handle constant nodes.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.visit_FunctionDef">visit_FunctionDef</a></td>
-<td>Public method to handle a function definition.</td>
-</tr>
-<tr>
-<td><a href="#TextVisitor.visit_Module">visit_Module</a></td>
-<td>Public method to handle a module.</td>
-</tr>
-</table>
-
-<h3>Static Methods</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-
-<a NAME="TextVisitor.__init__" ID="TextVisitor.__init__"></a>
-<h4>TextVisitor (Constructor)</h4>
-<b>TextVisitor</b>(<i></i>)
-<p>
-        Constructor
-</p>
-
-<a NAME="TextVisitor.__addNode" ID="TextVisitor.__addNode"></a>
-<h4>TextVisitor.__addNode</h4>
-<b>__addNode</b>(<i>node</i>)
-<p>
-        Private method to add a node to our list of nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-reference to the node to add
-</dd>
-</dl>
-<a NAME="TextVisitor.__visitBody" ID="TextVisitor.__visitBody"></a>
-<h4>TextVisitor.__visitBody</h4>
-<b>__visitBody</b>(<i>node</i>)
-<p>
-        Private method to traverse the body of the node manually.
-</p>
-<p>
-        If the first node is an expression which contains a string or bytes it
-        marks that as a docstring.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-reference to the node to traverse
-</dd>
-</dl>
-<a NAME="TextVisitor.__visitDefinition" ID="TextVisitor.__visitDefinition"></a>
-<h4>TextVisitor.__visitDefinition</h4>
-<b>__visitDefinition</b>(<i>node</i>)
-<p>
-        Private method handling class and function definitions.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef, ast.AsyncFunctionDef or ast.ClassDef)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="TextVisitor.visit_AsyncFunctionDef" ID="TextVisitor.visit_AsyncFunctionDef"></a>
-<h4>TextVisitor.visit_AsyncFunctionDef</h4>
-<b>visit_AsyncFunctionDef</b>(<i>node</i>)
-<p>
-        Public method to handle an asynchronous function definition.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="TextVisitor.visit_Call" ID="TextVisitor.visit_Call"></a>
-<h4>TextVisitor.visit_Call</h4>
-<b>visit_Call</b>(<i>node</i>)
-<p>
-        Public method to handle a function call.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Call)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="TextVisitor.visit_ClassDef" ID="TextVisitor.visit_ClassDef"></a>
-<h4>TextVisitor.visit_ClassDef</h4>
-<b>visit_ClassDef</b>(<i>node</i>)
-<p>
-        Public method to handle a class definition.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.ClassDef)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="TextVisitor.visit_Constant" ID="TextVisitor.visit_Constant"></a>
-<h4>TextVisitor.visit_Constant</h4>
-<b>visit_Constant</b>(<i>node</i>)
-<p>
-        Public method to handle constant nodes.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Constant)</dt>
-<dd>
-reference to the bytes node
-</dd>
-</dl>
-<a NAME="TextVisitor.visit_FunctionDef" ID="TextVisitor.visit_FunctionDef"></a>
-<h4>TextVisitor.visit_FunctionDef</h4>
-<b>visit_FunctionDef</b>(<i>node</i>)
-<p>
-        Public method to handle a function definition.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.FunctionDef)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<a NAME="TextVisitor.visit_Module" ID="TextVisitor.visit_Module"></a>
-<h4>TextVisitor.visit_Module</h4>
-<b>visit_Module</b>(<i>node</i>)
-<p>
-        Public method to handle a module.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Module)</dt>
-<dd>
-reference to the node to handle
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="composeCallPath" ID="composeCallPath"></a>
-<h2>composeCallPath</h2>
-<b>composeCallPath</b>(<i>node</i>)
-<p>
-    Generator function to assemble the call path of a given node.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.Node)</dt>
-<dd>
-node to assemble call path for
-</dd>
-</dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-call path components
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-str
-</dd>
-</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,646 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor</h1>
+<p>
+Module implementing a node visitor to check return statements.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#ReturnVisitor">ReturnVisitor</a></td>
+<td>Class implementing a node visitor to check return statements.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="ReturnVisitor" ID="ReturnVisitor"></a>
+<h2>ReturnVisitor</h2>
+<p>
+    Class implementing a node visitor to check return statements.
+</p>
+<p>
+    Note 1: This class is modeled after flake8-return v1.2.0 checker without
+    checking for superfluous return.
+    Note 2: This class is a combination of the main visitor class and the various
+    mixin classes of of the above checker.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>Assigns</td></tr>
+<tr><td>Loops</td></tr>
+<tr><td>Refs</td></tr>
+<tr><td>Returns</td></tr>
+<tr><td>Tries</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#ReturnVisitor.__init__">ReturnVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__checkFunction">__checkFunction</a></td>
+<td>Private method to check a function definition node.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__checkImplicitReturn">__checkImplicitReturn</a></td>
+<td>Private method to check for an implicit return statement.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__checkImplicitReturnValue">__checkImplicitReturnValue</a></td>
+<td>Private method to check for implicit return values.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__checkUnnecessaryAssign">__checkUnnecessaryAssign</a></td>
+<td>Private method to check for an unnecessary assign statement.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__checkUnnecessaryReturnNone">__checkUnnecessaryReturnNone</a></td>
+<td>Private method to check for an unnecessary 'return None' statement.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__hasRefsBeforeNextAssign">__hasRefsBeforeNextAssign</a></td>
+<td>Private method to check for references before a following assign statement.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__hasRefsOrAssignsWithinTryOrLoop">__hasRefsOrAssignsWithinTryOrLoop</a></td>
+<td>Private method to check for references or assignments in exception handlers or loops.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__isFalse">__isFalse</a></td>
+<td>Private method to check, if a node value is False.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__isNone">__isNone</a></td>
+<td>Private method to check, if a node value is None.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__resultExists">__resultExists</a></td>
+<td>Private method to check the existance of a return result.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__visitAssignTarget">__visitAssignTarget</a></td>
+<td>Private method to handle an assign target node.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__visitLoop">__visitLoop</a></td>
+<td>Private method to handle loop nodes.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.__visitWithStack">__visitWithStack</a></td>
+<td>Private method to traverse a given function node using a stack.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.assigns">assigns</a></td>
+<td>Public method to get the Assign nodes.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.loops">loops</a></td>
+<td>Public method to get the Loop nodes.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.refs">refs</a></td>
+<td>Public method to get the References nodes.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.returns">returns</a></td>
+<td>Public method to get the Return nodes.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.tries">tries</a></td>
+<td>Public method to get the Try nodes.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_Assign">visit_Assign</a></td>
+<td>Public method to handle an assign node.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_AsyncFor">visit_AsyncFor</a></td>
+<td>Public method to handle an async for loop.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
+<td>Public method to handle a function definition.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_For">visit_For</a></td>
+<td>Public method to handle a for loop.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_FunctionDef">visit_FunctionDef</a></td>
+<td>Public method to handle a function definition.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_Name">visit_Name</a></td>
+<td>Public method to handle a name node.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_Return">visit_Return</a></td>
+<td>Public method to handle a return node.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_Try">visit_Try</a></td>
+<td>Public method to handle a try/except node.</td>
+</tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_While">visit_While</a></td>
+<td>Public method to handle a while loop.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="ReturnVisitor.__init__" ID="ReturnVisitor.__init__"></a>
+<h4>ReturnVisitor (Constructor)</h4>
+<b>ReturnVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="ReturnVisitor.__checkFunction" ID="ReturnVisitor.__checkFunction"></a>
+<h4>ReturnVisitor.__checkFunction</h4>
+<b>__checkFunction</b>(<i>node</i>)
+<p>
+        Private method to check a function definition node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AsyncFunctionDef or ast.FunctionDef)</dt>
+<dd>
+reference to the node to check
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__checkImplicitReturn" ID="ReturnVisitor.__checkImplicitReturn"></a>
+<h4>ReturnVisitor.__checkImplicitReturn</h4>
+<b>__checkImplicitReturn</b>(<i>node</i>)
+<p>
+        Private method to check for an implicit return statement.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to check
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__checkImplicitReturnValue" ID="ReturnVisitor.__checkImplicitReturnValue"></a>
+<h4>ReturnVisitor.__checkImplicitReturnValue</h4>
+<b>__checkImplicitReturnValue</b>(<i></i>)
+<p>
+        Private method to check for implicit return values.
+</p>
+
+<a NAME="ReturnVisitor.__checkUnnecessaryAssign" ID="ReturnVisitor.__checkUnnecessaryAssign"></a>
+<h4>ReturnVisitor.__checkUnnecessaryAssign</h4>
+<b>__checkUnnecessaryAssign</b>(<i>node</i>)
+<p>
+        Private method to check for an unnecessary assign statement.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to check
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__checkUnnecessaryReturnNone" ID="ReturnVisitor.__checkUnnecessaryReturnNone"></a>
+<h4>ReturnVisitor.__checkUnnecessaryReturnNone</h4>
+<b>__checkUnnecessaryReturnNone</b>(<i></i>)
+<p>
+        Private method to check for an unnecessary 'return None' statement.
+</p>
+
+<a NAME="ReturnVisitor.__hasRefsBeforeNextAssign" ID="ReturnVisitor.__hasRefsBeforeNextAssign"></a>
+<h4>ReturnVisitor.__hasRefsBeforeNextAssign</h4>
+<b>__hasRefsBeforeNextAssign</b>(<i>varname, returnLineno</i>)
+<p>
+        Private method to check for references before a following assign
+        statement.
+</p>
+
+<dl>
+
+<dt><i>varname</i> (str)</dt>
+<dd>
+variable name to check for
+</dd>
+<dt><i>returnLineno</i> (int)</dt>
+<dd>
+line number of the return statement
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the existence of references
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__hasRefsOrAssignsWithinTryOrLoop" ID="ReturnVisitor.__hasRefsOrAssignsWithinTryOrLoop"></a>
+<h4>ReturnVisitor.__hasRefsOrAssignsWithinTryOrLoop</h4>
+<b>__hasRefsOrAssignsWithinTryOrLoop</b>(<i>varname: str</i>)
+<p>
+        Private method to check for references or assignments in exception handlers
+        or loops.
+</p>
+
+<dl>
+
+<dt><i>varname</i> (str)</dt>
+<dd>
+name of the variable to check for
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a reference or assignment
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__isFalse" ID="ReturnVisitor.__isFalse"></a>
+<h4>ReturnVisitor.__isFalse</h4>
+<b>__isFalse</b>(<i>node</i>)
+<p>
+        Private method to check, if a node value is False.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to check
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the node contains a False value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__isNone" ID="ReturnVisitor.__isNone"></a>
+<h4>ReturnVisitor.__isNone</h4>
+<b>__isNone</b>(<i>node</i>)
+<p>
+        Private method to check, if a node value is None.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to check
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the node contains a None value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__resultExists" ID="ReturnVisitor.__resultExists"></a>
+<h4>ReturnVisitor.__resultExists</h4>
+<b>__resultExists</b>(<i></i>)
+<p>
+        Private method to check the existance of a return result.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating the existence of a return result
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__visitAssignTarget" ID="ReturnVisitor.__visitAssignTarget"></a>
+<h4>ReturnVisitor.__visitAssignTarget</h4>
+<b>__visitAssignTarget</b>(<i>node</i>)
+<p>
+        Private method to handle an assign target node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__visitLoop" ID="ReturnVisitor.__visitLoop"></a>
+<h4>ReturnVisitor.__visitLoop</h4>
+<b>__visitLoop</b>(<i>node</i>)
+<p>
+        Private method to handle loop nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.For, ast.AsyncFor or ast.While)</dt>
+<dd>
+reference to the loop node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.__visitWithStack" ID="ReturnVisitor.__visitWithStack"></a>
+<h4>ReturnVisitor.__visitWithStack</h4>
+<b>__visitWithStack</b>(<i>node</i>)
+<p>
+        Private method to traverse a given function node using a stack.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef or ast.AsyncFunctionDef)</dt>
+<dd>
+AST node to be traversed
+</dd>
+</dl>
+<a NAME="ReturnVisitor.assigns" ID="ReturnVisitor.assigns"></a>
+<h4>ReturnVisitor.assigns</h4>
+<b>assigns</b>(<i></i>)
+<p>
+        Public method to get the Assign nodes.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the node name as key and line number
+            as value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="ReturnVisitor.loops" ID="ReturnVisitor.loops"></a>
+<h4>ReturnVisitor.loops</h4>
+<b>loops</b>(<i></i>)
+<p>
+        Public method to get the Loop nodes.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the node name as key and line number
+            as value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="ReturnVisitor.refs" ID="ReturnVisitor.refs"></a>
+<h4>ReturnVisitor.refs</h4>
+<b>refs</b>(<i></i>)
+<p>
+        Public method to get the References nodes.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the node name as key and line number
+            as value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="ReturnVisitor.returns" ID="ReturnVisitor.returns"></a>
+<h4>ReturnVisitor.returns</h4>
+<b>returns</b>(<i></i>)
+<p>
+        Public method to get the Return nodes.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the node name as key and line number
+            as value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="ReturnVisitor.tries" ID="ReturnVisitor.tries"></a>
+<h4>ReturnVisitor.tries</h4>
+<b>tries</b>(<i></i>)
+<p>
+        Public method to get the Try nodes.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing the node name as key and line number
+            as value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_Assign" ID="ReturnVisitor.visit_Assign"></a>
+<h4>ReturnVisitor.visit_Assign</h4>
+<b>visit_Assign</b>(<i>node</i>)
+<p>
+        Public method to handle an assign node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Assign)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_AsyncFor" ID="ReturnVisitor.visit_AsyncFor"></a>
+<h4>ReturnVisitor.visit_AsyncFor</h4>
+<b>visit_AsyncFor</b>(<i>node</i>)
+<p>
+        Public method to handle an async for loop.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AsyncFor)</dt>
+<dd>
+reference to the async for node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_AsyncFunctionDef" ID="ReturnVisitor.visit_AsyncFunctionDef"></a>
+<h4>ReturnVisitor.visit_AsyncFunctionDef</h4>
+<b>visit_AsyncFunctionDef</b>(<i>node</i>)
+<p>
+        Public method to handle a function definition.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_For" ID="ReturnVisitor.visit_For"></a>
+<h4>ReturnVisitor.visit_For</h4>
+<b>visit_For</b>(<i>node</i>)
+<p>
+        Public method to handle a for loop.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.For)</dt>
+<dd>
+reference to the for node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_FunctionDef" ID="ReturnVisitor.visit_FunctionDef"></a>
+<h4>ReturnVisitor.visit_FunctionDef</h4>
+<b>visit_FunctionDef</b>(<i>node</i>)
+<p>
+        Public method to handle a function definition.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_Name" ID="ReturnVisitor.visit_Name"></a>
+<h4>ReturnVisitor.visit_Name</h4>
+<b>visit_Name</b>(<i>node</i>)
+<p>
+        Public method to handle a name node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Name)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_Return" ID="ReturnVisitor.visit_Return"></a>
+<h4>ReturnVisitor.visit_Return</h4>
+<b>visit_Return</b>(<i>node</i>)
+<p>
+        Public method to handle a return node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Return)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_Try" ID="ReturnVisitor.visit_Try"></a>
+<h4>ReturnVisitor.visit_Try</h4>
+<b>visit_Try</b>(<i>node</i>)
+<p>
+        Public method to handle a try/except node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Try)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="ReturnVisitor.visit_While" ID="ReturnVisitor.visit_While"></a>
+<h4>ReturnVisitor.visit_While</h4>
+<b>visit_While</b>(<i>node</i>)
+<p>
+        Public method to handle a while loop.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.While)</dt>
+<dd>
+reference to the while node to handle
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,237 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor</h1>
+<p>
+Module implementing a node visitor to check the use of sys.version and sys.version_info.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#SysVersionVisitor">SysVersionVisitor</a></td>
+<td>Class implementing a node visitor to check the use of sys.version and sys.version_info.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="SysVersionVisitor" ID="SysVersionVisitor"></a>
+<h2>SysVersionVisitor</h2>
+<p>
+    Class implementing a node visitor to check the use of sys.version and
+    sys.version_info.
+</p>
+<p>
+    Note: This class is modeled after flake8-2020 v1.8.1.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#SysVersionVisitor.__init__">SysVersionVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#SysVersionVisitor.__isSys">__isSys</a></td>
+<td>Private method to check for a reference to sys attribute.</td>
+</tr>
+<tr>
+<td><a href="#SysVersionVisitor.__isSysVersionUpperSlice">__isSysVersionUpperSlice</a></td>
+<td>Private method to check the upper slice of sys.version.</td>
+</tr>
+<tr>
+<td><a href="#SysVersionVisitor.visit_Attribute">visit_Attribute</a></td>
+<td>Public method to handle an attribute.</td>
+</tr>
+<tr>
+<td><a href="#SysVersionVisitor.visit_Compare">visit_Compare</a></td>
+<td>Public method to handle a comparison.</td>
+</tr>
+<tr>
+<td><a href="#SysVersionVisitor.visit_ImportFrom">visit_ImportFrom</a></td>
+<td>Public method to handle a from ...</td>
+</tr>
+<tr>
+<td><a href="#SysVersionVisitor.visit_Name">visit_Name</a></td>
+<td>Public method to handle an name.</td>
+</tr>
+<tr>
+<td><a href="#SysVersionVisitor.visit_Subscript">visit_Subscript</a></td>
+<td>Public method to handle a subscript.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="SysVersionVisitor.__init__" ID="SysVersionVisitor.__init__"></a>
+<h4>SysVersionVisitor (Constructor)</h4>
+<b>SysVersionVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="SysVersionVisitor.__isSys" ID="SysVersionVisitor.__isSys"></a>
+<h4>SysVersionVisitor.__isSys</h4>
+<b>__isSys</b>(<i>attr, node</i>)
+<p>
+        Private method to check for a reference to sys attribute.
+</p>
+
+<dl>
+
+<dt><i>attr</i> (str)</dt>
+<dd>
+attribute name
+</dd>
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+reference to the node to be checked
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a match
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="SysVersionVisitor.__isSysVersionUpperSlice" ID="SysVersionVisitor.__isSysVersionUpperSlice"></a>
+<h4>SysVersionVisitor.__isSysVersionUpperSlice</h4>
+<b>__isSysVersionUpperSlice</b>(<i>node, n</i>)
+<p>
+        Private method to check the upper slice of sys.version.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+reference to the node to be checked
+</dd>
+<dt><i>n</i> (int)</dt>
+<dd>
+slice value to check against
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a match
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<a NAME="SysVersionVisitor.visit_Attribute" ID="SysVersionVisitor.visit_Attribute"></a>
+<h4>SysVersionVisitor.visit_Attribute</h4>
+<b>visit_Attribute</b>(<i>node</i>)
+<p>
+        Public method to handle an attribute.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Attribute)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="SysVersionVisitor.visit_Compare" ID="SysVersionVisitor.visit_Compare"></a>
+<h4>SysVersionVisitor.visit_Compare</h4>
+<b>visit_Compare</b>(<i>node</i>)
+<p>
+        Public method to handle a comparison.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Compare)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="SysVersionVisitor.visit_ImportFrom" ID="SysVersionVisitor.visit_ImportFrom"></a>
+<h4>SysVersionVisitor.visit_ImportFrom</h4>
+<b>visit_ImportFrom</b>(<i>node</i>)
+<p>
+        Public method to handle a from ... import ... statement.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ImportFrom)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="SysVersionVisitor.visit_Name" ID="SysVersionVisitor.visit_Name"></a>
+<h4>SysVersionVisitor.visit_Name</h4>
+<b>visit_Name</b>(<i>node</i>)
+<p>
+        Public method to handle an name.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Name)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="SysVersionVisitor.visit_Subscript" ID="SysVersionVisitor.visit_Subscript"></a>
+<h4>SysVersionVisitor.visit_Subscript</h4>
+<b>visit_Subscript</b>(<i>node</i>)
+<p>
+        Public method to handle a subscript.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Subscript)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,245 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor</h1>
+<p>
+Module implementing a node visitor for bytes and str instances.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#TextVisitor">TextVisitor</a></td>
+<td>Class implementing a node visitor for bytes and str instances.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="TextVisitor" ID="TextVisitor"></a>
+<h2>TextVisitor</h2>
+<p>
+    Class implementing a node visitor for bytes and str instances.
+</p>
+<p>
+    It tries to detect docstrings as string of the first expression of each
+    module, class or function.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#TextVisitor.__init__">TextVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.__addNode">__addNode</a></td>
+<td>Private method to add a node to our list of nodes.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.__visitBody">__visitBody</a></td>
+<td>Private method to traverse the body of the node manually.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.__visitDefinition">__visitDefinition</a></td>
+<td>Private method handling class and function definitions.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
+<td>Public method to handle an asynchronous function definition.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.visit_Call">visit_Call</a></td>
+<td>Public method to handle a function call.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.visit_ClassDef">visit_ClassDef</a></td>
+<td>Public method to handle a class definition.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.visit_Constant">visit_Constant</a></td>
+<td>Public method to handle constant nodes.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.visit_FunctionDef">visit_FunctionDef</a></td>
+<td>Public method to handle a function definition.</td>
+</tr>
+<tr>
+<td><a href="#TextVisitor.visit_Module">visit_Module</a></td>
+<td>Public method to handle a module.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="TextVisitor.__init__" ID="TextVisitor.__init__"></a>
+<h4>TextVisitor (Constructor)</h4>
+<b>TextVisitor</b>(<i></i>)
+<p>
+        Constructor
+</p>
+
+<a NAME="TextVisitor.__addNode" ID="TextVisitor.__addNode"></a>
+<h4>TextVisitor.__addNode</h4>
+<b>__addNode</b>(<i>node</i>)
+<p>
+        Private method to add a node to our list of nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to add
+</dd>
+</dl>
+<a NAME="TextVisitor.__visitBody" ID="TextVisitor.__visitBody"></a>
+<h4>TextVisitor.__visitBody</h4>
+<b>__visitBody</b>(<i>node</i>)
+<p>
+        Private method to traverse the body of the node manually.
+</p>
+<p>
+        If the first node is an expression which contains a string or bytes it
+        marks that as a docstring.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to traverse
+</dd>
+</dl>
+<a NAME="TextVisitor.__visitDefinition" ID="TextVisitor.__visitDefinition"></a>
+<h4>TextVisitor.__visitDefinition</h4>
+<b>__visitDefinition</b>(<i>node</i>)
+<p>
+        Private method handling class and function definitions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef, ast.AsyncFunctionDef or ast.ClassDef)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="TextVisitor.visit_AsyncFunctionDef" ID="TextVisitor.visit_AsyncFunctionDef"></a>
+<h4>TextVisitor.visit_AsyncFunctionDef</h4>
+<b>visit_AsyncFunctionDef</b>(<i>node</i>)
+<p>
+        Public method to handle an asynchronous function definition.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="TextVisitor.visit_Call" ID="TextVisitor.visit_Call"></a>
+<h4>TextVisitor.visit_Call</h4>
+<b>visit_Call</b>(<i>node</i>)
+<p>
+        Public method to handle a function call.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="TextVisitor.visit_ClassDef" ID="TextVisitor.visit_ClassDef"></a>
+<h4>TextVisitor.visit_ClassDef</h4>
+<b>visit_ClassDef</b>(<i>node</i>)
+<p>
+        Public method to handle a class definition.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="TextVisitor.visit_Constant" ID="TextVisitor.visit_Constant"></a>
+<h4>TextVisitor.visit_Constant</h4>
+<b>visit_Constant</b>(<i>node</i>)
+<p>
+        Public method to handle constant nodes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Constant)</dt>
+<dd>
+reference to the bytes node
+</dd>
+</dl>
+<a NAME="TextVisitor.visit_FunctionDef" ID="TextVisitor.visit_FunctionDef"></a>
+<h4>TextVisitor.visit_FunctionDef</h4>
+<b>visit_FunctionDef</b>(<i>node</i>)
+<p>
+        Public method to handle a function definition.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<a NAME="TextVisitor.visit_Module" ID="TextVisitor.visit_Module"></a>
+<h4>TextVisitor.visit_Module</h4>
+<b>visit_Module</b>(<i>node</i>)
+<p>
+        Public method to handle a module.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Module)</dt>
+<dd>
+reference to the node to handle
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.NameOrder.NameOrderChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -42,9 +42,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -68,10 +69,6 @@
 <td>Private method to check the order of import statements and handled exceptions.</td>
 </tr>
 <tr>
-<td><a href="#NameOrderChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
 <td><a href="#NameOrderChecker.__findErrorInAll">__findErrorInAll</a></td>
 <td>Private method to check the '__all__' node for errors.</td>
 </tr>
@@ -92,10 +89,6 @@
 <td>Private method to find all import and import from nodes of the given tree.</td>
 </tr>
 <tr>
-<td><a href="#NameOrderChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
 <td><a href="#NameOrderChecker.__naturalKeys">__naturalKeys</a></td>
 <td>Private method to generate keys for natural sorting.</td>
 </tr>
@@ -112,10 +105,6 @@
 <td>Public method to generate a key for the given module name.</td>
 </tr>
 <tr>
-<td><a href="#NameOrderChecker.run">run</a></td>
-<td>Public method to check the given source against miscellaneous conditions.</td>
-</tr>
-<tr>
 <td><a href="#NameOrderChecker.sorted">sorted</a></td>
 <td>Public method to sort the given list of names.</td>
 </tr>
@@ -202,32 +191,6 @@
         Private method to check the order of import statements and handled exceptions.
 </p>
 
-<a NAME="NameOrderChecker.__error" ID="NameOrderChecker.__error"></a>
-<h4>NameOrderChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
 <a NAME="NameOrderChecker.__findErrorInAll" ID="NameOrderChecker.__findErrorInAll"></a>
 <h4>NameOrderChecker.__findErrorInAll</h4>
 <b>__findErrorInAll</b>(<i>node</i>)
@@ -245,7 +208,7 @@
 <dl>
 <dt>Return:</dt>
 <dd>
-tuple containing a reference to the node an error code and the error
+tuple containing a reference to the node, an error code and the error
             arguments
 </dd>
 </dl>
@@ -362,32 +325,6 @@
             ast.List | ast.Tuple)
 </dd>
 </dl>
-<a NAME="NameOrderChecker.__ignoreCode" ID="NameOrderChecker.__ignoreCode"></a>
-<h4>NameOrderChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="NameOrderChecker.__naturalKeys" ID="NameOrderChecker.__naturalKeys"></a>
 <h4>NameOrderChecker.__naturalKeys</h4>
 <b>__naturalKeys</b>(<i>text</i>)
@@ -488,14 +425,6 @@
 str
 </dd>
 </dl>
-<a NAME="NameOrderChecker.run" ID="NameOrderChecker.run"></a>
-<h4>NameOrderChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against miscellaneous
-        conditions.
-</p>
-
 <a NAME="NameOrderChecker.sorted" ID="NameOrderChecker.sorted"></a>
 <h4>NameOrderChecker.sorted</h4>
 <b>sorted</b>(<i>toSort, key=None, reverse=False</i>)
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Naming.NamingStyleChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -38,9 +38,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -53,7 +54,7 @@
 <table>
 <tr>
 <td><a href="#NamingStyleChecker.__init__">NamingStyleChecker</a></td>
-<td>Constructor (according to 'extended' pycodestyle.py API)</td>
+<td>Constructor</td>
 </tr>
 <tr>
 <td><a href="#NamingStyleChecker.__checkClassName">__checkClassName</a></td>
@@ -88,10 +89,6 @@
 <td>Private method to determine the error code for a variable in class scope.</td>
 </tr>
 <tr>
-<td><a href="#NamingStyleChecker.__error">__error</a></td>
-<td>Private method to build the error information.</td>
-</tr>
-<tr>
 <td><a href="#NamingStyleChecker.__extractNames">__extractNames</a></td>
 <td>Private method to extract the names from the target node.</td>
 </tr>
@@ -148,8 +145,12 @@
 <td>Private method to scan the given AST tree.</td>
 </tr>
 <tr>
+<td><a href="#NamingStyleChecker.addErrorFromNode">addErrorFromNode</a></td>
+<td>Public method to build the error information.</td>
+</tr>
+<tr>
 <td><a href="#NamingStyleChecker.run">run</a></td>
-<td>Public method run by the pycodestyle.py checker.</td>
+<td>Public method to execute the relevant checks.</td>
 </tr>
 </table>
 
@@ -161,24 +162,44 @@
 
 <a NAME="NamingStyleChecker.__init__" ID="NamingStyleChecker.__init__"></a>
 <h4>NamingStyleChecker (Constructor)</h4>
-<b>NamingStyleChecker</b>(<i>tree, filename, options</i>)
+<b>NamingStyleChecker</b>(<i>source, filename, tree, select, ignore, expected, repeat, args</i>)
 <p>
-        Constructor (according to 'extended' pycodestyle.py API)
+        Constructor
 </p>
 
 <dl>
 
-<dt><i>tree</i> (ast.AST)</dt>
+<dt><i>source</i> (list of str)</dt>
 <dd>
-AST tree of the source file
+source code to be checked
 </dd>
 <dt><i>filename</i> (str)</dt>
 <dd>
 name of the source file
 </dd>
-<dt><i>options</i> (optparse.Option)</dt>
+<dt><i>tree</i> (ast.Module)</dt>
+<dd>
+AST tree of the source code
+</dd>
+<dt><i>select</i> (list of str)</dt>
+<dd>
+list of selected codes
+</dd>
+<dt><i>ignore</i> (list of str)</dt>
 <dd>
-options as parsed by pycodestyle.StyleGuide
+list of codes to be ignored
+</dd>
+<dt><i>expected</i> (list of str)</dt>
+<dd>
+list of expected codes
+</dd>
+<dt><i>repeat</i> (bool)</dt>
+<dd>
+flag indicating to report each occurrence of a code
+</dd>
+<dt><i>args</i> (dict)</dt>
+<dd>
+dictionary of arguments for the various checks
 </dd>
 </dl>
 <a NAME="NamingStyleChecker.__checkClassName" ID="NamingStyleChecker.__checkClassName"></a>
@@ -204,18 +225,6 @@
 list of parent nodes
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__checkFunctionArgumentNames" ID="NamingStyleChecker.__checkFunctionArgumentNames"></a>
 <h4>NamingStyleChecker.__checkFunctionArgumentNames</h4>
 <b>__checkFunctionArgumentNames</b>(<i>node, _parents</i>)
@@ -240,18 +249,6 @@
 list of parent nodes (unused)
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__checkFunctionName" ID="NamingStyleChecker.__checkFunctionName"></a>
 <h4>NamingStyleChecker.__checkFunctionName</h4>
 <b>__checkFunctionName</b>(<i>node, _parents</i>)
@@ -278,18 +275,6 @@
 list of parent nodes (unused)
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__checkImportAs" ID="NamingStyleChecker.__checkImportAs"></a>
 <h4>NamingStyleChecker.__checkImportAs</h4>
 <b>__checkImportAs</b>(<i>node, _parents</i>)
@@ -309,18 +294,6 @@
 list of parent nodes (unused)
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__checkModule" ID="NamingStyleChecker.__checkModule"></a>
 <h4>NamingStyleChecker.__checkModule</h4>
 <b>__checkModule</b>(<i>node, _parents</i>)
@@ -342,18 +315,6 @@
 list of parent nodes (unused)
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__checkNameToBeAvoided" ID="NamingStyleChecker.__checkNameToBeAvoided"></a>
 <h4>NamingStyleChecker.__checkNameToBeAvoided</h4>
 <b>__checkNameToBeAvoided</b>(<i>node, _parents</i>)
@@ -372,18 +333,6 @@
 list of parent nodes (unused)
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__checkVariableNames" ID="NamingStyleChecker.__checkVariableNames"></a>
 <h4>NamingStyleChecker.__checkVariableNames</h4>
 <b>__checkVariableNames</b>(<i>node, parents</i>)
@@ -406,18 +355,6 @@
 list of parent nodes
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__classVariableCheck" ID="NamingStyleChecker.__classVariableCheck"></a>
 <h4>NamingStyleChecker.__classVariableCheck</h4>
 <b>__classVariableCheck</b>(<i>name</i>)
@@ -444,36 +381,6 @@
 str or None
 </dd>
 </dl>
-<a NAME="NamingStyleChecker.__error" ID="NamingStyleChecker.__error"></a>
-<h4>NamingStyleChecker.__error</h4>
-<b>__error</b>(<i>node, code</i>)
-<p>
-        Private method to build the error information.
-</p>
-
-<dl>
-
-<dt><i>node</i> (ast.AST)</dt>
-<dd>
-AST node to report an error for
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-error code to report
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__extractNames" ID="NamingStyleChecker.__extractNames"></a>
 <h4>NamingStyleChecker.__extractNames</h4>
 <b>__extractNames</b>(<i>assignmentTarget</i>)
@@ -532,18 +439,6 @@
 list of parent nodes
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__functionVariableCheck" ID="NamingStyleChecker.__functionVariableCheck"></a>
 <h4>NamingStyleChecker.__functionVariableCheck</h4>
 <b>__functionVariableCheck</b>(<i>func, varName</i>)
@@ -797,18 +692,6 @@
 AST tree node to inspect
 </dd>
 </dl>
-<dl>
-<dt>Yield:</dt>
-<dd>
-tuple giving line number, offset within line and error code
-</dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
-<dd>
-tuple of (int, int, str)
-</dd>
-</dl>
 <a NAME="NamingStyleChecker.__visitTree" ID="NamingStyleChecker.__visitTree"></a>
 <h4>NamingStyleChecker.__visitTree</h4>
 <b>__visitTree</b>(<i>node</i>)
@@ -823,38 +706,31 @@
 AST tree node to scan
 </dd>
 </dl>
+<a NAME="NamingStyleChecker.addErrorFromNode" ID="NamingStyleChecker.addErrorFromNode"></a>
+<h4>NamingStyleChecker.addErrorFromNode</h4>
+<b>addErrorFromNode</b>(<i>node, msgCode</i>)
+<p>
+        Public method to build the error information.
+</p>
+
 <dl>
-<dt>Yield:</dt>
+
+<dt><i>node</i> (ast.AST)</dt>
 <dd>
-tuple giving line number, offset within line and error code
+AST node to report an error for
 </dd>
-</dl>
-<dl>
-<dt>Yield Type:</dt>
+<dt><i>msgCode</i> (str)</dt>
 <dd>
-tuple of (int, int, str)
+message code
 </dd>
 </dl>
 <a NAME="NamingStyleChecker.run" ID="NamingStyleChecker.run"></a>
 <h4>NamingStyleChecker.run</h4>
 <b>run</b>(<i></i>)
 <p>
-        Public method run by the pycodestyle.py checker.
+        Public method to execute the relevant checks.
 </p>
 
-<dl>
-<dt>Return:</dt>
-<dd>
-tuple giving line number, offset within line, code and
-            checker function
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-tuple of (int, int, str, function)
-</dd>
-</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.PathLib.PathlibChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -156,9 +156,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 <tr><td>Function2Code</td></tr>
 </table>
@@ -179,16 +180,8 @@
 <td>Private method to check the given node for the need for a replacement.</td>
 </tr>
 <tr>
-<td><a href="#PathlibChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
-<td><a href="#PathlibChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
-<td><a href="#PathlibChecker.run">run</a></td>
-<td>Public method to check the given source against functions to be replaced by 'pathlib' equivalents.</td>
+<td><a href="#PathlibChecker.__checkPathlibReplacement">__checkPathlibReplacement</a></td>
+<td>Private method to check for pathlib replacements.</td>
 </tr>
 </table>
 
@@ -255,64 +248,11 @@
 resolved name of the node
 </dd>
 </dl>
-<a NAME="PathlibChecker.__error" ID="PathlibChecker.__error"></a>
-<h4>PathlibChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
+<a NAME="PathlibChecker.__checkPathlibReplacement" ID="PathlibChecker.__checkPathlibReplacement"></a>
+<h4>PathlibChecker.__checkPathlibReplacement</h4>
+<b>__checkPathlibReplacement</b>(<i></i>)
 <p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
-<a NAME="PathlibChecker.__ignoreCode" ID="PathlibChecker.__ignoreCode"></a>
-<h4>PathlibChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="PathlibChecker.run" ID="PathlibChecker.run"></a>
-<h4>PathlibChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against functions
-        to be replaced by 'pathlib' equivalents.
+        Private method to check for pathlib replacements.
 </p>
 
 <div align="right"><a href="#top">Up</a></div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker</h1>
+<p>
+Module implementing a checker for pydantic related issues.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#PydanticChecker">PydanticChecker</a></td>
+<td>Class implementing a checker for pydantic related issues.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="PydanticChecker" ID="PydanticChecker"></a>
+<h2>PydanticChecker</h2>
+<p>
+    Class implementing a checker for pydantic related issues.
+</p>
+
+<h3>Derived from</h3>
+CodeStyleTopicChecker
+<h3>Class Attributes</h3>
+<table>
+<tr><td>Category</td></tr>
+<tr><td>Codes</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#PydanticChecker.__init__">PydanticChecker</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#PydanticChecker.__checkPydantic">__checkPydantic</a></td>
+<td>Private method to check pydantic related topics.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="PydanticChecker.__init__" ID="PydanticChecker.__init__"></a>
+<h4>PydanticChecker (Constructor)</h4>
+<b>PydanticChecker</b>(<i>source, filename, tree, select, ignore, expected, repeat, args</i>)
+<p>
+        Constructor
+</p>
+
+<dl>
+
+<dt><i>source</i> (list of str)</dt>
+<dd>
+source code to be checked
+</dd>
+<dt><i>filename</i> (str)</dt>
+<dd>
+name of the source file
+</dd>
+<dt><i>tree</i> (ast.Module)</dt>
+<dd>
+AST tree of the source code
+</dd>
+<dt><i>select</i> (list of str)</dt>
+<dd>
+list of selected codes
+</dd>
+<dt><i>ignore</i> (list of str)</dt>
+<dd>
+list of codes to be ignored
+</dd>
+<dt><i>expected</i> (list of str)</dt>
+<dd>
+list of expected codes
+</dd>
+<dt><i>repeat</i> (bool)</dt>
+<dd>
+flag indicating to report each occurrence of a code
+</dd>
+<dt><i>args</i> (dict)</dt>
+<dd>
+dictionary of arguments for the various checks
+</dd>
+</dl>
+<a NAME="PydanticChecker.__checkPydantic" ID="PydanticChecker.__checkPydantic"></a>
+<h4>PydanticChecker.__checkPydantic</h4>
+<b>__checkPydantic</b>(<i></i>)
+<p>
+        Private method to check pydantic related topics.
+</p>
+
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,461 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils</h1>
+<p>
+Module implementing utility functions for the PydanticVisitor class.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>PYDANTIC_DECORATORS</td></tr>
+<tr><td>PYDANTIC_FIELD_ARGUMENTS</td></tr>
+<tr><td>PYDANTIC_METHODS</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#_hasAnnotatedField">_hasAnnotatedField</a></td>
+<td>Function to check if the class has a field making use of `Annotated`.</td>
+</tr>
+<tr>
+<td><a href="#_hasFieldFunction">_hasFieldFunction</a></td>
+<td>Function to check, if the class has a field defined with the `Field` function.</td>
+</tr>
+<tr>
+<td><a href="#_hasModelConfig">_hasModelConfig</a></td>
+<td>Function to check, if the class has a `model_config` attribute set.</td>
+</tr>
+<tr>
+<td><a href="#_hasPydanticDecorator">_hasPydanticDecorator</a></td>
+<td>Function to check, if the class makes use of Pydantic decorators, such as `computed_field` or `model_validator`.</td>
+</tr>
+<tr>
+<td><a href="#_hasPydanticMethod">_hasPydanticMethod</a></td>
+<td>Function to check, if the class overrides any of the Pydantic methods, such as `model_dump`.</td>
+</tr>
+<tr>
+<td><a href="#_hasPydanticModelBase">_hasPydanticModelBase</a></td>
+<td>Function to check, if a class definition inherits from Pydantic model classes.</td>
+</tr>
+<tr>
+<td><a href="#extractAnnotations">extractAnnotations</a></td>
+<td>Function to extract the annotations of an expression.</td>
+</tr>
+<tr>
+<td><a href="#getDecoratorNames">getDecoratorNames</a></td>
+<td>Function to extract the set of decorator names.</td>
+</tr>
+<tr>
+<td><a href="#isDataclass">isDataclass</a></td>
+<td>Function to check, if a class is a dataclass.</td>
+</tr>
+<tr>
+<td><a href="#isFunction">isFunction</a></td>
+<td>Function to check, if a function call is referencing a given function name.</td>
+</tr>
+<tr>
+<td><a href="#isName">isName</a></td>
+<td>Function to check, if an expression is referencing a given name.</td>
+</tr>
+<tr>
+<td><a href="#isPydanticModel">isPydanticModel</a></td>
+<td>Function to determine if a class definition is a Pydantic model.</td>
+</tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="_hasAnnotatedField" ID="_hasAnnotatedField"></a>
+<h2>_hasAnnotatedField</h2>
+<b>_hasAnnotatedField</b>(<i>node</i>)
+<p>
+    Function to check if the class has a field making use of `Annotated`.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the class has a field making use of `Annotated`
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_hasFieldFunction" ID="_hasFieldFunction"></a>
+<h2>_hasFieldFunction</h2>
+<b>_hasFieldFunction</b>(<i>node</i>)
+<p>
+    Function to check, if the class has a field defined with the `Field` function.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the class has a field defined with the `Field` function
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_hasModelConfig" ID="_hasModelConfig"></a>
+<h2>_hasModelConfig</h2>
+<b>_hasModelConfig</b>(<i>node</i>)
+<p>
+    Function to check, if the class has a `model_config` attribute set.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the class has a `model_config` attribute set
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_hasPydanticDecorator" ID="_hasPydanticDecorator"></a>
+<h2>_hasPydanticDecorator</h2>
+<b>_hasPydanticDecorator</b>(<i>node</i>)
+<p>
+    Function to check, if the class makes use of Pydantic decorators, such as
+    `computed_field` or `model_validator`.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the class makes use of Pydantic decorators, such as
+        `computed_field` or `model_validator`.
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_hasPydanticMethod" ID="_hasPydanticMethod"></a>
+<h2>_hasPydanticMethod</h2>
+<b>_hasPydanticMethod</b>(<i>node: ast.ClassDef</i>)
+<p>
+    Function to check, if the class overrides any of the Pydantic methods, such as
+    `model_dump`.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that class overrides any of the Pydantic methods, such as
+        `model_dump`
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_hasPydanticModelBase" ID="_hasPydanticModelBase"></a>
+<h2>_hasPydanticModelBase</h2>
+<b>_hasPydanticModelBase</b>(<i>node, *, includeRootModel</i>)
+<p>
+    Function to check, if a class definition inherits from Pydantic model classes.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+<dt><i>includeRootModel=</i> (bool)</dt>
+<dd>
+flag indicating to include the root model
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the class definition inherits from a Pydantic model
+        class
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="extractAnnotations" ID="extractAnnotations"></a>
+<h2>extractAnnotations</h2>
+<b>extractAnnotations</b>(<i>node</i>)
+<p>
+    Function to extract the annotations of an expression.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.expr)</dt>
+<dd>
+reference to the node to be be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+set containing the annotation names
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+set[str]
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="getDecoratorNames" ID="getDecoratorNames"></a>
+<h2>getDecoratorNames</h2>
+<b>getDecoratorNames</b>(<i>decoratorList</i>)
+<p>
+    Function to extract the set of decorator names.
+</p>
+
+<dl>
+
+<dt><i>decoratorList</i> (list of ast.expr)</dt>
+<dd>
+list of decorators to be processed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+set containing the decorator names
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+set of str
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="isDataclass" ID="isDataclass"></a>
+<h2>isDataclass</h2>
+<b>isDataclass</b>(<i>node</i>)
+<p>
+    Function to check, if a class is a dataclass.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the class is a dataclass.
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="isFunction" ID="isFunction"></a>
+<h2>isFunction</h2>
+<b>isFunction</b>(<i>node, functionName</i>)
+<p>
+    Function to check, if a function call is referencing a given function name.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.Call)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+<dt><i>functionName</i> (str)</dt>
+<dd>
+name of the function to check for
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the function call is referencing the given function
+        name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="isName" ID="isName"></a>
+<h2>isName</h2>
+<b>isName</b>(<i>node, name</i>)
+<p>
+    Function to check, if an expression is referencing a given name.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.expr)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+<dt><i>name</i> (str)</dt>
+<dd>
+name to check for
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating that the expression is referencing teh given name
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="isPydanticModel" ID="isPydanticModel"></a>
+<h2>isPydanticModel</h2>
+<b>isPydanticModel</b>(<i>node, *, includeRootModel=True</i>)
+<p>
+    Function to determine if a class definition is a Pydantic model.
+</p>
+<p>
+    Multiple heuristics are use to determine if this is the case:
+    - The class inherits from `BaseModel` (or `RootModel` if `includeRootModel` is
+      `True`).
+    - The class has a `model_config` attribute set.
+    - The class has a field defined with the `Field` function.
+    - The class has a field making use of `Annotated`.
+    - The class makes use of Pydantic decorators, such as `computed_field` or
+      `model_validator`.
+    - The class overrides any of the Pydantic methods, such as `model_dump`.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be be analyzed
+</dd>
+<dt><i>includeRootModel=</i> (bool (optional))</dt>
+<dd>
+flag indicating to include the root model
+        (defaults to True)
+</dd>
+</dl>
+<dl>
+<dt>Return:</dt>
+<dd>
+flag indicating a Pydantic model class
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,298 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor</h1>
+<p>
+Module implementing a node visitor to check for pydantic related issues.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr>
+<td><a href="#PydanticVisitor">PydanticVisitor</a></td>
+<td>Class implementing a node visitor to check for pydantic related issues.</td>
+</tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="PydanticVisitor" ID="PydanticVisitor"></a>
+<h2>PydanticVisitor</h2>
+<p>
+    Class implementing a node visitor to check for pydantic related issues.
+</p>
+
+<h3>Derived from</h3>
+ast.NodeVisitor
+<h3>Class Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Class Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Methods</h3>
+<table>
+<tr>
+<td><a href="#PydanticVisitor.__init__">PydanticVisitor</a></td>
+<td>Constructor</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__checkForPyd001">__checkForPyd001</a></td>
+<td>Private method to check positional argument for Field default argument.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__checkForPyd002">__checkForPyd002</a></td>
+<td>Private method to check non-annotated attribute inside Pydantic model.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__checkForPyd003">__checkForPyd003</a></td>
+<td>Private method to check unecessary Field call to specify a default value.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__checkForPyd004">__checkForPyd004</a></td>
+<td>Private method to check for a default argument specified in annotated.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__checkForPyd005">__checkForPyd005</a></td>
+<td>Private method to check for a field name overriding the annotation.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__checkForPyd006">__checkForPyd006</a></td>
+<td>Private method to check for duplicate field names.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__checkForPyd010">__checkForPyd010</a></td>
+<td>Private method to check for the use of `__pydantic_config__`.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__currentClass">__currentClass</a></td>
+<td>Private method returning the current class type as recorded by the __enterClass method.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__enterClass">__enterClass</a></td>
+<td>Private method to record class type when entering a class definition.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.__leaveClass">__leaveClass</a></td>
+<td>Private method to remove the data recorded by the __enterClass method.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.visit_AnnAssign">visit_AnnAssign</a></td>
+<td>Public method to process annotated assignment.</td>
+</tr>
+<tr>
+<td><a href="#PydanticVisitor.visit_ClassDef">visit_ClassDef</a></td>
+<td>Public method to process class definitions.</td>
+</tr>
+</table>
+
+<h3>Static Methods</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+
+<a NAME="PydanticVisitor.__init__" ID="PydanticVisitor.__init__"></a>
+<h4>PydanticVisitor (Constructor)</h4>
+<b>PydanticVisitor</b>(<i>errorCallback</i>)
+<p>
+        Constructor
+</p>
+
+<dl>
+
+<dt><i>errorCallback</i> (func)</dt>
+<dd>
+callback function to register an issue
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__checkForPyd001" ID="PydanticVisitor.__checkForPyd001"></a>
+<h4>PydanticVisitor.__checkForPyd001</h4>
+<b>__checkForPyd001</b>(<i>node: ast.AnnAssign</i>)
+<p>
+        Private method to check positional argument for Field default argument.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AnnAssign)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__checkForPyd002" ID="PydanticVisitor.__checkForPyd002"></a>
+<h4>PydanticVisitor.__checkForPyd002</h4>
+<b>__checkForPyd002</b>(<i>node</i>)
+<p>
+        Private method to check non-annotated attribute inside Pydantic model.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__checkForPyd003" ID="PydanticVisitor.__checkForPyd003"></a>
+<h4>PydanticVisitor.__checkForPyd003</h4>
+<b>__checkForPyd003</b>(<i>node</i>)
+<p>
+        Private method to check unecessary Field call to specify a default value.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AnnAssign)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__checkForPyd004" ID="PydanticVisitor.__checkForPyd004"></a>
+<h4>PydanticVisitor.__checkForPyd004</h4>
+<b>__checkForPyd004</b>(<i>node</i>)
+<p>
+        Private method to check for a default argument specified in annotated.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AnnAssign)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__checkForPyd005" ID="PydanticVisitor.__checkForPyd005"></a>
+<h4>PydanticVisitor.__checkForPyd005</h4>
+<b>__checkForPyd005</b>(<i>node</i>)
+<p>
+        Private method to check for a field name overriding the annotation.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__checkForPyd006" ID="PydanticVisitor.__checkForPyd006"></a>
+<h4>PydanticVisitor.__checkForPyd006</h4>
+<b>__checkForPyd006</b>(<i>node</i>)
+<p>
+        Private method to check for duplicate field names.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__checkForPyd010" ID="PydanticVisitor.__checkForPyd010"></a>
+<h4>PydanticVisitor.__checkForPyd010</h4>
+<b>__checkForPyd010</b>(<i>node: ast.ClassDef</i>)
+<p>
+        Private method to check for the use of `__pydantic_config__`.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__currentClass" ID="PydanticVisitor.__currentClass"></a>
+<h4>PydanticVisitor.__currentClass</h4>
+<b>__currentClass</b>(<i></i>)
+<p>
+        Private method returning the current class type as recorded by the __enterClass
+        method.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+current class type (one of 'pydantic_model', 'dataclass' or
+            'other_class')
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+str
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__enterClass" ID="PydanticVisitor.__enterClass"></a>
+<h4>PydanticVisitor.__enterClass</h4>
+<b>__enterClass</b>(<i>node</i>)
+<p>
+        Private method to record class type when entering a class definition.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
+<a NAME="PydanticVisitor.__leaveClass" ID="PydanticVisitor.__leaveClass"></a>
+<h4>PydanticVisitor.__leaveClass</h4>
+<b>__leaveClass</b>(<i></i>)
+<p>
+        Private method to remove the data recorded by the __enterClass method.
+</p>
+
+<a NAME="PydanticVisitor.visit_AnnAssign" ID="PydanticVisitor.visit_AnnAssign"></a>
+<h4>PydanticVisitor.visit_AnnAssign</h4>
+<b>visit_AnnAssign</b>(<i>node: ast.AnnAssign</i>)
+<p>
+        Public method to process annotated assignment.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.AnnAssign)</dt>
+<dd>
+reference to the node to be processed.
+</dd>
+</dl>
+<a NAME="PydanticVisitor.visit_ClassDef" ID="PydanticVisitor.visit_ClassDef"></a>
+<h4>PydanticVisitor.visit_ClassDef</h4>
+<b>visit_ClassDef</b>(<i>node: ast.ClassDef</i>)
+<p>
+        Public method to process class definitions.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.ClassDef)</dt>
+<dd>
+reference to the node to be processed.
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations</h1>
+<p>
+Module implementing message translations for the code style plugin messages
+(pydantic part).
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>_pydanticMessages</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<hr />
+</body></html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<a NAME="top" ID="top"></a>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions</h1>
+<p>
+Module implementing a check for use of insecure md4, md5, or sha1 hash
+functions in hashlib.
+</p>
+
+<h3>Global Attributes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Classes</h3>
+<table>
+<tr><td>None</td></tr>
+</table>
+
+<h3>Functions</h3>
+<table>
+<tr>
+<td><a href="#_cryptCrypt">_cryptCrypt</a></td>
+<td>Function to check for use of insecure md4, md5, sha or sha1 hash functions in crypt.crypt().</td>
+</tr>
+<tr>
+<td><a href="#_hashlibFunc">_hashlibFunc</a></td>
+<td>Function to check for use of insecure md4, md5, or sha1 hash functions in hashlib if 'usedforsecurity' is not set to 'False'.</td>
+</tr>
+<tr>
+<td><a href="#checkHashlib">checkHashlib</a></td>
+<td>Function to check for use of insecure md4, md5, sha or sha1 hash functions in hashlib.new().</td>
+</tr>
+<tr>
+<td><a href="#getChecks">getChecks</a></td>
+<td>Public method to get a dictionary with checks handled by this module.</td>
+</tr>
+</table>
+
+<hr />
+<hr />
+<a NAME="_cryptCrypt" ID="_cryptCrypt"></a>
+<h2>_cryptCrypt</h2>
+<b>_cryptCrypt</b>(<i>reportError, context, func, config</i>)
+<p>
+    Function to check for use of insecure md4, md5, sha or sha1 hash functions
+    in crypt.crypt().
+</p>
+
+<dl>
+
+<dt><i>reportError</i> (func)</dt>
+<dd>
+function to be used to report errors
+</dd>
+<dt><i>context</i> (SecurityContext)</dt>
+<dd>
+security context object
+</dd>
+<dt><i>func</i> (str)</dt>
+<dd>
+name of the hash function
+</dd>
+<dt><i>config</i> (dict)</dt>
+<dd>
+dictionary with configuration data
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="_hashlibFunc" ID="_hashlibFunc"></a>
+<h2>_hashlibFunc</h2>
+<b>_hashlibFunc</b>(<i>reportError, context, func, config</i>)
+<p>
+    Function to check for use of insecure md4, md5, or sha1 hash functions
+    in hashlib if 'usedforsecurity' is not set to 'False'.
+</p>
+
+<dl>
+
+<dt><i>reportError</i> (func)</dt>
+<dd>
+function to be used to report errors
+</dd>
+<dt><i>context</i> (SecurityContext)</dt>
+<dd>
+security context object
+</dd>
+<dt><i>func</i> (str)</dt>
+<dd>
+name of the hash function
+</dd>
+<dt><i>config</i> (dict)</dt>
+<dd>
+dictionary with configuration data
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="checkHashlib" ID="checkHashlib"></a>
+<h2>checkHashlib</h2>
+<b>checkHashlib</b>(<i>reportError, context, config</i>)
+<p>
+    Function to check for use of insecure md4, md5, sha or sha1 hash functions
+    in hashlib.new().
+</p>
+
+<dl>
+
+<dt><i>reportError</i> (func)</dt>
+<dd>
+function to be used to report errors
+</dd>
+<dt><i>context</i> (SecurityContext)</dt>
+<dd>
+security context object
+</dd>
+<dt><i>config</i> (dict)</dt>
+<dd>
+dictionary with configuration data
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+<hr />
+<a NAME="getChecks" ID="getChecks"></a>
+<h2>getChecks</h2>
+<b>getChecks</b>(<i></i>)
+<p>
+    Public method to get a dictionary with checks handled by this module.
+</p>
+
+<dl>
+<dt>Return:</dt>
+<dd>
+dictionary containing checker lists containing checker function and
+        list of codes
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+dict
+</dd>
+</dl>
+<div align="right"><a href="#top">Up</a></div>
+<hr />
+</body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html	Sun Feb 09 15:47:57 2025 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-<!DOCTYPE html>
-<html><head>
-<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew</title>
-<meta charset="UTF-8">
-<link rel="stylesheet" href="styles.css">
-</head>
-<body>
-<a NAME="top" ID="top"></a>
-<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew</h1>
-<p>
-Module implementing a check for use of insecure md4, md5, or sha1 hash
-functions in hashlib.new().
-</p>
-
-<h3>Global Attributes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Classes</h3>
-<table>
-<tr><td>None</td></tr>
-</table>
-
-<h3>Functions</h3>
-<table>
-<tr>
-<td><a href="#_cryptCrypt">_cryptCrypt</a></td>
-<td>Function to check for use of insecure md4, md5, sha or sha1 hash functions in crypt.crypt().</td>
-</tr>
-<tr>
-<td><a href="#_hashlibFunc">_hashlibFunc</a></td>
-<td>Function to check for use of insecure md4, md5, sha or sha1 hash functions in hashlib.new() if 'usedforsecurity' is not set to 'False'.</td>
-</tr>
-<tr>
-<td><a href="#_hashlibNew">_hashlibNew</a></td>
-<td>Function to check for use of insecure md4, md5, sha or sha1 hash functions in hashlib.new().</td>
-</tr>
-<tr>
-<td><a href="#checkHashlib">checkHashlib</a></td>
-<td>Function to check for use of insecure md4, md5, sha or sha1 hash functions in hashlib.new().</td>
-</tr>
-<tr>
-<td><a href="#getChecks">getChecks</a></td>
-<td>Public method to get a dictionary with checks handled by this module.</td>
-</tr>
-</table>
-
-<hr />
-<hr />
-<a NAME="_cryptCrypt" ID="_cryptCrypt"></a>
-<h2>_cryptCrypt</h2>
-<b>_cryptCrypt</b>(<i>reportError, context, func, config</i>)
-<p>
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in crypt.crypt().
-</p>
-
-<dl>
-
-<dt><i>reportError</i> (func)</dt>
-<dd>
-function to be used to report errors
-</dd>
-<dt><i>context</i> (SecurityContext)</dt>
-<dd>
-security context object
-</dd>
-<dt><i>func</i> (str)</dt>
-<dd>
-name of the hash function
-</dd>
-<dt><i>config</i> (dict)</dt>
-<dd>
-dictionary with configuration data
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="_hashlibFunc" ID="_hashlibFunc"></a>
-<h2>_hashlibFunc</h2>
-<b>_hashlibFunc</b>(<i>reportError, context, func, config</i>)
-<p>
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in hashlib.new() if 'usedforsecurity' is not set to 'False'.
-</p>
-
-<dl>
-
-<dt><i>reportError</i> (func)</dt>
-<dd>
-function to be used to report errors
-</dd>
-<dt><i>context</i> (SecurityContext)</dt>
-<dd>
-security context object
-</dd>
-<dt><i>func</i> (str)</dt>
-<dd>
-name of the hash function
-</dd>
-<dt><i>config</i> (dict)</dt>
-<dd>
-dictionary with configuration data
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="_hashlibNew" ID="_hashlibNew"></a>
-<h2>_hashlibNew</h2>
-<b>_hashlibNew</b>(<i>reportError, context, func, config</i>)
-<p>
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in hashlib.new().
-</p>
-
-<dl>
-
-<dt><i>reportError</i> (func)</dt>
-<dd>
-function to be used to report errors
-</dd>
-<dt><i>context</i> (SecurityContext)</dt>
-<dd>
-security context object
-</dd>
-<dt><i>func</i> (str)</dt>
-<dd>
-name of the hash function
-</dd>
-<dt><i>config</i> (dict)</dt>
-<dd>
-dictionary with configuration data
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="checkHashlib" ID="checkHashlib"></a>
-<h2>checkHashlib</h2>
-<b>checkHashlib</b>(<i>reportError, context, config</i>)
-<p>
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in hashlib.new().
-</p>
-
-<dl>
-
-<dt><i>reportError</i> (func)</dt>
-<dd>
-function to be used to report errors
-</dd>
-<dt><i>context</i> (SecurityContext)</dt>
-<dd>
-security context object
-</dd>
-<dt><i>config</i> (dict)</dt>
-<dd>
-dictionary with configuration data
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-<hr />
-<a NAME="getChecks" ID="getChecks"></a>
-<h2>getChecks</h2>
-<b>getChecks</b>(<i></i>)
-<p>
-    Public method to get a dictionary with checks handled by this module.
-</p>
-
-<dl>
-<dt>Return:</dt>
-<dd>
-dictionary containing checker lists containing checker function and
-        list of codes
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-dict
-</dd>
-</dl>
-<div align="right"><a href="#top">Up</a></div>
-<hr />
-</body></html>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -38,9 +38,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -56,18 +57,14 @@
 <td>Constructor</td>
 </tr>
 <tr>
-<td><a href="#SecurityChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
+<td><a href="#SecurityChecker.addError">addError</a></td>
+<td>Public method to record an issue.</td>
 </tr>
 <tr>
 <td><a href="#SecurityChecker.getConfig">getConfig</a></td>
 <td>Public method to get the configuration dictionary.</td>
 </tr>
 <tr>
-<td><a href="#SecurityChecker.reportError">reportError</a></td>
-<td>Public method to record an issue.</td>
-</tr>
-<tr>
 <td><a href="#SecurityChecker.run">run</a></td>
 <td>Public method to check the given source against security related conditions.</td>
 </tr>
@@ -121,30 +118,40 @@
 dictionary of arguments for the security checks
 </dd>
 </dl>
-<a NAME="SecurityChecker.__ignoreCode" ID="SecurityChecker.__ignoreCode"></a>
-<h4>SecurityChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
+<a NAME="SecurityChecker.addError" ID="SecurityChecker.addError"></a>
+<h4>SecurityChecker.addError</h4>
+<b>addError</b>(<i>lineNumber, offset, msgCode, severity, confidence, *args</i>)
 <p>
-        Private method to check if the message code should be ignored.
+        Public method to record an issue.
 </p>
 
 <dl>
 
-<dt><i>code</i> (str)</dt>
+<dt><i>lineNumber</i> (int)</dt>
 <dd>
-message code to check for
+line number of the issue
 </dd>
-</dl>
-<dl>
-<dt>Return:</dt>
+<dt><i>offset</i> (int)</dt>
+<dd>
+position within line of the issue
+</dd>
+<dt><i>msgCode</i> (str)</dt>
 <dd>
-flag indicating to ignore the given code
+message code
+</dd>
+<dt><i>severity</i> (str)</dt>
+<dd>
+severity code (H = high, M = medium, L = low,
+            U = undefined)
 </dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
+<dt><i>confidence</i> (str)</dt>
 <dd>
-bool
+confidence code (H = high, M = medium, L = low,
+            U = undefined)
+</dd>
+<dt><i>args</i> (list)</dt>
+<dd>
+arguments for the message
 </dd>
 </dl>
 <a NAME="SecurityChecker.getConfig" ID="SecurityChecker.getConfig"></a>
@@ -166,42 +173,6 @@
 dict
 </dd>
 </dl>
-<a NAME="SecurityChecker.reportError" ID="SecurityChecker.reportError"></a>
-<h4>SecurityChecker.reportError</h4>
-<b>reportError</b>(<i>lineNumber, offset, code, severity, confidence, *args</i>)
-<p>
-        Public method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>severity</i> (str)</dt>
-<dd>
-severity code (H = high, M = medium, L = low,
-            U = undefined)
-</dd>
-<dt><i>confidence</i> (str)</dt>
-<dd>
-confidence code (H = high, M = medium, L = low,
-            U = undefined)
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
 <a NAME="SecurityChecker.run" ID="SecurityChecker.run"></a>
 <h4>SecurityChecker.run</h4>
 <b>run</b>(<i></i>)
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -38,9 +38,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -60,16 +61,8 @@
 <td>Private method to amend the nodes of the given AST tree with backward and forward references.</td>
 </tr>
 <tr>
-<td><a href="#SimplifyChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
-<td><a href="#SimplifyChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
-<td><a href="#SimplifyChecker.run">run</a></td>
-<td>Public method to check the given source against functions to be replaced by 'pathlib' equivalents.</td>
+<td><a href="#SimplifyChecker.__checkCodeSimplifications">__checkCodeSimplifications</a></td>
+<td>Private method to check for code simplifications.</td>
 </tr>
 </table>
 
@@ -136,64 +129,11 @@
 nesting level (defaults to 0)
 </dd>
 </dl>
-<a NAME="SimplifyChecker.__error" ID="SimplifyChecker.__error"></a>
-<h4>SimplifyChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
+<a NAME="SimplifyChecker.__checkCodeSimplifications" ID="SimplifyChecker.__checkCodeSimplifications"></a>
+<h4>SimplifyChecker.__checkCodeSimplifications</h4>
+<b>__checkCodeSimplifications</b>(<i></i>)
 <p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
-<a NAME="SimplifyChecker.__ignoreCode" ID="SimplifyChecker.__ignoreCode"></a>
-<h4>SimplifyChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
-<a NAME="SimplifyChecker.run" ID="SimplifyChecker.run"></a>
-<h4>SimplifyChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against functions
-        to be replaced by 'pathlib' equivalents.
+        Private method to check for code simplifications.
 </p>
 
 <div align="right"><a href="#top">Up</a></div>
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Simplify.SimplifyNodeVisitor.html	Sat Mar 01 15:52:40 2025 +0100
@@ -225,6 +225,10 @@
 <td>Private method to check for bare numeric function arguments.</td>
 </tr>
 <tr>
+<td><a href="#SimplifyNodeVisitor.__check411">__check411</a></td>
+<td>Private method to check for nested f-strings.</td>
+</tr>
+<tr>
 <td><a href="#SimplifyNodeVisitor.__check901">__check901</a></td>
 <td>Private method to check for unnecessary bool conversion.</td>
 </tr>
@@ -333,6 +337,10 @@
 <td>Public method to process an IfExp node.</td>
 </tr>
 <tr>
+<td><a href="#SimplifyNodeVisitor.visit_JoinedStr">visit_JoinedStr</a></td>
+<td>Public method to check a joined string node.</td>
+</tr>
+<tr>
 <td><a href="#SimplifyNodeVisitor.visit_Subscript">visit_Subscript</a></td>
 <td>Public method to process a Subscript node.</td>
 </tr>
@@ -991,6 +999,23 @@
 reference to the AST node to be checked
 </dd>
 </dl>
+<a NAME="SimplifyNodeVisitor.__check411" ID="SimplifyNodeVisitor.__check411"></a>
+<h4>SimplifyNodeVisitor.__check411</h4>
+<b>__check411</b>(<i>node</i>)
+<p>
+        Private method to check for nested f-strings.
+</p>
+<p>
+        Note: This method is adapted from flake8-nested-fstrings v1.1.0.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.JoinedStr or ast.expr)</dt>
+<dd>
+reference to the AST node to be checked
+</dd>
+</dl>
 <a NAME="SimplifyNodeVisitor.__check901" ID="SimplifyNodeVisitor.__check901"></a>
 <h4>SimplifyNodeVisitor.__check901</h4>
 <b>__check901</b>(<i>node</i>)
@@ -1485,6 +1510,20 @@
 reference to the IfExp node
 </dd>
 </dl>
+<a NAME="SimplifyNodeVisitor.visit_JoinedStr" ID="SimplifyNodeVisitor.visit_JoinedStr"></a>
+<h4>SimplifyNodeVisitor.visit_JoinedStr</h4>
+<b>visit_JoinedStr</b>(<i>node</i>)
+<p>
+        Public method to check a joined string node.
+</p>
+
+<dl>
+
+<dt><i>node</i> (ast.JoinedStr)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
 <a NAME="SimplifyNodeVisitor.visit_Subscript" ID="SimplifyNodeVisitor.visit_Subscript"></a>
 <h4>SimplifyNodeVisitor.visit_Subscript</h4>
 <b>visit_Subscript</b>(<i>node</i>)
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Unused.UnusedChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -303,9 +303,10 @@
 </p>
 
 <h3>Derived from</h3>
-None
+CodeStyleTopicChecker
 <h3>Class Attributes</h3>
 <table>
+<tr><td>Category</td></tr>
 <tr><td>Codes</td></tr>
 </table>
 
@@ -329,10 +330,6 @@
 <td>Private method to check for unused global variables.</td>
 </tr>
 <tr>
-<td><a href="#UnusedChecker.__error">__error</a></td>
-<td>Private method to record an issue.</td>
-</tr>
-<tr>
 <td><a href="#UnusedChecker.__extractGlobalVariables">__extractGlobalVariables</a></td>
 <td>Private method to get the names of all global variables.</td>
 </tr>
@@ -349,10 +346,6 @@
 <td>Private method to get a list of unused arguments of the given function.</td>
 </tr>
 <tr>
-<td><a href="#UnusedChecker.__ignoreCode">__ignoreCode</a></td>
-<td>Private method to check if the message code should be ignored.</td>
-</tr>
-<tr>
 <td><a href="#UnusedChecker.__isDunderMethod">__isDunderMethod</a></td>
 <td>Private method to check, if the function node defines a special function.</td>
 </tr>
@@ -364,10 +357,6 @@
 <td><a href="#UnusedChecker.__isStubFunction">__isStubFunction</a></td>
 <td>Private method to check, if the given function node defines a stub function.</td>
 </tr>
-<tr>
-<td><a href="#UnusedChecker.run">run</a></td>
-<td>Public method to check the given source against miscellaneous conditions.</td>
-</tr>
 </table>
 
 <h3>Static Methods</h3>
@@ -432,32 +421,6 @@
         Private method to check for unused global variables.
 </p>
 
-<a NAME="UnusedChecker.__error" ID="UnusedChecker.__error"></a>
-<h4>UnusedChecker.__error</h4>
-<b>__error</b>(<i>lineNumber, offset, code, *args</i>)
-<p>
-        Private method to record an issue.
-</p>
-
-<dl>
-
-<dt><i>lineNumber</i> (int)</dt>
-<dd>
-line number of the issue
-</dd>
-<dt><i>offset</i> (int)</dt>
-<dd>
-position within line of the issue
-</dd>
-<dt><i>code</i> (str)</dt>
-<dd>
-message code
-</dd>
-<dt><i>args</i> (list)</dt>
-<dd>
-arguments for the message
-</dd>
-</dl>
 <a NAME="UnusedChecker.__extractGlobalVariables" ID="UnusedChecker.__extractGlobalVariables"></a>
 <h4>UnusedChecker.__extractGlobalVariables</h4>
 <b>__extractGlobalVariables</b>(<i></i>)
@@ -555,32 +518,6 @@
 list of tuples of (int, ast.arg)
 </dd>
 </dl>
-<a NAME="UnusedChecker.__ignoreCode" ID="UnusedChecker.__ignoreCode"></a>
-<h4>UnusedChecker.__ignoreCode</h4>
-<b>__ignoreCode</b>(<i>code</i>)
-<p>
-        Private method to check if the message code should be ignored.
-</p>
-
-<dl>
-
-<dt><i>code</i> (str)</dt>
-<dd>
-message code to check for
-</dd>
-</dl>
-<dl>
-<dt>Return:</dt>
-<dd>
-flag indicating to ignore the given code
-</dd>
-</dl>
-<dl>
-<dt>Return Type:</dt>
-<dd>
-bool
-</dd>
-</dl>
 <a NAME="UnusedChecker.__isDunderMethod" ID="UnusedChecker.__isDunderMethod"></a>
 <h4>UnusedChecker.__isDunderMethod</h4>
 <b>__isDunderMethod</b>(<i>functionNode</i>)
@@ -664,14 +601,6 @@
 bool
 </dd>
 </dl>
-<a NAME="UnusedChecker.run" ID="UnusedChecker.run"></a>
-<h4>UnusedChecker.run</h4>
-<b>run</b>(<i></i>)
-<p>
-        Public method to check the given source against miscellaneous
-        conditions.
-</p>
-
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 </body></html>
--- a/src/eric7/Documentation/Source/index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.html	Sat Mar 01 15:52:40 2025 +0100
@@ -16,6 +16,18 @@
 <table>
 
 <tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.BugBearVisitor.html">BugBearVisitor</a></td>
+<td>Module implementing a visitor to check for various potential issues.</td>
+</tr>
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DateTimeVisitor.html">DateTimeVisitor</a></td>
+<td>Module implementing a node visitor to check datetime function calls.</td>
+</tr>
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.DefaultMatchCaseVisitor.html">DefaultMatchCaseVisitor</a></td>
+<td>Module implementing a node visitor to check default match cases.</td>
+</tr>
+<tr>
 <td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html">MiscellaneousChecker</a></td>
 <td>Module implementing a checker for miscellaneous checks.</td>
 </tr>
@@ -24,6 +36,18 @@
 <td>Module implementing complex defaults for the miscellaneous checker.</td>
 </tr>
 <tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.ReturnVisitor.html">ReturnVisitor</a></td>
+<td>Module implementing a node visitor to check return statements.</td>
+</tr>
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.SysVersionVisitor.html">SysVersionVisitor</a></td>
+<td>Module implementing a node visitor to check the use of sys.version and sys.version_info.</td>
+</tr>
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.TextVisitor.html">TextVisitor</a></td>
+<td>Module implementing a node visitor for bytes and str instances.</td>
+</tr>
+<tr>
 <td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.eradicate.html">eradicate</a></td>
 <td>Removes commented-out Python code.</td>
 </tr>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Documentation/Source/index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.html	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html><head>
+<title>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic</title>
+<meta charset="UTF-8">
+<link rel="stylesheet" href="styles.css">
+</head>
+<body>
+<h1>eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic</h1>
+<p>
+Package implementing the pydantic topics checker.
+</p>
+
+
+
+<h3>Modules</h3>
+<table>
+
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticChecker.html">PydanticChecker</a></td>
+<td>Module implementing a checker for pydantic related issues.</td>
+</tr>
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticUtils.html">PydanticUtils</a></td>
+<td>Module implementing utility functions for the PydanticVisitor class.</td>
+</tr>
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.PydanticVisitor.html">PydanticVisitor</a></td>
+<td>Module implementing a node visitor to check for pydantic related issues.</td>
+</tr>
+<tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.translations.html">translations</a></td>
+<td>Module implementing message translations for the code style plugin messages (pydantic part).</td>
+</tr>
+</table>
+</body></html>
--- a/src/eric7/Documentation/Source/index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.html	Sat Mar 01 15:52:40 2025 +0100
@@ -64,6 +64,10 @@
 <td>Module implementing a check for insecure usage of tmp file/directory.</td>
 </tr>
 <tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.hashlibInsecureFunctions.html">hashlibInsecureFunctions</a></td>
+<td>Module implementing a check for use of insecure md4, md5, or sha1 hash functions in hashlib.</td>
+</tr>
+<tr>
 <td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.injectionParamiko.html">injectionParamiko</a></td>
 <td>Module implementing a check for shell injection within Paramiko.</td>
 </tr>
@@ -80,10 +84,6 @@
 <td>Module implementing a check for use of wildcard injection.</td>
 </tr>
 <tr>
-<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureHashlibNew.html">insecureHashlibNew</a></td>
-<td>Module implementing a check for use of insecure md4, md5, or sha1 hash functions in hashlib.new().</td>
-</tr>
-<tr>
 <td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.Checks.insecureSslTls.html">insecureSslTls</a></td>
 <td>Module implementing a check for use of SSL/TLS with insecure protocols.</td>
 </tr>
--- a/src/eric7/Documentation/Source/index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.html	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Documentation/Source/index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.html	Sat Mar 01 15:52:40 2025 +0100
@@ -55,6 +55,10 @@
 <td>Package implementing the checker for functions that can be replaced by use of the pathlib module.</td>
 </tr>
 <tr>
+<td><a href="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Pydantic.html">Pydantic</a></td>
+<td>Package implementing the pydantic topics checker.</td>
+</tr>
+<tr>
 <td><a href="index-eric7.Plugins.CheckerPlugins.CodeStyleChecker.Security.html">Security</a></td>
 <td>Package implementing the security checker.</td>
 </tr>
@@ -104,6 +108,10 @@
 <td>Module implementing a dialog showing statistical data for the last code style checker run.</td>
 </tr>
 <tr>
+<td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.CodeStyleTopicChecker.html">CodeStyleTopicChecker</a></td>
+<td>Module implementing the topic checker base class containing common methods.</td>
+</tr>
+<tr>
 <td><a href="eric7.Plugins.CheckerPlugins.CodeStyleChecker.ast_unparse.html">ast_unparse</a></td>
 <td></td>
 </tr>
--- a/src/eric7/EricGui/EricOverrideCursor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricGui/EricOverrideCursor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -61,7 +61,7 @@
             QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
         )
 
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
 
 class EricOverridenCursor(contextlib.AbstractContextManager):
@@ -115,7 +115,7 @@
                 QEventLoop.ProcessEventsFlag.ExcludeUserInputEvents
             )
 
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
 
 class EricOverrideCursorProcess(QProcess):
--- a/src/eric7/EricNetwork/EricGoogleMailHelpers.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricNetwork/EricGoogleMailHelpers.py	Sat Mar 01 15:52:40 2025 +0100
@@ -41,8 +41,8 @@
     Module function to install the required packages to support Google mail.
     """
     with contextlib.suppress(ImportError, KeyError):
-        from eric7.EricWidgets.EricApplication import ericApp  # noqa: I101
-        from eric7.SystemUtilities import PythonUtilities  # noqa: I101
+        from eric7.EricWidgets.EricApplication import ericApp  # noqa: I-101
+        from eric7.SystemUtilities import PythonUtilities  # noqa: I-101
 
         pip = ericApp().getObject("Pip")
         pip.installPackages(
@@ -51,4 +51,4 @@
 
 
 #
-# eflag: noqa = U200
+# eflag: noqa = U-200
--- a/src/eric7/EricNetwork/EricJsonServer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricNetwork/EricJsonServer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -78,7 +78,7 @@
             if ":" in self.__hostAddress
             else self.__hostAddress
         )
-        print(  # __IGNORE_WARNING_M801__
+        print(  # __IGNORE_WARNING_M-801__
             "JSON server ({2}) listening on: {0}:{1:d}".format(
                 hostAddressStr, self.serverPort(), self.__name
             )
--- a/src/eric7/EricNetwork/EricJsonStreamReader.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricNetwork/EricJsonStreamReader.py	Sat Mar 01 15:52:40 2025 +0100
@@ -64,7 +64,7 @@
             if ":" in self.__hostAddress
             else self.__hostAddress
         )
-        print(  # __IGNORE_WARNING_M801__
+        print(  # __IGNORE_WARNING_M-801__
             "JSON server ({2}) listening on: {0}:{1:d}".format(
                 hostAddressStr, self.serverPort(), self.__name
             )
--- a/src/eric7/EricNetwork/EricSslCertificateSelectionDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricNetwork/EricSslCertificateSelectionDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -114,7 +114,7 @@
         Private slot to show data of the selected certificate.
         """
         with contextlib.suppress(ImportError):
-            from .EricSslCertificatesInfoDialog import (  # noqa: I101
+            from .EricSslCertificatesInfoDialog import (  # noqa: I-101
                 EricSslCertificatesInfoDialog,
             )
 
--- a/src/eric7/EricNetwork/EricSslCertificatesDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricNetwork/EricSslCertificatesDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -130,7 +130,7 @@
         Private slot to show data of the selected server certificate.
         """
         with contextlib.suppress(ImportError):
-            from .EricSslCertificatesInfoDialog import (  # noqa: I101
+            from .EricSslCertificatesInfoDialog import (  # noqa: I-101
                 EricSslCertificatesInfoDialog,
             )
 
@@ -347,7 +347,7 @@
         Private slot to show data of the selected CA certificate.
         """
         with contextlib.suppress(ImportError):
-            from .EricSslCertificatesInfoDialog import (  # noqa: I101
+            from .EricSslCertificatesInfoDialog import (  # noqa: I-101
                 EricSslCertificatesInfoDialog,
             )
 
--- a/src/eric7/EricNetwork/EricSslUtilities.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricNetwork/EricSslUtilities.py	Sat Mar 01 15:52:40 2025 +0100
@@ -13,7 +13,7 @@
     Function to initialize some global SSL stuff.
     """
     try:
-        from PyQt6.QtNetwork import QSslConfiguration  # __IGNORE_WARNING_I10__
+        from PyQt6.QtNetwork import QSslConfiguration  # __IGNORE_WARNING_I-10__
     except ImportError:
         # no SSL available, so there is nothing to initialize
         return
--- a/src/eric7/EricUtilities/EricMutexLocker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricUtilities/EricMutexLocker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -51,4 +51,4 @@
         """
         self.__mutex.unlock()
 
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
--- a/src/eric7/EricWidgets/EricErrorMessage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricWidgets/EricErrorMessage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -253,4 +253,4 @@
 
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/EricWidgets/EricFileDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricWidgets/EricFileDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -544,4 +544,4 @@
 
 
 #
-# eflag: noqa = U200
+# eflag: noqa = U-200
--- a/src/eric7/EricWidgets/EricMainWindow.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricWidgets/EricMainWindow.py	Sat Mar 01 15:52:40 2025 +0100
@@ -44,7 +44,7 @@
         """
         # step 1: set the style
         style = None
-        if styleName != "System" and styleName in QStyleFactory.keys():  # noqa: Y118
+        if styleName != "System" and styleName in QStyleFactory.keys():  # noqa: Y-118
             style = QStyleFactory.create(styleName)
         if style is None:
             style = QStyleFactory.create(self.defaultStyleName)
--- a/src/eric7/EricWidgets/EricMessageBox.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricWidgets/EricMessageBox.py	Sat Mar 01 15:52:40 2025 +0100
@@ -21,7 +21,7 @@
 Critical = QMessageBox.Icon.Critical
 Information = QMessageBox.Icon.Information
 Question = QMessageBox.Icon.Question
-Warning = QMessageBox.Icon.Warning  # __IGNORE_WARNING_M131__
+Warning = QMessageBox.Icon.Warning  # __IGNORE_WARNING_M-131__
 
 # QMessageBox.StandardButton
 Abort = QMessageBox.StandardButton.Abort
@@ -435,4 +435,4 @@
 
 
 #
-# eflag: noqa = U200
+# eflag: noqa = U-200
--- a/src/eric7/EricWidgets/EricTextEditSearchWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/EricWidgets/EricTextEditSearchWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -454,7 +454,7 @@
         @param backwards flag indicating a backwards search
         @type bool
         """
-        from PyQt6.QtWebEngineCore import QWebEnginePage  # noqa: I102
+        from PyQt6.QtWebEngineCore import QWebEnginePage  # noqa: I-102
 
         if self.findtextCombo.currentText():
             findFlags = QWebEnginePage.FindFlag(0)
--- a/src/eric7/Globals/__init__.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Globals/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -88,9 +88,9 @@
     @rtype str
     """
     try:
-        from eric7.eric7config import getConfig  # __IGNORE_WARNING_I101__
+        from eric7.eric7config import getConfig  # __IGNORE_WARNING_I-101__
     except ImportError:
-        from eric7config import getConfig  # __IGNORE_WARNING_I10__
+        from eric7config import getConfig  # __IGNORE_WARNING_I-10__
 
     scriptPath = os.path.join(getConfig("ericDir"), "Tools", "webBrowserSupport.py")
     proc = QProcess()
@@ -104,4 +104,4 @@
 
 
 #
-# eflag: noqa = M801, U200
+# eflag: noqa = M-801, U-200
--- a/src/eric7/Graphics/AssociationItem.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Graphics/AssociationItem.py	Sat Mar 01 15:52:40 2025 +0100
@@ -184,7 +184,7 @@
         endP = self.__findRectIntersectionPoint(self.itemB, midB, midA)
 
         if startP.x() != -1 and startP.y() != -1 and endP.x() != -1 and endP.y() != -1:
-            # __IGNORE_WARNING_C111__
+            # __IGNORE_WARNING_C-111__
             self.setPoints(startP.x(), startP.y(), endP.x(), endP.y())
 
     def __calculateEndingPoints_rectangle(self):
--- a/src/eric7/Graphics/UMLDiagramBuilder.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Graphics/UMLDiagramBuilder.py	Sat Mar 01 15:52:40 2025 +0100
@@ -66,7 +66,7 @@
             "Method 'buildDiagram' must be implemented in subclasses."
         )
 
-    def parsePersistenceData(self, version, data):  # noqa: U100
+    def parsePersistenceData(self, version, data):  # noqa: U-100
         """
         Public method to parse persisted data.
 
@@ -88,7 +88,7 @@
         """
         return {}
 
-    def fromDict(self, version, data):  # noqa: U100
+    def fromDict(self, version, data):  # noqa: U-100
         """
         Public method to populate the class with data persisted by 'toDict()'.
 
--- a/src/eric7/HelpViewer/HelpViewerImplQWE.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/HelpViewer/HelpViewerImplQWE.py	Sat Mar 01 15:52:40 2025 +0100
@@ -113,7 +113,7 @@
             self.__rwhvqt.grabGesture(Qt.GestureType.PinchGesture)
             self.__rwhvqt.installEventFilter(self)
         else:
-            print("Focus proxy is null!")  # __IGNORE_WARNING_M801__
+            print("Focus proxy is null!")  # __IGNORE_WARNING_M-801__
 
     def setLink(self, url):
         """
--- a/src/eric7/HelpViewer/HelpViewerWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/HelpViewer/HelpViewerWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -629,11 +629,11 @@
         @rtype tuple of (HelpViewerImpl, EricTextEditType)
         """
         if self.__useQTextBrowser:
-            from .HelpViewerImplQTB import HelpViewerImplQTB  # __IGNORE_WARNING_I101__
+            from .HelpViewerImplQTB import HelpViewerImplQTB  # __IGNORE_WARNING_I-101__
 
             viewer = HelpViewerImplQTB(self.__helpEngine, self)
         else:
-            from .HelpViewerImplQWE import HelpViewerImplQWE  # __IGNORE_WARNING_I101__
+            from .HelpViewerImplQWE import HelpViewerImplQWE  # __IGNORE_WARNING_I-101__
 
             viewer = HelpViewerImplQWE(self.__helpEngine, self)
 
--- a/src/eric7/HexEdit/HexEditSearchReplaceWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/HexEdit/HexEditSearchReplaceWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -69,14 +69,14 @@
 
         self.__findHistory = mainWindow.getSRHistory("search")
         if replace:
-            from .Ui_HexEditReplaceWidget import (  # __IGNORE_WARNING_I101__
+            from .Ui_HexEditReplaceWidget import (  # __IGNORE_WARNING_I-101__
                 Ui_HexEditReplaceWidget,
             )
 
             self.__replaceHistory = mainWindow.getSRHistory("replace")
             self.__ui = Ui_HexEditReplaceWidget()
         else:
-            from .Ui_HexEditSearchWidget import (  # __IGNORE_WARNING_I101__
+            from .Ui_HexEditSearchWidget import (  # __IGNORE_WARNING_I-101__
                 Ui_HexEditSearchWidget,
             )
 
--- a/src/eric7/JediInterface/JediClient.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/JediInterface/JediClient.py	Sat Mar 01 15:52:40 2025 +0100
@@ -617,4 +617,4 @@
     sys.exit(0)
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/MicroPython/BluetoothDialogs/BluetoothAdvertisement.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/MicroPython/BluetoothDialogs/BluetoothAdvertisement.py	Sat Mar 01 15:52:40 2025 +0100
@@ -303,4 +303,4 @@
 
 
 #
-# eflag: noqa = U200
+# eflag: noqa = U-200
--- a/src/eric7/MicroPython/Devices/DeviceBase.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/MicroPython/Devices/DeviceBase.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1400,7 +1400,7 @@
         else:
             return ""
 
-    def syncTime(self, _deviceType, hasCPy=False):  # noqa: U100
+    def syncTime(self, _deviceType, hasCPy=False):  # noqa: U-100
         """
         Public method to set the time of the connected device to the local
         computer's time.
@@ -1588,7 +1588,7 @@
         """
         return {}, {}, {}
 
-    def connectWifi(self, ssid, password, hostname):  # noqa: U100
+    def connectWifi(self, ssid, password, hostname):  # noqa: U-100
         """
         Public method to connect a device to a WiFi network.
 
@@ -1630,7 +1630,7 @@
         """
         return False
 
-    def writeCredentials(self, ssid, password, hostname, country):  # noqa: U100
+    def writeCredentials(self, ssid, password, hostname, country):  # noqa: U-100
         """
         Public method to write the given credentials to the connected device and modify
         the start script to connect automatically.
@@ -1676,7 +1676,7 @@
         """
         return [], ""
 
-    def deactivateInterface(self, interface):  # noqa: U100
+    def deactivateInterface(self, interface):  # noqa: U-100
         """
         Public method to deactivate a given WiFi interface of the connected device.
 
@@ -1690,11 +1690,11 @@
 
     def startAccessPoint(
         self,
-        ssid,  # noqa: U100
-        security=None,  # noqa: U100
-        password=None,  # noqa: U100
-        hostname=None,  # noqa: U100
-        ifconfig=None,  # noqa: U100
+        ssid,  # noqa: U-100
+        security=None,  # noqa: U-100
+        password=None,  # noqa: U-100
+        hostname=None,  # noqa: U-100
+        ifconfig=None,  # noqa: U-100
     ):
         """
         Public method to start the access point interface.
@@ -1734,7 +1734,7 @@
         """
         return [], ""
 
-    def enableWebrepl(self, password):  # noqa: U100
+    def enableWebrepl(self, password):  # noqa: U-100
         """
         Public method to write the given WebREPL password to the connected device and
         modify the start script to start the WebREPL server.
@@ -1789,7 +1789,7 @@
         """
         return []
 
-    def connectToLan(self, config, hostname):  # noqa: U100
+    def connectToLan(self, config, hostname):  # noqa: U-100
         """
         Public method to connect the connected device to the LAN.
 
@@ -1840,7 +1840,7 @@
         """
         return True, ""
 
-    def writeLanAutoConnect(self, config, hostname):  # noqa: U100
+    def writeLanAutoConnect(self, config, hostname):  # noqa: U-100
         """
         Public method to generate a script and associated configuration to connect the
         device to the LAN during boot time.
@@ -1917,7 +1917,7 @@
         """
         return False
 
-    def getDeviceScan(self, timeout=10):  # noqa: U100
+    def getDeviceScan(self, timeout=10):  # noqa: U-100
         """
         Public method to perform a Bluetooth device scan.
 
@@ -1944,7 +1944,7 @@
         return False
 
     def setNetworkTime(
-        self, server="pool.ntp.org", tzOffset=0, timeout=10  # noqa: U100
+        self, server="pool.ntp.org", tzOffset=0, timeout=10  # noqa: U-100
     ):
         """
         Public method to set the time to the network time retrieved from an
@@ -1985,4 +1985,4 @@
 
 
 #
-# eflag: noqa = M613
+# eflag: noqa = M-613
--- a/src/eric7/MicroPython/Devices/EspDevices.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/MicroPython/Devices/EspDevices.py	Sat Mar 01 15:52:40 2025 +0100
@@ -639,7 +639,7 @@
         # The machine.RTC.init() (ESP32) and machine.rtc.datetime() (ESP8266) functions
         # take the arguments in the order:
         # (year, month, day, weekday, hour, minute, second, subseconds)
-        # __IGNORE_WARNING_M891__
+        # __IGNORE_WARNING_M-891__
         # https://docs.micropython.org/en/latest/library/machine.RTC.html#machine-rtc
         #
         # LoBo variant of MPy deviates.
--- a/src/eric7/MicroPython/Devices/RP2Devices.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/MicroPython/Devices/RP2Devices.py	Sat Mar 01 15:52:40 2025 +0100
@@ -406,7 +406,7 @@
 
         # The machine.rtc.datetime() function takes the arguments in the order:
         # (year, month, day, weekday, hour, minute, second, subseconds)
-        # __IGNORE_WARNING_M891__
+        # __IGNORE_WARNING_M-891__
         # https://docs.micropython.org/en/latest/library/machine.RTC.html#machine-rtc
         return """
 def set_time(rtc_time):
--- a/src/eric7/MicroPython/Devices/__init__.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/MicroPython/Devices/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -472,7 +472,7 @@
     (0x8086, None),
 )
 
-FirmwareGithubUrls = {  # noqa: U200
+FirmwareGithubUrls = {  # noqa: U-200
     "micropython": "https://github.com/micropython/micropython/releases/latest",
     "circuitpython": "https://github.com/adafruit/circuitpython/releases/latest",
     "pimoroni_pico": "https://github.com/pimoroni/pimoroni-pico/releases/latest",
--- a/src/eric7/MicroPython/MicroPythonReplWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/MicroPython/MicroPythonReplWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -555,7 +555,7 @@
             ):
                 if b"\x1b\\" in data[index + 4 :]:
                     # 'set window title' command detected: <Esc>]0;...<Esc>\
-                    # __IGNORE_WARNING_M891__
+                    # __IGNORE_WARNING_M-891__
                     titleData = data[index + 4 :].split(b"\x1b\\")[0]
                     title = titleData.decode("utf-8")
                     index += len(titleData) + 5  # one more is done at the end
--- a/src/eric7/MicroPython/MicroPythonWebreplDeviceInterface.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/MicroPython/MicroPythonWebreplDeviceInterface.py	Sat Mar 01 15:52:40 2025 +0100
@@ -168,7 +168,7 @@
 
         return True
 
-    def execute(self, commands, *, mode="raw", timeout=0):  # noqa: U100
+    def execute(self, commands, *, mode="raw", timeout=0):  # noqa: U-100
         """
         Public method to send commands to the connected device and return the
         result.
--- a/src/eric7/PipInterface/Pip.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/PipInterface/Pip.py	Sat Mar 01 15:52:40 2025 +0100
@@ -117,6 +117,7 @@
         Public method to perform shutdown actions.
         """
         if self.__outdatedProc is not None:
+            self.__outdatedProc.finished.disconnect()
             self.__outdatedProc.kill()  # end the process forcefully
             self.__outdatedProc = None
 
@@ -767,7 +768,7 @@
                     pipre = re.compile(r"^pip\s*(~=|==|!=|<=|>=|<|>|===)")
                     for dependency in dependencies:
                         if pipre.search(dependency):
-                            dependencies.remove(dependency)  # noqa: M569
+                            dependencies.remove(dependency)  # noqa: M-569
                             break
 
                     dlg = DeleteFilesConfirmationDialog(
--- a/src/eric7/PipInterface/PipPackagesWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/PipInterface/PipPackagesWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -13,7 +13,7 @@
 
 from packaging.specifiers import InvalidSpecifier, SpecifierSet
 from PyQt6.QtCore import Qt, QUrl, QUrlQuery, pyqtSlot
-from PyQt6.QtGui import QDesktopServices, QIcon
+from PyQt6.QtGui import QBrush, QDesktopServices, QIcon
 from PyQt6.QtWidgets import (
     QDialog,
     QHeaderView,
@@ -415,6 +415,8 @@
                 if self.__packageDetailsDialog is not None:
                     self.__packageDetailsDialog.close()
 
+            self.packageSearchEdit.clear()
+
             if self.viewToggleButton.isChecked():
                 self.__refreshDependencyTree()
             else:
@@ -1222,7 +1224,7 @@
             ericApp().getObject("UserInterface").showPreferences("pipPage")
         except KeyError:
             # we were called from outside the eric IDE
-            from eric7.Preferences.ConfigurationDialog import (  # noqa: I101
+            from eric7.Preferences.ConfigurationDialog import (  # noqa: I-101
                 ConfigurationDialog,
                 ConfigurationMode,
             )
@@ -1530,6 +1532,11 @@
 
         self.__updateDepActionButtons()
 
+        self.packageSearchEdit.setEnabled(
+            bool(self.dependenciesList.topLevelItemCount())
+        )
+        self.on_packageSearchEdit_textChanged(self.packageSearchEdit.text())
+
     def __addDependency(self, dependency, parent):
         """
         Private method to add a dependency branch to a given parent.
@@ -1736,6 +1743,69 @@
             )
             self.on_refreshDependenciesButton_clicked()
 
+    @pyqtSlot(str)
+    def on_packageSearchEdit_textChanged(self, package):
+        """
+        Private slot to search packages in the dependencies tree.
+
+        @param package package text to search for
+        @type str
+        """
+        self.__resetPackageSearchHighlights()
+
+        foundItems = (
+            self.dependenciesList.findItems(
+                package,
+                Qt.MatchFlag.MatchContains
+                | Qt.MatchFlag.MatchRecursive
+                | Qt.MatchFlag.MatchWrap,
+            )
+            if package
+            else []
+        )
+        self.__setPackageSearchHighlights(foundItems)
+
+    def __resetPackageSearchHighlights(self, parent=None):
+        """
+        Private method to reset the package search markers.
+
+        @param parent reference to the parent item (defaults to None)
+        @type QTreeWidgetItem (optional)
+        """
+        if parent is None:
+            for index in range(self.dependenciesList.topLevelItemCount()):
+                itm = self.dependenciesList.topLevelItem(index)
+                self.__resetPackageSearchHighlight(itm)
+        else:
+            for index in range(parent.childCount()):
+                itm = parent.child(index)
+                self.__resetPackageSearchHighlight(itm)
+
+    def __resetPackageSearchHighlight(self, packageItem):
+        """
+        Private method to reset the package search marker of an individual item.
+
+        @param packageItem reference to the package item
+        @type QTreeWidgetItem
+        """
+        for column in range(self.dependenciesList.columnCount()):
+            packageItem.setBackground(column, QBrush())
+        if packageItem.childCount():
+            self.__resetPackageSearchHighlights(parent=packageItem)
+
+    def __setPackageSearchHighlights(self, packageItems):
+        """
+        Private method to highlight the given package items.
+
+        @param packageItems list of package dependency items to be highlighted
+        @type list of QTreeWidgetItem
+        """
+        for packageItem in packageItems:
+            for column in range(self.dependenciesList.columnCount()):
+                packageItem.setBackground(
+                    column, QBrush(Preferences.getPip("DependencyHighlightColor"))
+                )
+
     ##################################################################
     ## Interface to show the licenses dialog below
     ##################################################################
@@ -1766,7 +1836,7 @@
         """
         Private slot to create a "Software Bill Of Material" file.
         """
-        import CycloneDXInterface  # __IGNORE_WARNING_I102__
+        import CycloneDXInterface  # __IGNORE_WARNING_I-102__
 
         venvName = self.environmentsComboBox.currentText()
         if venvName == self.__pip.getProjectEnvironmentString():
@@ -1791,3 +1861,5 @@
                 self.__updateVulnerabilityData(clearFirst=True)
             else:
                 self.__clearVulnerabilityInfo()
+
+        self.on_packageSearchEdit_textChanged(self.packageSearchEdit.text())
--- a/src/eric7/PipInterface/PipPackagesWidget.ui	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/PipInterface/PipPackagesWidget.ui	Sat Mar 01 15:52:40 2025 +0100
@@ -278,7 +278,7 @@
             </widget>
             <widget class="QTabWidget" name="infoWidget">
              <property name="currentIndex">
-              <number>0</number>
+              <number>1</number>
              </property>
              <widget class="QWidget" name="packageTab">
               <attribute name="title">
@@ -493,6 +493,25 @@
            </property>
           </spacer>
          </item>
+         <item>
+          <widget class="QLineEdit" name="packageSearchEdit">
+           <property name="minimumSize">
+            <size>
+             <width>150</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="toolTip">
+            <string>Enter search term for packages</string>
+           </property>
+           <property name="placeholderText">
+            <string>Package Search</string>
+           </property>
+           <property name="clearButtonEnabled">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
         </layout>
        </item>
        <item>
@@ -716,6 +735,7 @@
   <tabstop>showDepPackageDetailsButton</tabstop>
   <tabstop>dependencyRepairButton</tabstop>
   <tabstop>dependencyRepairAllButton</tabstop>
+  <tabstop>packageSearchEdit</tabstop>
   <tabstop>requiresButton</tabstop>
   <tabstop>requiredByButton</tabstop>
   <tabstop>localDepCheckBox</tabstop>
--- a/src/eric7/PipInterface/PipVulnerabilityChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/PipInterface/PipVulnerabilityChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -127,7 +127,7 @@
         @rtype dict
         """
         if os.path.exists(self.__cacheFile):
-            with open(self.__cacheFile, "r") as f:  # noqa: Y117
+            with open(self.__cacheFile, "r") as f:  # noqa: Y-117
                 with contextlib.suppress(json.JSONDecodeError, OSError):
                     cachedData = json.load(f)
                     if dbName in cachedData and "cachedAt" in cachedData[dbName]:
--- a/src/eric7/PipInterface/Ui_PipPackagesWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/PipInterface/Ui_PipPackagesWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'src/eric7/PipInterface/PipPackagesWidget.ui'
 #
-# Created by: PyQt6 UI code generator 6.8.0
+# Created by: PyQt6 UI code generator 6.8.1
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
@@ -205,6 +205,11 @@
         self.horizontalLayout_6.addWidget(self.dependencyRepairAllButton)
         spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
         self.horizontalLayout_6.addItem(spacerItem3)
+        self.packageSearchEdit = QtWidgets.QLineEdit(parent=self.dependenciesPage)
+        self.packageSearchEdit.setMinimumSize(QtCore.QSize(150, 0))
+        self.packageSearchEdit.setClearButtonEnabled(True)
+        self.packageSearchEdit.setObjectName("packageSearchEdit")
+        self.horizontalLayout_6.addWidget(self.packageSearchEdit)
         self.verticalLayout_7.addLayout(self.horizontalLayout_6)
         self.groupBox = QtWidgets.QGroupBox(parent=self.dependenciesPage)
         self.groupBox.setObjectName("groupBox")
@@ -282,7 +287,7 @@
 
         self.retranslateUi(PipPackagesWidget)
         self.viewsStackWidget.setCurrentIndex(0)
-        self.infoWidget.setCurrentIndex(0)
+        self.infoWidget.setCurrentIndex(1)
         QtCore.QMetaObject.connectSlotsByName(PipPackagesWidget)
         PipPackagesWidget.setTabOrder(self.viewToggleButton, self.environmentsComboBox)
         PipPackagesWidget.setTabOrder(self.environmentsComboBox, self.pipMenuButton)
@@ -307,7 +312,8 @@
         PipPackagesWidget.setTabOrder(self.refreshDependenciesButton, self.showDepPackageDetailsButton)
         PipPackagesWidget.setTabOrder(self.showDepPackageDetailsButton, self.dependencyRepairButton)
         PipPackagesWidget.setTabOrder(self.dependencyRepairButton, self.dependencyRepairAllButton)
-        PipPackagesWidget.setTabOrder(self.dependencyRepairAllButton, self.requiresButton)
+        PipPackagesWidget.setTabOrder(self.dependencyRepairAllButton, self.packageSearchEdit)
+        PipPackagesWidget.setTabOrder(self.packageSearchEdit, self.requiresButton)
         PipPackagesWidget.setTabOrder(self.requiresButton, self.requiredByButton)
         PipPackagesWidget.setTabOrder(self.requiredByButton, self.localDepCheckBox)
         PipPackagesWidget.setTabOrder(self.localDepCheckBox, self.userDepCheckBox)
@@ -349,6 +355,8 @@
         self.showDepPackageDetailsButton.setToolTip(_translate("PipPackagesWidget", "Press to show details for the selected entry"))
         self.dependencyRepairButton.setToolTip(_translate("PipPackagesWidget", "Press to repair the selected dependency"))
         self.dependencyRepairAllButton.setToolTip(_translate("PipPackagesWidget", "Press to repair all dependencies"))
+        self.packageSearchEdit.setToolTip(_translate("PipPackagesWidget", "Enter search term for packages"))
+        self.packageSearchEdit.setPlaceholderText(_translate("PipPackagesWidget", "Package Search"))
         self.groupBox.setTitle(_translate("PipPackagesWidget", "View Type"))
         self.requiresButton.setToolTip(_translate("PipPackagesWidget", "Select to show which package requires other packages"))
         self.requiresButton.setText(_translate("PipPackagesWidget", "Requires"))
--- a/src/eric7/PipInterface/pipcleanup.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/PipInterface/pipcleanup.py	Sat Mar 01 15:52:40 2025 +0100
@@ -27,7 +27,7 @@
     leftovers = glob.glob("~*", root_dir=sitepackages)
     for leftover in leftovers:
         directory = os.path.join(sitepackages, leftover)
-        print(f"Removing '{directory}'.")  # noqa: M801
+        print(f"Removing '{directory}'.")  # noqa: M-801
         shutil.rmtree(directory, ignore_errors=True)
 
     # check again for leftovers and report via exit code
@@ -39,7 +39,7 @@
         win_leftovers = glob.glob("pip-uninstall-*", root_dir=tempDir)
         for leftover in win_leftovers:
             directory = os.path.join(tempDir, leftover)
-            print(f"Removing '{directory}'.")  # noqa: M801
+            print(f"Removing '{directory}'.")  # noqa: M-801
             shutil.rmtree(directory, ignore_errors=True)
 
         # check again for leftovers and report via exit code
--- a/src/eric7/PluginManager/PluginManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/PluginManager/PluginManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1528,11 +1528,11 @@
             pip = ericApp().getObject("Pip")
         except KeyError:
             # Installation is performed via the plug-in installation script.
-            from eric7.PipInterface.Pip import Pip  # __IGNORE_WARNING_I101__
+            from eric7.PipInterface.Pip import Pip  # __IGNORE_WARNING_I-101__
 
             pip = Pip(self)
         pip.installPackages(packages, interpreter=PythonUtilities.getPythonExecutable())
 
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/AnnotationsChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/AnnotationsChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -9,55 +9,57 @@
 
 import ast
 import contextlib
-import copy
 import sys
 
 from functools import lru_cache
 
 import AstUtilities
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
+
 from .AnnotationsCheckerDefaults import AnnotationsCheckerDefaultArgs
 from .AnnotationsEnums import AnnotationType, ClassDecoratorType, FunctionType
 
 
-class AnnotationsChecker:
+class AnnotationsChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for function type annotations.
     """
 
     Codes = [
         ## Function Annotations
-        "A001",
-        "A002",
-        "A003",
+        "A-001",
+        "A-002",
+        "A-003",
         ## Method Annotations
-        "A101",
-        "A102",
+        "A-101",
+        "A-102",
         ## Return Annotations
-        "A201",
-        "A202",
-        "A203",
-        "A204",
-        "A205",
-        "A206",
+        "A-201",
+        "A-202",
+        "A-203",
+        "A-204",
+        "A-205",
+        "A-206",
         ## Dynamically typed annotations
-        "A401",
+        "A-401",
         ## Type comments
-        "A402",
+        "A-402",
         ## Annotations Future
-        "A871",
-        "A872",
-        "A873",
+        "A-871",
+        "A-872",
+        "A-873",
         ## Annotation Coverage
-        "A881",
+        "A-881",
         ## Annotation Complexity
-        "A891",
-        "A892",
+        "A-891",
+        "A-892",
         ## use of typing.Union (PEP 604)
-        "A901",
+        "A-901",
         ## deprecated 'typing' symbols (PEP 585)
-        "A911",
+        "A-911",
     ]
+    Category = "A"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -80,114 +82,44 @@
         @param args dictionary of arguments for the annotation checks
         @type dict
         """
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
+        super().__init__(
+            AnnotationsChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
         checkersWithCodes = [
             (
                 self.__checkFunctionAnnotations,
                 (
-                    "A001",
-                    "A002",
-                    "A003",
-                    "A101",
-                    "A102",
-                    "A201",
-                    "A202",
-                    "A203",
-                    "A204",
-                    "A205",
-                    "A206",
-                    "A401",
-                    "A402",
+                    "A-001",
+                    "A-002",
+                    "A-003",
+                    "A-101",
+                    "A-102",
+                    "A-201",
+                    "A-202",
+                    "A-203",
+                    "A-204",
+                    "A-205",
+                    "A-206",
+                    "A-401",
+                    "A-402",
                 ),
             ),
-            (self.__checkAnnotationsFuture, ("A871", "A872", "A873")),
-            (self.__checkAnnotationsCoverage, ("A881",)),
-            (self.__checkAnnotationComplexity, ("A891", "A892")),
-            (self.__checkAnnotationPep604, ("A901",)),
-            (self.__checkDeprecatedTypingSymbols, ("A911",)),
+            (self.__checkAnnotationsFuture, ("A-871", "A-872", "A-873")),
+            (self.__checkAnnotationsCoverage, ("A-881",)),
+            (self.__checkAnnotationComplexity, ("A-891", "A-892")),
+            (self.__checkAnnotationPep604, ("A-901",)),
+            (self.__checkDeprecatedTypingSymbols, ("A-911",)),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against annotation issues.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     #######################################################################
     ## Annotations
@@ -203,50 +135,50 @@
 
         # Type ignores are provided by ast at the module level & we'll need them later
         # when deciding whether or not to emit errors for a given function
-        typeIgnoreLineno = {ti.lineno for ti in self.__tree.type_ignores}
+        typeIgnoreLineno = {ti.lineno for ti in self.tree.type_ignores}
         hasMypyIgnoreErrors = any(
-            "# mypy: ignore-errors" in line for line in self.__source[:5]
+            "# mypy: ignore-errors" in line for line in self.source[:5]
         )
 
-        suppressNoneReturning = self.__args.get(
+        suppressNoneReturning = self.args.get(
             "SuppressNoneReturning",
             AnnotationsCheckerDefaultArgs["SuppressNoneReturning"],
         )
-        suppressDummyArgs = self.__args.get(
+        suppressDummyArgs = self.args.get(
             "SuppressDummyArgs", AnnotationsCheckerDefaultArgs["SuppressDummyArgs"]
         )
-        allowUntypedDefs = self.__args.get(
+        allowUntypedDefs = self.args.get(
             "AllowUntypedDefs", AnnotationsCheckerDefaultArgs["AllowUntypedDefs"]
         )
-        allowUntypedNested = self.__args.get(
+        allowUntypedNested = self.args.get(
             "AllowUntypedNested", AnnotationsCheckerDefaultArgs["AllowUntypedNested"]
         )
-        mypyInitReturn = self.__args.get(
+        mypyInitReturn = self.args.get(
             "MypyInitReturn", AnnotationsCheckerDefaultArgs["MypyInitReturn"]
         )
-        allowStarArgAny = self.__args.get(
+        allowStarArgAny = self.args.get(
             "AllowStarArgAny", AnnotationsCheckerDefaultArgs["AllowStarArgAny"]
         )
-        respectTypeIgnore = self.__args.get(
+        respectTypeIgnore = self.args.get(
             "RespectTypeIgnore", AnnotationsCheckerDefaultArgs["RespectTypeIgnore"]
         )
 
         # Store decorator lists as sets for easier lookup
         dispatchDecorators = set(
-            self.__args.get(
+            self.args.get(
                 "DispatchDecorators",
                 AnnotationsCheckerDefaultArgs["DispatchDecorators"],
             )
         )
         overloadDecorators = set(
-            self.__args.get(
+            self.args.get(
                 "OverloadDecorators",
                 AnnotationsCheckerDefaultArgs["OverloadDecorators"],
             )
         )
 
-        visitor = FunctionVisitor(self.__source)
-        visitor.visit(self.__tree)
+        visitor = FunctionVisitor(self.source)
+        visitor.visit(self.tree)
 
         # Keep track of the last encountered function decorated by
         # `typing.overload`, if any. Per the `typing` module documentation,
@@ -257,7 +189,7 @@
         # Iterate over the arguments with missing type hints, by function.
         for function in visitor.functionDefinitions:
             if function.hasTypeComment:
-                self.__error(function.lineno - 1, function.col_offset, "A402")
+                self.addErrorFromNode(function, "A-402")
 
             if function.isDynamicallyTyped() and (
                 allowUntypedDefs or (function.isNested and allowUntypedNested)
@@ -282,7 +214,7 @@
                     }:
                         continue
 
-                    self.__error(function.lineno - 1, function.col_offset, "A401")
+                    self.addErrorFromNode(function, "A-401")
 
             # Before we iterate over the function's missing annotations, check
             # to see if it's the closing function def in a series of
@@ -315,7 +247,7 @@
                 # Check for type comments here since we're not considering them as
                 # typed args
                 if arg.hasTypeComment:
-                    self.__error(arg.lineno - 1, arg.col_offset, "A402")
+                    self.addErrorFromNode(arg, "A-402")
 
                 if arg.argname == "return":
                     # return annotations have multiple possible short-circuit
@@ -381,12 +313,12 @@
                 arg.annotationType,
             )
 
-        if errorCode in ("A001", "A002", "A003"):
-            self.__error(arg.lineno - 1, arg.col_offset, errorCode, arg.argname)
+        if errorCode in ("A-001", "A-002", "A-003"):
+            self.addErrorFromNode(arg, errorCode, arg.argname)
         else:
-            self.__error(arg.lineno - 1, arg.col_offset, errorCode)
+            self.addErrorFromNode(arg, errorCode)
 
-    @lru_cache()  # __IGNORE_WARNING_M519__
+    @lru_cache()  # __IGNORE_WARNING_M-519__
     def __returnErrorClassifier(self, isClassMethod, classDecoratorType, functionType):
         """
         Private method to classify a return type annotation issue.
@@ -404,20 +336,20 @@
         # priority than the rest
         if isClassMethod:
             if classDecoratorType == ClassDecoratorType.CLASSMETHOD:
-                return "A206"
+                return "A-206"
             elif classDecoratorType == ClassDecoratorType.STATICMETHOD:
-                return "A205"
+                return "A-205"
 
         if functionType == FunctionType.SPECIAL:
-            return "A204"
+            return "A-204"
         elif functionType == FunctionType.PRIVATE:
-            return "A203"
+            return "A-203"
         elif functionType == FunctionType.PROTECTED:
-            return "A202"
+            return "A-202"
         else:
-            return "A201"
+            return "A-201"
 
-    @lru_cache()  # __IGNORE_WARNING_M519__
+    @lru_cache()  # __IGNORE_WARNING_M-519__
     def __argumentErrorClassifier(
         self, isClassMethod, isFirstArg, classDecoratorType, annotationType
     ):
@@ -441,19 +373,19 @@
             # The first function argument here would be an instance of self or
             # class
             if classDecoratorType == ClassDecoratorType.CLASSMETHOD:
-                return "A102"
+                return "A-102"
             elif classDecoratorType != ClassDecoratorType.STATICMETHOD:
                 # Regular class method
-                return "A101"
+                return "A-101"
 
         # Check for remaining codes
         if annotationType == AnnotationType.KWARG:
-            return "A003"
+            return "A-003"
         elif annotationType == AnnotationType.VARARG:
-            return "A002"
+            return "A-002"
         else:
             # Combine PosOnlyArgs, Args, and KwOnlyArgs
-            return "A001"
+            return "A-001"
 
     #######################################################################
     ## Annotations Coverage
@@ -465,7 +397,7 @@
         """
         Private method to check for function annotation coverage.
         """
-        minAnnotationsCoverage = self.__args.get(
+        minAnnotationsCoverage = self.args.get(
             "MinimumCoverage", AnnotationsCheckerDefaultArgs["MinimumCoverage"]
         )
         if minAnnotationsCoverage == 0:
@@ -474,7 +406,7 @@
 
         functionDefs = [
             f
-            for f in ast.walk(self.__tree)
+            for f in ast.walk(self.tree)
             if isinstance(f, (ast.AsyncFunctionDef, ast.FunctionDef))
         ]
         if not functionDefs:
@@ -493,7 +425,7 @@
             * 100
         )
         if annotationsCoverage < minAnnotationsCoverage:
-            self.__error(0, 0, "A881", annotationsCoverage)
+            self.addError(1, 0, "A-881", annotationsCoverage)
 
     def __hasTypeAnnotations(self, funcNode):
         """
@@ -536,17 +468,17 @@
         """
         Private method to check the type annotation complexity.
         """
-        maxAnnotationComplexity = self.__args.get(
+        maxAnnotationComplexity = self.args.get(
             "MaximumComplexity", AnnotationsCheckerDefaultArgs["MaximumComplexity"]
         )
-        maxAnnotationLength = self.__args.get(
+        maxAnnotationLength = self.args.get(
             "MaximumLength", AnnotationsCheckerDefaultArgs["MaximumLength"]
         )
         typeAnnotations = []
 
         functionDefs = [
             f
-            for f in ast.walk(self.__tree)
+            for f in ast.walk(self.tree)
             if isinstance(f, (ast.AsyncFunctionDef, ast.FunctionDef))
         ]
         for functionDef in functionDefs:
@@ -557,28 +489,20 @@
                 typeAnnotations.append(functionDef.returns)
         typeAnnotations += [
             a.annotation
-            for a in ast.walk(self.__tree)
+            for a in ast.walk(self.tree)
             if isinstance(a, ast.AnnAssign) and a.annotation
         ]
         for annotation in typeAnnotations:
             complexity = self.__getAnnotationComplexity(annotation)
             if complexity > maxAnnotationComplexity:
-                self.__error(
-                    annotation.lineno - 1,
-                    annotation.col_offset,
-                    "A891",
-                    complexity,
-                    maxAnnotationComplexity,
+                self.addErrorFromNode(
+                    annotation, "A-891", complexity, maxAnnotationComplexity
                 )
 
             annotationLength = self.__getAnnotationLength(annotation)
             if annotationLength > maxAnnotationLength:
-                self.__error(
-                    annotation.lineno - 1,
-                    annotation.col_offset,
-                    "A892",
-                    annotationLength,
-                    maxAnnotationLength,
+                self.addErrorFromNode(
+                    annotation, "A-892", annotationLength, maxAnnotationLength
                 )
 
     def __getAnnotationComplexity(self, annotationNode, defaultComplexity=1):
@@ -661,30 +585,30 @@
             # the __future__ typing import is only needed before Python 3.9
             return
 
-        forceFutureAnnotations = self.__args.get(
+        forceFutureAnnotations = self.args.get(
             "ForceFutureAnnotations",
             AnnotationsCheckerDefaultArgs["ForceFutureAnnotations"],
         )
-        checkFutureAnnotations = self.__args.get(
+        checkFutureAnnotations = self.args.get(
             "CheckFutureAnnotations",
             AnnotationsCheckerDefaultArgs["CheckFutureAnnotations"],
         )
 
         visitor = AnnotationsFutureVisitor()
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
 
         if visitor.importsFutureAnnotations():
             return
 
         if visitor.hasTypingImports():
             imports = ", ".join(visitor.getTypingImports())
-            self.__error(0, 0, "A871", imports)
+            self.addError(1, 0, "A-871", imports)
         elif forceFutureAnnotations:
-            self.__error(0, 0, "A872")
+            self.addError(1, 0, "A-872")
 
         if checkFutureAnnotations and visitor.hasSimplifiedTypes():
             simplifiedTypes = ", ".join(sorted(visitor.getSimplifiedTypes()))
-            self.__error(0, 0, "A873", simplifiedTypes)
+            self.addError(1, 0, "A-873", simplifiedTypes)
 
     #######################################################################
     ## check use of 'typing.Union' (see PEP 604)
@@ -703,10 +627,10 @@
             return
 
         visitor = AnnotationsUnionVisitor()
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
 
         for node in visitor.getIssues():
-            self.__error(node.lineno - 1, node.col_offset, "A901")
+            self.addErrorFromNode(node, "A-901")
 
     #######################################################################
     ## check use of 'typing.Union' (see PEP 604)
@@ -726,17 +650,17 @@
         if sys.version_info < (3, 9):
             # py 3.8: only if activated via __future__ import
             visitor = AnnotationsFutureImportVisitor()
-            visitor.visit(self.__tree)
+            visitor.visit(self.tree)
             if not visitor.futureImportPresent():
                 return
 
         visitor = AnnotationsDeprecationsVisitor(
-            self.__args.get(
+            self.args.get(
                 "ExemptedTypingSymbols",
                 AnnotationsCheckerDefaultArgs["ExemptedTypingSymbols"],
             )
         )
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
 
         for node, (name, replacement) in visitor.getIssues():
-            self.__error(node.lineno - 1, node.col_offset, "A911", name, replacement)
+            self.addErrorFromNode(node, "A-911", name, replacement)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Annotations/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,85 +12,85 @@
 from PyQt6.QtCore import QCoreApplication
 
 _annotationsMessages = {
-    "A001": QCoreApplication.translate(
+    "A-001": QCoreApplication.translate(
         "AnnotationsChecker", "missing type annotation for function argument '{0}'"
     ),
-    "A002": QCoreApplication.translate(
+    "A-002": QCoreApplication.translate(
         "AnnotationsChecker", "missing type annotation for '*{0}'"
     ),
-    "A003": QCoreApplication.translate(
+    "A-003": QCoreApplication.translate(
         "AnnotationsChecker", "missing type annotation for '**{0}'"
     ),
-    "A101": QCoreApplication.translate(
+    "A-101": QCoreApplication.translate(
         "AnnotationsChecker", "missing type annotation for 'self' in method"
     ),
-    "A102": QCoreApplication.translate(
+    "A-102": QCoreApplication.translate(
         "AnnotationsChecker", "missing type annotation for 'cls' in classmethod"
     ),
-    "A201": QCoreApplication.translate(
+    "A-201": QCoreApplication.translate(
         "AnnotationsChecker", "missing return type annotation for public function"
     ),
-    "A202": QCoreApplication.translate(
+    "A-202": QCoreApplication.translate(
         "AnnotationsChecker", "missing return type annotation for protected function"
     ),
-    "A203": QCoreApplication.translate(
+    "A-203": QCoreApplication.translate(
         "AnnotationsChecker", "missing return type annotation for private function"
     ),
-    "A204": QCoreApplication.translate(
+    "A-204": QCoreApplication.translate(
         "AnnotationsChecker", "missing return type annotation for special method"
     ),
-    "A205": QCoreApplication.translate(
+    "A-205": QCoreApplication.translate(
         "AnnotationsChecker", "missing return type annotation for staticmethod"
     ),
-    "A206": QCoreApplication.translate(
+    "A-206": QCoreApplication.translate(
         "AnnotationsChecker", "missing return type annotation for classmethod"
     ),
-    "A401": QCoreApplication.translate(
+    "A-401": QCoreApplication.translate(
         "AnnotationsChecker",
         "Dynamically typed expressions (typing.Any) are disallowed",
     ),
-    "A402": QCoreApplication.translate(
+    "A-402": QCoreApplication.translate(
         "AnnotationsChecker", "Type comments are disallowed"
     ),
-    "A871": QCoreApplication.translate(
+    "A-871": QCoreApplication.translate(
         "AnnotationsChecker",
         "missing 'from __future__ import annotations' but imports: {0}",
     ),
-    "A872": QCoreApplication.translate(
+    "A-872": QCoreApplication.translate(
         "AnnotationsChecker", "missing 'from __future__ import annotations'"
     ),
-    "A873": QCoreApplication.translate(
+    "A-873": QCoreApplication.translate(
         "AnnotationsChecker",
         "missing 'from __future__ import annotations' but uses simplified type"
         " annotations: {0}",
     ),
-    "A881": QCoreApplication.translate(
+    "A-881": QCoreApplication.translate(
         "AnnotationsChecker", "type annotation coverage of {0}% is too low"
     ),
-    "A891": QCoreApplication.translate(
+    "A-891": QCoreApplication.translate(
         "AnnotationsChecker", "type annotation is too complex ({0} > {1})"
     ),
-    "A892": QCoreApplication.translate(
+    "A-892": QCoreApplication.translate(
         "AnnotationsChecker", "type annotation is too long ({0} > {1})"
     ),
-    "A901": QCoreApplication.translate(
+    "A-901": QCoreApplication.translate(
         "AnnotationsChecker",
         "'typing.Union' is deprecated, use '|' instead (see PEP 604)",
     ),
-    "A911": QCoreApplication.translate(
+    "A-911": QCoreApplication.translate(
         "AnnotationsChecker",
         "'typing.{0}' is deprecated, use '{1}' instead (see PEP 585)",
     ),
 }
 
 _annotationsMessagesSampleArgs = {
-    "A001": ["arg1"],
-    "A002": ["args"],
-    "A003": ["kwargs"],
-    "A871": ["Dict, List"],
-    "A873": ["dict, list"],
-    "A881": [60],
-    "A891": [5, 3],
-    "A892": [10, 7],
-    "A911": ["List", "list"],
+    "A-001": ["arg1"],
+    "A-002": ["args"],
+    "A-003": ["kwargs"],
+    "A-871": ["Dict, List"],
+    "A-873": ["dict, list"],
+    "A-881": [60],
+    "A-891": [5, 3],
+    "A-892": [10, 7],
+    "A-911": ["List", "list"],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Async/AsyncChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Async/AsyncChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -7,23 +7,25 @@
 Module implementing a checker for "async" related issues.
 """
 
-
 import copy
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
-class AsyncChecker:
+
+class AsyncChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for "async" related issues.
     """
 
     Codes = [
-        "ASY100",
-        "ASY101",
-        "ASY102",
-        "ASY103",
-        "ASY104",
-        "ASY105",
+        "ASY-100",
+        "ASY-101",
+        "ASY-102",
+        "ASY-103",
+        "ASY-104",
+        "ASY-105",
     ]
+    Category = "ASY"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -46,98 +48,25 @@
         @param args dictionary of arguments for the various checks
         @type dict
         """
-        self.__select = tuple(select)
-        self.__ignore = (
-            ("",) if select else tuple(x for x in ignore if x.startswith("ASY"))
+        super().__init__(
+            AsyncChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
         )
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
 
         checkersWithCodes = [
             (
                 self.__checkSyncUses,
-                ("ASY100", "ASY101", "ASY102", "ASY103", "ASY104", "ASY105"),
+                ("ASY-100", "ASY-101", "ASY-102", "ASY-103", "ASY-104", "ASY-105"),
             ),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against miscellaneous
-        conditions.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     def __checkSyncUses(self):
         """
@@ -145,10 +74,7 @@
         """
         from .AsyncVisitor import AsyncVisitor
 
-        visitor = AsyncVisitor(self.__args, self)
-        visitor.visit(copy.deepcopy(self.__tree))
+        visitor = AsyncVisitor(self.args, self)
+        visitor.visit(copy.deepcopy(self.tree))
         for violation in visitor.violations:
-            if not self.__ignoreCode(violation[1]):
-                node = violation[0]
-                reason = violation[1]
-                self.__error(node.lineno - 1, node.col_offset, reason)
+            self.addErrorFromNode(violation[0], violation[1])
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Async/AsyncVisitor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Async/AsyncVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -147,7 +147,7 @@
                 and isinstance(inner.func, ast.Name)
                 and inner.func.id == "open"
             ):
-                errorCode = "ASY101"
+                errorCode = "ASY-101"
 
             elif (
                 isinstance(inner, ast.withitem)
@@ -155,7 +155,7 @@
                 and isinstance(inner.context_expr.func, ast.Name)
                 and inner.context_expr.func.id == "open"
             ):
-                errorCode = "ASY103"
+                errorCode = "ASY-103"
                 inner = inner.context_expr
 
             elif isinstance(inner, ast.Call):
@@ -167,9 +167,9 @@
                     "request.urlopen",
                     "urlopen",
                 ):
-                    errorCode = "ASY100"
+                    errorCode = "ASY-100"
                 elif funcName == "time.sleep":
-                    errorCode = "ASY101"
+                    errorCode = "ASY-101"
                 else:
                     match = re.fullmatch(
                         r"(?P<package>{0}|os\.path|os|subprocess|urllib3)\."
@@ -181,7 +181,7 @@
                             match.group("package") in self.HttpPackages
                             and match.group("method") in self.HttpMethods
                         ):
-                            errorCode = "ASY100"
+                            errorCode = "ASY-100"
 
                         elif (
                             match.group("package") == "subprocess"
@@ -190,19 +190,19 @@
                             match.group("package") == "os"
                             and match.group("method") in self.OsWaitMethods
                         ):
-                            errorCode = "ASY101"
+                            errorCode = "ASY-101"
 
                         elif (
                             match.group("package") == "os"
                             and match.group("method") in self.OsProcessMethods
                         ):
-                            errorCode = "ASY102"
+                            errorCode = "ASY-102"
 
                         elif (
                             match.group("package") == "os.path"
                             and match.group("method") in self.OsPathFuncs
                         ):
-                            errorCode = "ASY104"
+                            errorCode = "ASY-104"
 
                         elif (
                             match.group("package") == "httpx"
@@ -211,7 +211,7 @@
                             match.group("package") == "urllib3"
                             and match.group("method") in self.Urllib3DangerousClasses
                         ):
-                            errorCode = "ASY105"
+                            errorCode = "ASY-105"
 
             if errorCode:
                 self.violations.append((inner, errorCode))
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Async/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Async/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -11,25 +11,25 @@
 from PyQt6.QtCore import QCoreApplication
 
 _asyncMessages = {
-    "ASY100": QCoreApplication.translate(
+    "ASY-100": QCoreApplication.translate(
         "AsyncChecker", "sync HTTP call in async function, use httpx.AsyncClient"
     ),
-    "ASY101": QCoreApplication.translate(
+    "ASY-101": QCoreApplication.translate(
         "AsyncChecker", "blocking sync call in async function, use framework equivalent"
     ),
-    "ASY102": QCoreApplication.translate(
+    "ASY-102": QCoreApplication.translate(
         "AsyncChecker", "sync process call in async function, use framework equivalent"
     ),
-    "ASY103": QCoreApplication.translate(
+    "ASY-103": QCoreApplication.translate(
         "AsyncChecker",
         "blocking sync context manager in async function,"
         " use 'async with' statement",
     ),
-    "ASY104": QCoreApplication.translate(
+    "ASY-104": QCoreApplication.translate(
         "AsyncChecker",
         "avoid using os.path, prefer using 'trio.Path' or 'anyio.Path' objects",
     ),
-    "ASY105": QCoreApplication.translate(
+    "ASY-105": QCoreApplication.translate(
         "AsyncChecker",
         "use of potentially dangerous class in async function, use"
         " httpx.AsyncClient",
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,13 +26,11 @@
 from NameOrder.NameOrderChecker import NameOrderChecker
 from Naming.NamingStyleChecker import NamingStyleChecker
 from PathLib.PathlibChecker import PathlibChecker
+from Pydantic.PydanticChecker import PydanticChecker
 from Security.SecurityChecker import SecurityChecker
 from Simplify.SimplifyChecker import SimplifyChecker
 from Unused.UnusedChecker import UnusedChecker
 
-# register the name checker
-pycodestyle.register_check(NamingStyleChecker, NamingStyleChecker.Codes)
-
 
 def initService():
     """
@@ -71,7 +69,7 @@
         self.__repeat = options.repeat
         self.errors = []
 
-    def error_args(self, line_number, offset, errorCode, check, *args):
+    def error_args(self, line_number, offset, text, _check, *args):
         """
         Public method to collect the error messages.
 
@@ -79,16 +77,29 @@
         @type int
         @param offset position within line of the issue
         @type int
-        @param errorCode error message code
+        @param text issue message code or issue text
         @type str
-        @param check reference to the checker function
+        @param _check reference to the checker function
         @type function
         @param args arguments for the message
         @type list
         @return error code
         @rtype str
         """
-        errorCode = super().error_args(line_number, offset, errorCode, check, *args)
+        code = text.split(None, 1)[0]
+        errorCode = code[0] + "-" + code[1:]
+        if self._ignore_code(errorCode):
+            return None
+
+        if errorCode in self.counters:
+            self.counters[errorCode] += 1
+        else:
+            self.counters[errorCode] = 1
+
+        # Don't care about expected errors or warnings
+        if errorCode in self.expected:
+            return None
+
         if errorCode and (self.counters[errorCode] == 1 or self.__repeat):
             self.errors.append(
                 {
@@ -99,6 +110,7 @@
                     "args": args,
                 }
             )
+
         return errorCode
 
 
@@ -349,11 +361,11 @@
                 "file": filename,
                 "line": offset[0],
                 "offset": offset[1],
-                "code": "E901",
+                "code": "E-901",
                 "args": [exc_type.__name__, exc.args[0]],
             },
             {
-                "E901": 1,
+                "E-901": 1,
             },
             None,
         )
@@ -459,8 +471,8 @@
             styleGuide = pycodestyle.StyleGuide(
                 reporter=CodeStyleCheckerReport,
                 repeat=repeatMessages,
-                select=select,
-                ignore=ignore,
+                select=[],
+                ignore=[x for x in ignore if x.startswith(("E", "W"))],
                 max_line_length=maxLineLength,
                 max_doc_length=maxDocLineLength,
                 hang_closing=hangClosing,
@@ -555,6 +567,21 @@
             stats.update(importsChecker.counters)
             errors += importsChecker.errors
 
+            # check naming style
+            namingStyleChecker = NamingStyleChecker(
+                source,
+                filename,
+                tree,
+                select,
+                ignore,
+                [],
+                repeatMessages,
+                {},  # no arguments yet
+            )
+            namingStyleChecker.run()
+            stats.update(namingStyleChecker.counters)
+            errors += namingStyleChecker.errors
+
             # check name ordering
             nameOrderChecker = NameOrderChecker(
                 source,
@@ -615,6 +642,21 @@
             stats.update(loggingChecker.counters)
             errors += loggingChecker.errors
 
+            # check 'pydantic' related topics
+            pydanticChecker = PydanticChecker(
+                source,
+                filename,
+                tree,
+                select,
+                ignore,
+                [],
+                repeatMessages,
+                {},  # no arguments yet
+            )
+            pydanticChecker.run()
+            stats.update(pydanticChecker.counters)
+            errors += pydanticChecker.errors
+
         elif syntaxError:
             errors = [syntaxError]
             stats.update(syntaxStats)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,6 +12,7 @@
 import fnmatch
 import json
 import os
+import re
 import time
 
 from PyQt6.QtCore import QCoreApplication, Qt, QTimer, pyqtSlot
@@ -93,6 +94,9 @@
         "N": QCoreApplication.translate("CheckerCategories", "Naming"),
         "NO": QCoreApplication.translate("CheckerCategories", "Name Order"),
         "P": QCoreApplication.translate("CheckerCategories", "'pathlib' Usage"),
+        "PYD": QCoreApplication.translate(
+            "CheckerCategories", "'pydantic' and 'dataclass' Usage"
+        ),
         "S": QCoreApplication.translate("CheckerCategories", "Security"),
         "U": QCoreApplication.translate("CheckerCategories", "Unused"),
         "W": QCoreApplication.translate("CheckerCategories", "Warnings"),
@@ -451,7 +455,7 @@
             "MaxDocLineLength": 88,
             "BlankLines": (2, 1),  # top level, method
             "HangClosing": False,
-            "NoFixCodes": "E501",
+            "NoFixCodes": "E-501",
             "DocstringType": "pep257",
             "ShowIgnored": False,
             # Complexity
@@ -794,7 +798,7 @@
             self.__data["UnusedChecker"]["IgnoreDunderGlobals"]
         )
 
-        self.__cleanupData()
+        self.__migrateIssueCodes()
 
     def __prepareProgress(self):
         """
@@ -879,7 +883,7 @@
         self.__errorItem = None
         self.__resetStatistics()
         self.__clearErrors(self.files)
-        self.__cleanupData()
+        self.__migrateIssueCodes()
         self.__prepareProgress()
 
         # disable updates of the list for speed
@@ -893,7 +897,7 @@
 
             # extract the configuration values
             excludeMessages = self.__assembleExcludeMessages()
-            includeMessages = self.includeMessagesEdit.text()
+            includeMessages = self.__assembleIncludeMessages()
             repeatMessages = self.repeatCheckBox.isChecked()
             fixCodes = self.fixIssuesEdit.text()
             noFixCodes = self.noFixIssuesEdit.text()
@@ -1053,7 +1057,7 @@
         """
         Private method to modify the options based on eflag: entries.
 
-        This method looks for comment lines like '# eflag: noqa = M601'
+        This method looks for comment lines like '# eflag: noqa = M-601'
         at the end of the source in order to extend the list of excluded
         messages for one file only.
 
@@ -1373,7 +1377,7 @@
         """
         Private slot to start a code style check run.
         """
-        self.__cleanupData()
+        self.__migrateIssueCodes()
 
         if self.__forProject:
             data = {
@@ -1601,7 +1605,7 @@
             vm.openSourceFile(fn, lineno=lineno, pos=position + 1)
             editor = vm.getOpenEditor(fn)
 
-            if issueCode in ["E901", "E902"]:
+            if issueCode in ["E-901", "E-902"]:
                 editor.toggleSyntaxError(lineno, 0, True, message, True)
             else:
                 editor.toggleWarning(
@@ -2200,7 +2204,7 @@
             )
         )
 
-        self.__cleanupData()
+        self.__migrateIssueCodes()
 
     @pyqtSlot()
     def on_storeDefaultButton_clicked(self):
@@ -2916,7 +2920,7 @@
         disabledCategories = self.__getCategories(False)
 
         if excludeMessages and disabledCategories:
-            return disabledCategories + "," + excludeMessages
+            return disabledCategories + ", " + excludeMessages
         elif disabledCategories:
             return disabledCategories
         elif excludeMessages:
@@ -2924,30 +2928,39 @@
         else:
             return ""
 
-    def __cleanupData(self):
+    def __assembleIncludeMessages(self):
         """
-        Private method to clean the loaded/entered data of redundant entries.
+        Private method to assemble the list of included checks.
+
+        @return list of included checks as a comma separated string.
+        @rtype str
         """
-        # Migrate single letter exclude messages to disabled checker categories
-        # and delete them from exclude messages
-        excludedMessages = [
-            m.strip() for m in self.excludeMessagesEdit.text().split(",") if bool(m)
-        ]
-        excludedMessageCategories = [c for c in excludedMessages if len(c) == 1]
-        enabledCheckers = self.__getCategories(True, asList=True)
-        for category in excludedMessageCategories:
-            if category in enabledCheckers:
-                enabledCheckers.remove(category)
-            excludedMessages.remove(category)
+        includeMessages = self.includeMessagesEdit.text()
+        enabledCategories = self.__getCategories(True)
+
+        if includeMessages and enabledCategories:
+            return enabledCategories + ", " + includeMessages
+        elif enabledCategories:
+            return enabledCategories
+        elif includeMessages:
+            return includeMessages
+        else:
+            return ""
 
-        # Remove excluded messages of an already excluded category
-        disabledCheckers = self.__getCategories(False, asList=True)
-        for message in excludedMessages[:]:
-            if message[0] in disabledCheckers:
-                excludedMessages.remove(message)
-
-        self.excludeMessagesEdit.setText(",".join(excludedMessages))
-        self.__initCategoriesList(",".join(enabledCheckers))
+    def __migrateIssueCodes(self):
+        """
+        Private method to migrate the issue codes to the form 'category'-'number'.
+        """
+        pat = re.compile(r"([A-Z]{1,3}(?!-))(\d{,3}[a-z]*)")
+        for widget in (
+            self.excludeMessagesEdit,
+            self.includeMessagesEdit,
+            self.fixIssuesEdit,
+            self.noFixIssuesEdit,
+        ):
+            codes = widget.text()
+            newCodes = pat.sub(r"\1-\2", codes)
+            widget.setText(newCodes)
 
     def __initCommentedCodeCheckerWhiteList(self, whitelist):
         """
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleFixer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -21,83 +21,83 @@
 with contextlib.suppress(ImportError):
     import pycodestyle
 
-FixableCodeStyleIssues = [  # noqa: U200
-    "D111",
-    "D112",
-    "D121",
-    "D131",
-    "D141",
-    "D142",
-    "D143",
-    "D144",
-    "D145",
-    "D221",
-    "D222",
-    "D231",
-    "D242",
-    "D243",
-    "D244",
-    "D245",
-    "D246",
-    "D247",
-    "E101",
-    "E111",
-    "E121",
-    "E122",
-    "E123",
-    "E124",
-    "E125",
-    "E126",
-    "E127",
-    "E128",
-    "E133",
-    "E201",
-    "E202",
-    "E203",
-    "E211",
-    "E221",
-    "E222",
-    "E223",
-    "E224",
-    "E225",
-    "E226",
-    "E227",
-    "E228",
-    "E231",
-    "E241",
-    "E242",
-    "E251",
-    "E261",
-    "E262",
-    "E271",
-    "E272",
-    "E273",
-    "E274",
-    "E301",
-    "E302",
-    "E303",
-    "E304",
-    "E305",
-    "E306",
-    "E307",
-    "E308",
-    "E401",
-    "E501",
-    "E502",
-    "E701",
-    "E702",
-    "E703",
-    "E711",
-    "E712",
-    "N804",
-    "N805",
-    "N806",
-    "W191",
-    "W291",
-    "W292",
-    "W293",
-    "W391",
-    "W603",
+FixableCodeStyleIssues = [  # noqa: U-200
+    "D-111",
+    "D-112",
+    "D-121",
+    "D-131",
+    "D-141",
+    "D-142",
+    "D-143",
+    "D-144",
+    "D-145",
+    "D-221",
+    "D-222",
+    "D-231",
+    "D-242",
+    "D-243",
+    "D-244",
+    "D-245",
+    "D-246",
+    "D-247",
+    "E-101",
+    "E-111",
+    "E-121",
+    "E-122",
+    "E-123",
+    "E-124",
+    "E-125",
+    "E-126",
+    "E-127",
+    "E-128",
+    "E-133",
+    "E-201",
+    "E-202",
+    "E-203",
+    "E-211",
+    "E-221",
+    "E-222",
+    "E-223",
+    "E-224",
+    "E-225",
+    "E-226",
+    "E-227",
+    "E-228",
+    "E-231",
+    "E-241",
+    "E-242",
+    "E-251",
+    "E-261",
+    "E-262",
+    "E-271",
+    "E-272",
+    "E-273",
+    "E-274",
+    "E-301",
+    "E-302",
+    "E-303",
+    "E-304",
+    "E-305",
+    "E-306",
+    "E-307",
+    "E-308",
+    "E-401",
+    "E-501",
+    "E-502",
+    "E-701",
+    "E-702",
+    "E-703",
+    "E-711",
+    "E-712",
+    "N-804",
+    "N-805",
+    "N-806",
+    "W-191",
+    "W-291",
+    "W-292",
+    "W-293",
+    "W-391",
+    "W-603",
 ]
 
 
@@ -174,82 +174,82 @@
         self.__eol = eol
 
         self.__fixes = {
-            "D111": self.__fixD111,
-            "D112": self.__fixD112,
-            "D121": self.__fixD121,
-            "D131": self.__fixD131,
-            "D141": self.__fixD141,
-            "D142": self.__fixD142,
-            "D143": self.__fixD143,
-            "D144": self.__fixD144,
-            "D145": self.__fixD145,
-            "D221": self.__fixD221,
-            "D222": self.__fixD221,
-            "D231": self.__fixD131,
-            "D242": self.__fixD242,
-            "D243": self.__fixD243,
-            "D244": self.__fixD242,
-            "D245": self.__fixD243,
-            "D246": self.__fixD144,
-            "D247": self.__fixD247,
-            "E101": self.__fixE101,
-            "E111": self.__fixE101,
-            "E121": self.__fixE121,
-            "E122": self.__fixE122,
-            "E123": self.__fixE123,
-            "E124": self.__fixE121,
-            "E125": self.__fixE125,
-            "E126": self.__fixE126,
-            "E127": self.__fixE127,
-            "E128": self.__fixE127,
-            "E133": self.__fixE126,
-            "E201": self.__fixE201,
-            "E202": self.__fixE201,
-            "E203": self.__fixE201,
-            "E211": self.__fixE201,
-            "E221": self.__fixE221,
-            "E222": self.__fixE221,
-            "E223": self.__fixE221,
-            "E224": self.__fixE221,
-            "E225": self.__fixE225,
-            "E226": self.__fixE225,
-            "E227": self.__fixE225,
-            "E228": self.__fixE225,
-            "E231": self.__fixE231,
-            "E241": self.__fixE221,
-            "E242": self.__fixE221,
-            "E251": self.__fixE251,
-            "E261": self.__fixE261,
-            "E262": self.__fixE261,
-            "E271": self.__fixE221,
-            "E272": self.__fixE221,
-            "E273": self.__fixE221,
-            "E274": self.__fixE221,
-            "E301": self.__fixBlankLinesBefore,
-            "E302": self.__fixBlankLinesBefore,
-            "E303": self.__fixBlankLinesBefore,
-            "E304": self.__fixE304,
-            "E305": self.__fixBlankLinesBefore,
-            "E306": self.__fixBlankLinesBefore,
-            "E307": self.__fixBlankLinesBefore,
-            "E308": self.__fixBlankLinesBefore,
-            "E401": self.__fixE401,
-            "E501": self.__fixE501,
-            "E502": self.__fixE502,
-            "E701": self.__fixE701,
-            "E702": self.__fixE702,
-            "E703": self.__fixE702,
-            "E711": self.__fixE711,
-            "E712": self.__fixE711,
-            "N804": self.__fixN804,
-            "N805": self.__fixN804,
-            "N806": self.__fixN806,
-            "W191": self.__fixE101,
-            "W291": self.__fixW291,
-            "W292": self.__fixW292,
-            "W293": self.__fixW291,
-            "W391": self.__fixW391,
-            "W603": self.__fixW603,
+            "D-111": self.__fixD111,
+            "D-112": self.__fixD112,
+            "D-121": self.__fixD121,
+            "D-131": self.__fixD131,
+            "D-141": self.__fixD141,
+            "D-142": self.__fixD142,
+            "D-143": self.__fixD143,
+            "D-144": self.__fixD144,
+            "D-145": self.__fixD145,
+            "D-221": self.__fixD221,
+            "D-222": self.__fixD221,
+            "D-231": self.__fixD131,
+            "D-242": self.__fixD242,
+            "D-243": self.__fixD243,
+            "D-244": self.__fixD242,
+            "D-245": self.__fixD243,
+            "D-246": self.__fixD144,
+            "D-247": self.__fixD247,
+            "E-101": self.__fixE101,
+            "E-111": self.__fixE101,
+            "E-121": self.__fixE121,
+            "E-122": self.__fixE122,
+            "E-123": self.__fixE123,
+            "E-124": self.__fixE121,
+            "E-125": self.__fixE125,
+            "E-126": self.__fixE126,
+            "E-127": self.__fixE127,
+            "E-128": self.__fixE127,
+            "E-133": self.__fixE126,
+            "E-201": self.__fixE201,
+            "E-202": self.__fixE201,
+            "E-203": self.__fixE201,
+            "E-211": self.__fixE201,
+            "E-221": self.__fixE221,
+            "E-222": self.__fixE221,
+            "E-223": self.__fixE221,
+            "E-224": self.__fixE221,
+            "E-225": self.__fixE225,
+            "E-226": self.__fixE225,
+            "E-227": self.__fixE225,
+            "E-228": self.__fixE225,
+            "E-231": self.__fixE231,
+            "E-241": self.__fixE221,
+            "E-242": self.__fixE221,
+            "E-251": self.__fixE251,
+            "E-261": self.__fixE261,
+            "E-262": self.__fixE261,
+            "E-271": self.__fixE221,
+            "E-272": self.__fixE221,
+            "E-273": self.__fixE221,
+            "E-274": self.__fixE221,
+            "E-301": self.__fixBlankLinesBefore,
+            "E-302": self.__fixBlankLinesBefore,
+            "E-303": self.__fixBlankLinesBefore,
+            "E-304": self.__fixE304,
+            "E-305": self.__fixBlankLinesBefore,
+            "E-306": self.__fixBlankLinesBefore,
+            "E-307": self.__fixBlankLinesBefore,
+            "E-308": self.__fixBlankLinesBefore,
+            "E-401": self.__fixE401,
+            "E-501": self.__fixE501,
+            "E-502": self.__fixE502,
+            "E-701": self.__fixE701,
+            "E-702": self.__fixE702,
+            "E-703": self.__fixE702,
+            "E-711": self.__fixE711,
+            "E-712": self.__fixE711,
+            "N-804": self.__fixN804,
+            "N-805": self.__fixN804,
+            "N-806": self.__fixN806,
+            "W-191": self.__fixE101,
+            "W-291": self.__fixW291,
+            "W-292": self.__fixW292,
+            "W-293": self.__fixW291,
+            "W-391": self.__fixW391,
+            "W-603": self.__fixW603,
         }
         self.__modified = False
         self.__stackLogical = []
@@ -299,7 +299,7 @@
                 fp.write(txt)
         except (OSError, UnicodeError) as err:
             # Could not save the file! Skipping it. Reason: {0}
-            return ("FIXWRITE_ERROR", [str(err)])
+            return ("FIX-WRITE_ERROR", [str(err)])
 
         return None
 
@@ -633,7 +633,7 @@
             line += 1
 
         # Triple single quotes converted to triple double quotes.
-        return (1, "FIXD111", [], 0)
+        return (1, "FIX-D111", [], 0)
 
     def __fixD112(self, code, line, _pos):
         """
@@ -653,7 +653,7 @@
         @rtype tuple of (int, str, list or int, int)
         """
         line -= 1
-        if code == "D112":
+        if code == "D-112":
             insertChar = "r"
         else:
             return (0, "", 0)
@@ -665,7 +665,7 @@
         )
         self.__source[line] = newText
         # Introductory quotes corrected to be {0}"""
-        return (1, "FIXD112", [insertChar], 0)
+        return (1, "FIX-D112", [insertChar], 0)
 
     def __fixD121(self, code, line, pos, apply=False):
         """
@@ -702,7 +702,7 @@
             self.__source[line] = docstring
             self.__source[line + 1] = ""
             # Single line docstring put on one line.
-            return (1, "FIXD121", [], 0)
+            return (1, "FIX-D121", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -752,7 +752,7 @@
         if newText:
             self.__source[line] = newText
             # Period added to summary line.
-            return (1, "FIXD131", [], 0)
+            return (1, "FIX-D131", [], 0)
         else:
             return (0, "", [], 0)
 
@@ -780,7 +780,7 @@
             line -= 1
             self.__source[line - 1] = ""
             # Blank line before function/method docstring removed.
-            return (1, "FIXD141", [], 0)
+            return (1, "FIX-D141", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -810,7 +810,7 @@
             line -= 1
             self.__source[line] = self.__eol + self.__source[line]
             # Blank line inserted before class docstring.
-            return (1, "FIXD142", [], 0)
+            return (1, "FIX-D142", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -840,7 +840,7 @@
             line -= 1
             self.__source[line] += self.__eol
             # Blank line inserted after class docstring.
-            return (1, "FIXD143", [], 0)
+            return (1, "FIX-D143", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -874,7 +874,7 @@
 
             self.__source[line] += self.__eol
             # Blank line inserted after docstring summary.
-            return (1, "FIXD144", [], 0)
+            return (1, "FIX-D144", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -904,7 +904,7 @@
             line -= 1
             self.__source[line] = self.__eol + self.__source[line]
             # Blank line inserted after last paragraph of docstring.
-            return (1, "FIXD145", [], 0)
+            return (1, "FIX-D145", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -934,7 +934,7 @@
             line -= 1
             indent = self.__getIndent(self.__source[line])
             source = self.__source[line].strip()
-            if code == "D221":
+            if code == "D-221":
                 # leading
                 if source.startswith(("r", "u")):
                     first, second = source[:4], source[4:].strip()
@@ -945,12 +945,12 @@
                 first, second = source[:-3].strip(), source[-3:]
             newText = indent + first + self.__eol + indent + second + self.__eol
             self.__source[line] = newText
-            if code == "D221":
+            if code == "D-221":
                 # Leading quotes put on separate line.
-                msg = "FIXD221"
+                msg = "FIX-D221"
             else:
                 # Trailing quotes put on separate line.
-                msg = "FIXD222"
+                msg = "FIX-D222"
             return (1, msg, [], 0)
         else:
             fixId = self.__getID()
@@ -980,12 +980,12 @@
         if apply:
             line -= 1
             self.__source[line - 1] = ""
-            if code == "D242":
+            if code == "D-242":
                 # Blank line before class docstring removed.
-                msg = "FIXD242"
+                msg = "FIX-D242"
             else:
                 # Blank line before function/method docstring removed.
-                msg = "FIXD244"
+                msg = "FIX-D244"
             return (1, msg, [], 0)
         else:
             fixId = self.__getID()
@@ -1015,12 +1015,12 @@
         if apply:
             line -= 1
             self.__source[line + 1] = ""
-            if code == "D243":
+            if code == "D-243":
                 # Blank line after class docstring removed.
-                msg = "FIXD243"
+                msg = "FIX-D243"
             else:
                 # Blank line after function/method docstring removed.
-                msg = "FIXD245"
+                msg = "FIX-D245"
             return (1, msg, [], 0)
         else:
             fixId = self.__getID()
@@ -1051,7 +1051,7 @@
             line -= 1
             self.__source[line - 1] = ""
             # Blank line after last paragraph removed.
-            return (1, "FIXD247", [], 0)
+            return (1, "FIX-D247", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -1080,12 +1080,12 @@
         fixedLine = self.__reindenter.fixedLine(line - 1)
         if fixedLine is not None and fixedLine != self.__source[line - 1]:
             self.__source[line - 1] = fixedLine
-            if code in ["E101", "W191"]:
+            if code in ["E-101", "W-191"]:
                 # Tab converted to 4 spaces.
-                msg = "FIXE101"
+                msg = "FIX-E101"
             else:
                 # Indentation adjusted to be a multiple of four.
-                msg = "FIXE111"
+                msg = "FIX-E111"
             return (1, msg, [], 0)
         else:
             return (0, "", [], 0)
@@ -1116,12 +1116,12 @@
                 # Fix by adjusting initial indent level.
                 changed = self.__fixReindent(line, pos, logical)
                 if changed:
-                    if code == "E121":
+                    if code == "E-121":
                         # Indentation of continuation line corrected.
-                        msg = "FIXE121"
-                    elif code == "E124":
+                        msg = "FIX-E121"
+                    elif code == "E-124":
                         # Indentation of closing bracket corrected.
-                        msg = "FIXE124"
+                        msg = "FIX-E124"
                     return (1, msg, [], 0)
             return (0, "", [], 0)
         else:
@@ -1162,7 +1162,7 @@
                         indentation + self.__indentWord + text.lstrip()
                     )
                 # Missing indentation of continuation line corrected.
-                return (1, "FIXE122", [], 0)
+                return (1, "FIX-E122", [], 0)
             return (0, "", [], 0)
         else:
             fixId = self.__getID()
@@ -1204,7 +1204,7 @@
                     changed = True
                 if changed:
                     # Closing bracket aligned to opening bracket.
-                    return (1, "FIXE123", [], 0)
+                    return (1, "FIX-E123", [], 0)
             return (0, "", [], 0)
         else:
             fixId = self.__getID()
@@ -1243,7 +1243,7 @@
                         self.__getIndent(text) + self.__indentWord + text.lstrip()
                     )
                 # Indentation level changed.
-                return (1, "FIXE125", [], 0)
+                return (1, "FIX-E125", [], 0)
             return (0, "", [], 0)
         else:
             fixId = self.__getID()
@@ -1290,7 +1290,7 @@
                     changed = True
                 if changed:
                     # Indentation level of hanging indentation changed.
-                    return (1, "FIXE126", [], 0)
+                    return (1, "FIX-E126", [], 0)
             return (0, "", [], 0)
         else:
             fixId = self.__getID()
@@ -1352,7 +1352,7 @@
                     changed = True
                 if changed:
                     # Visual indentation corrected.
-                    return (1, "FIXE127", [], 0)
+                    return (1, "FIX-E127", [], 0)
             return (0, "", [], 0)
         else:
             fixId = self.__getID()
@@ -1388,7 +1388,7 @@
 
         self.__source[line] = newText
         # Extraneous whitespace removed.
-        return (1, "FIXE201", [], 0)
+        return (1, "FIX-E201", [], 0)
 
     def __fixE221(self, _code, line, pos):
         """
@@ -1419,7 +1419,7 @@
             return (0, "", [], 0)
 
         self.__source[line] = newText
-        return (1, "FIXE221", [], 0)
+        return (1, "FIX-E221", [], 0)
 
     def __fixE225(self, _code, line, pos):
         """
@@ -1464,7 +1464,7 @@
 
         self.__source[line] = newText
         # Missing whitespaces added.
-        return (1, "FIXE225", [], 0)
+        return (1, "FIX-E225", [], 0)
 
     def __fixE231(self, _code, line, pos):
         """
@@ -1489,7 +1489,7 @@
             self.__source[line][:pos] + " " + self.__source[line][pos:]
         )
         # Missing whitespace added.
-        return (1, "FIXE231", [], 0)
+        return (1, "FIX-E231", [], 0)
 
     def __fixE251(self, _code, line, pos):
         """
@@ -1527,7 +1527,7 @@
         else:
             self.__source[line] = newText
         # Extraneous whitespace removed.
-        return (1, "FIXE251", [], 0)
+        return (1, "FIX-E251", [], 0)
 
     def __fixE261(self, _code, line, pos):
         """
@@ -1553,7 +1553,7 @@
         newText = left + ("  # " + right if right.strip() else right)
         self.__source[line] = newText
         # Whitespace around comment sign corrected.
-        return (1, "FIXE261", [], 0)
+        return (1, "FIX-E261", [], 0)
 
     def __fixBlankLinesBefore(self, code, line, pos, apply=False):
         """
@@ -1576,9 +1576,9 @@
         @rtype tuple of (int, str, list or int, int)
         """
         if apply:
-            if code in ["E301", "E306", "E307"]:
+            if code in ["E-301", "E-306", "E-307"]:
                 blankLinesBefore = self.__blankLines["method"]
-            elif code == "E308":
+            elif code == "E-308":
                 blankLinesBefore = 1
             else:
                 blankLinesBefore = self.__blankLines["toplevel"]
@@ -1601,7 +1601,7 @@
                     self.__source.insert(line, self.__eol)
                     delta += 1
                 # %n blank line(s) inserted.
-                return (1, "FIXE302+", blankLinesBefore - blanks, 0)
+                return (1, "FIX-E302+", blankLinesBefore - blanks, 0)
             elif delta > 0:
                 # delete superfluous blank lines
                 while delta > 0:
@@ -1609,7 +1609,7 @@
                     line -= 1
                     delta -= 1
                 # %n superfluous line(s) removed.
-                return (1, "FIXE302-", blanks - blankLinesBefore, 0)
+                return (1, "FIX-E302-", blanks - blankLinesBefore, 0)
             else:
                 return (0, "", [], 0)
         else:
@@ -1646,7 +1646,7 @@
                 else:
                     break
             # Superfluous blank lines after function decorator removed.
-            return (1, "FIXE304", [], 0)
+            return (1, "FIX-E304", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -1692,7 +1692,7 @@
             )
             self.__source[line] = newText
             # Imports were put on separate lines.
-            return (1, "FIXE401", [], 0)
+            return (1, "FIX-E401", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -1702,7 +1702,7 @@
         """
         Private method to fix the long lines by breaking them.
 
-        Codes: E501
+        Codes: E-501
 
         @param code code of the issue
         @type str
@@ -1748,7 +1748,7 @@
                         newNextText = ""
                     self.__source[line + 1] = newNextText
                 # Long lines have been shortened.
-                return (1, "FIXE501", [], 0)
+                return (1, "FIX-E-501", [], 0)
             else:
                 return (0, "", [], 0)
         else:
@@ -1777,7 +1777,7 @@
             self.__source[line - 1].rstrip("\n\r \t\\") + self.__eol
         )
         # Redundant backslash in brackets removed.
-        return (1, "FIXE502", [], 0)
+        return (1, "FIX-E502", [], 0)
 
     def __fixE701(self, code, line, pos, apply=False):
         """
@@ -1813,7 +1813,7 @@
             )
             self.__source[line] = newText
             # Compound statement corrected.
-            return (1, "FIXE701", [], 0)
+            return (1, "FIX-E701", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -1853,7 +1853,7 @@
                 second = text[pos:].lstrip("\n\r \t;")
                 self.__source[line] = first + self.__getIndent(text) + second
             # Compound statement corrected.
-            return (1, "FIXE702", [], 0)
+            return (1, "FIX-E702", [], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -1899,7 +1899,7 @@
 
         self.__source[line] = " ".join([left, center, right])
         # Comparison to None/True/False corrected.
-        return (1, "FIXE711", [], 0)
+        return (1, "FIX-E711", [], 0)
 
     def __fixN804(self, code, line, pos, apply=False):
         """
@@ -1924,7 +1924,7 @@
         if apply:
             line -= 1
             text = self.__source[line]
-            if code == "N804":
+            if code == "N-804":
                 arg = "cls"
             else:
                 arg = "self"
@@ -1949,7 +1949,7 @@
                 newText = left + center + right
             self.__source[line] = newText
             # '{0}' argument added.
-            return (1, "FIXN804", [arg], 0)
+            return (1, "FIX-N804", [arg], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -2013,7 +2013,7 @@
                     self.__source[line] = indent + right
 
             # '{0}' argument removed.
-            return (1, "FIXN806", [arg], 0)
+            return (1, "FIX-N806", [arg], 0)
         else:
             fixId = self.__getID()
             self.__stack.append((fixId, code, line, pos))
@@ -2040,7 +2040,7 @@
             r"[\t ]+(\r?)$", r"\1", self.__source[line - 1]
         )
         # Whitespace stripped from end of line.
-        return (1, "FIXW291", [], 0)
+        return (1, "FIX-W291", [], 0)
 
     def __fixW292(self, _code, line, _pos):
         """
@@ -2061,7 +2061,7 @@
         """
         self.__source[line - 1] += self.__eol
         # newline added to end of file.
-        return (1, "FIXW292", [], 0)
+        return (1, "FIX-W292", [], 0)
 
     def __fixW391(self, _code, line, _pos):
         """
@@ -2088,7 +2088,7 @@
             else:
                 break
         # Superfluous trailing blank lines removed from end of file.
-        return (1, "FIXW391", [], 0)
+        return (1, "FIX-W391", [], 0)
 
     def __fixW603(self, _code, line, _pos):
         """
@@ -2109,7 +2109,7 @@
         """
         self.__source[line - 1] = self.__source[line - 1].replace("<>", "!=")
         # '<>' replaced by '!='.
-        return (1, "FIXW603", [], 0)
+        return (1, "FIX-W603", [], 0)
 
 
 class Reindenter:
@@ -3055,7 +3055,7 @@
         """
         count = 0
         for opening, closing in ["()", "[]", "{}"]:
-            # __IGNORE_WARNING_M613__
+            # __IGNORE_WARNING_M-613__
             count += abs(line.count(opening) - line.count(closing))
 
         return count
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleTopicChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing the topic checker base class containing common methods.
+"""
+
+import copy
+
+
+class CodeStyleTopicChecker:
+    """
+    Class implementing the topic checker base class.
+    """
+
+    def __init__(
+        self, category, source, filename, tree, select, ignore, expected, repeat, args
+    ):
+        """
+        Constructor
+
+        @param category checker category code (one to three uppercase characters
+        @type str
+        @param source source code to be checked
+        @type list of str
+        @param filename name of the source file
+        @type str
+        @param tree AST tree of the source code
+        @type ast.Module
+        @param select list of selected codes
+        @type list of str
+        @param ignore list of codes to be ignored
+        @type list of str
+        @param expected list of expected codes
+        @type list of str
+        @param repeat flag indicating to report each occurrence of a code
+        @type bool
+        @param args dictionary of arguments for the various checks
+        @type dict
+        """
+        self.__category = category
+
+        codeFilter = f"{category}-"
+        self.selected = tuple(x for x in select if x.startswith(codeFilter))
+        self.ignored = tuple(
+            x for x in ignore if x.startswith(codeFilter) or x == category
+        )
+        self.expected = [x for x in expected if x.startswith(codeFilter)]
+
+        self.repeat = repeat
+        self.filename = filename
+        self.source = source[:]
+        self.tree = copy.deepcopy(tree)
+        self.args = args
+
+        # statistics counters
+        self.counters = {}
+
+        # collection of detected errors
+        self.errors = []
+
+    def _initializeCheckers(self, checkersWithCodes):
+        """
+        Protected method to determine the list of check methods to be run.
+
+        This list is determined considering the list if selected and ignored issue
+        codes.
+
+        @param checkersWithCodes DESCRIPTION
+        @type TYPE
+        """
+        # checkers to be run
+        self.__checkers = []
+
+        for checker, msgCodes in checkersWithCodes:
+            if any(not (msgCode and self._ignoreCode(msgCode)) for msgCode in msgCodes):
+                self.__checkers.append(checker)
+
+    def _ignoreCode(self, code):
+        """
+        Protected method to check if the message code should be ignored.
+
+        @param code message code to check for
+        @type str
+        @return flag indicating to ignore the given code
+        @rtype bool
+        """
+        return code in self.ignored or (
+            code.startswith(self.ignored) and not code.startswith(self.selected)
+        )
+
+    def addError(self, lineNumber, offset, msgCode, *args):
+        """
+        Public method to record an issue.
+
+        @param lineNumber line number of the issue (one based)
+        @type int
+        @param offset position within line of the issue
+        @type int
+        @param msgCode message code
+        @type str
+        @param args arguments for the message
+        @type list
+        """
+        if self._ignoreCode(msgCode):
+            return
+
+        if msgCode in self.counters:
+            self.counters[msgCode] += 1
+        else:
+            self.counters[msgCode] = 1
+
+        # Don't care about expected codes
+        if msgCode in self.expected:
+            return
+
+        if msgCode and (self.counters[msgCode] == 1 or self.repeat):
+            # record the issue with one based line number
+            self.errors.append(
+                {
+                    "file": self.filename,
+                    "line": lineNumber,
+                    "offset": offset,
+                    "code": msgCode,
+                    "args": args,
+                }
+            )
+
+    def addErrorFromNode(self, node, msgCode, *args):
+        """
+        Public method to record an issue given the faulty ast node.
+
+        @param node reference to the node containing the issue
+        @type ast.AST
+        @param msgCode message code
+        @type str
+        @param args arguments for the message
+        @type list
+        """
+        self.addError(node.lineno, node.col_offset, msgCode, *args)
+
+    def run(self):
+        """
+        Public method to execute the relevant checks.
+        """
+        if not self.filename:
+            # don't do anything, if essential data is missing
+            return
+
+        if not self.__checkers:
+            # don't do anything, if no codes were selected
+            return
+
+        for check in self.__checkers:
+            check()
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/ComplexityChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/ComplexityChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -8,21 +8,23 @@
 """
 
 import ast
-import copy
+
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
 from .mccabe import PathGraphingAstVisitor
 
 
-class ComplexityChecker:
+class ComplexityChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for code complexity.
     """
 
     Codes = [
-        "C101",
-        "C111",
-        "C112",
+        "C-101",
+        "C-111",
+        "C-112",
     ]
+    Category = "C"
 
     def __init__(self, source, filename, tree, select, ignore, args):
         """
@@ -41,12 +43,17 @@
         @param args dictionary of arguments for the miscellaneous checks
         @type dict
         """
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__args = args
+        super().__init__(
+            ComplexityChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            [],
+            True,
+            args,
+        )
 
         self.__defaultArgs = {
             "McCabeComplexity": 10,
@@ -54,80 +61,11 @@
             "LineComplexityScore": 10,
         }
 
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
-
         checkersWithCodes = [
-            (self.__checkMcCabeComplexity, ("C101",)),
-            (self.__checkLineComplexity, ("C111", "C112")),
+            (self.__checkMcCabeComplexity, ("C-101",)),
+            (self.__checkLineComplexity, ("C-111", "C-112")),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        if code:
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source for code complexity.
-        """
-        if not self.__filename or not self.__source:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     def __checkMcCabeComplexity(self):
         """
@@ -136,13 +74,13 @@
         try:
             # create the AST again because it is modified by the checker
             tree = compile(
-                "".join(self.__source), self.__filename, "exec", ast.PyCF_ONLY_AST
+                "".join(self.source), self.filename, "exec", ast.PyCF_ONLY_AST
             )
         except (SyntaxError, TypeError):
             # compile errors are already reported by the run() method
             return
 
-        maxComplexity = self.__args.get(
+        maxComplexity = self.args.get(
             "McCabeComplexity", self.__defaultArgs["McCabeComplexity"]
         )
 
@@ -150,7 +88,9 @@
         visitor.preorder(tree, visitor)
         for graph in visitor.graphs.values():
             if graph.complexity() > maxComplexity:
-                self.__error(graph.lineno, 0, "C101", graph.entity, graph.complexity())
+                self.addError(
+                    graph.lineno + 1, 0, "C-101", graph.entity, graph.complexity()
+                )
 
     def __checkLineComplexity(self):
         """
@@ -160,25 +100,25 @@
         Complexity is defined as the number of AST nodes produced by a line
         of code.
         """
-        maxLineComplexity = self.__args.get(
+        maxLineComplexity = self.args.get(
             "LineComplexity", self.__defaultArgs["LineComplexity"]
         )
-        maxLineComplexityScore = self.__args.get(
+        maxLineComplexityScore = self.args.get(
             "LineComplexityScore", self.__defaultArgs["LineComplexityScore"]
         )
 
         visitor = LineComplexityVisitor()
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
 
         sortedItems = visitor.sortedList()
         score = visitor.score()
 
         for line, complexity in sortedItems:
             if complexity > maxLineComplexity:
-                self.__error(line, 0, "C111", complexity)
+                self.addError(line + 1, 0, "C-111", complexity)
 
         if score > maxLineComplexityScore:
-            self.__error(0, 0, "C112", score)
+            self.addError(1, 0, "C-112", score)
 
 
 class LineComplexityVisitor(ast.NodeVisitor):
@@ -204,6 +144,7 @@
         """
         if hasattr(node, "lineno"):
             self.__count[node.lineno] = self.__count.get(node.lineno, 0) + 1
+
         self.generic_visit(node)
 
     def sortedList(self):
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Complexity/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,19 +12,19 @@
 from PyQt6.QtCore import QCoreApplication
 
 _complexityMessages = {
-    "C101": QCoreApplication.translate(
+    "C-101": QCoreApplication.translate(
         "ComplexityChecker", "'{0}' is too complex ({1})"
     ),
-    "C111": QCoreApplication.translate(
+    "C-111": QCoreApplication.translate(
         "ComplexityChecker", "source code line is too complex ({0})"
     ),
-    "C112": QCoreApplication.translate(
+    "C-112": QCoreApplication.translate(
         "ComplexityChecker", "overall source code line complexity is too high ({0})"
     ),
 }
 
 _complexityMessagesSampleArgs = {
-    "C101": ["foo.bar", "42"],
-    "C111": [42],
-    "C112": [12.0],
+    "C-101": ["foo.bar", "42"],
+    "C-111": [42],
+    "C-112": [12.0],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/DocStyleChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -13,6 +13,7 @@
 #
 
 import ast
+import collections
 import contextlib
 import tokenize
 
@@ -23,6 +24,8 @@
 except AttributeError:
     ast.AsyncFunctionDef = ast.FunctionDef
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
+
 
 class DocStyleContext:
     """
@@ -127,68 +130,69 @@
         return self.__special
 
 
-class DocStyleChecker:
+class DocStyleChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for documentation string conventions.
     """
 
     Codes = [
-        "D101",
-        "D102",
-        "D103",
-        "D104",
-        "D105",
-        "D111",
-        "D112",
-        "D121",
-        "D122",
-        "D130",
-        "D131",
-        "D132",
-        "D133",
-        "D134",
-        "D141",
-        "D142",
-        "D143",
-        "D144",
-        "D145",
-        "D201",
-        "D202.1",
-        "D202.2",
-        "D203",
-        "D205",
-        "D206",
-        "D221",
-        "D222",
-        "D231",
-        "D232",
-        "D234r",
-        "D234y",
-        "D235r",
-        "D235y",
-        "D236",
-        "D237",
-        "D238",
-        "D239",
-        "D242",
-        "D243",
-        "D244",
-        "D245",
-        "D246",
-        "D247",
-        "D250",
-        "D251",
-        "D252",
-        "D253",
-        "D260",
-        "D261",
-        "D262",
-        "D263",
-        "D270",
-        "D271",
-        "D272",
-        "D273",
+        "D-101",
+        "D-102",
+        "D-103",
+        "D-104",
+        "D-105",
+        "D-111",
+        "D-112",
+        "D-121",
+        "D-122",
+        "D-130",
+        "D-131",
+        "D-132",
+        "D-133",
+        "D-134",
+        "D-141",
+        "D-142",
+        "D-143",
+        "D-144",
+        "D-145",
+        "D-201",
+        "D-202.1",
+        "D-202.2",
+        "D-203",
+        "D-205",
+        "D-206",
+        "D-221",
+        "D-222",
+        "D-231",
+        "D-232",
+        "D-234r",
+        "D-234y",
+        "D-235r",
+        "D-235y",
+        "D-236",
+        "D-237",
+        "D-238",
+        "D-239",
+        "D-242",
+        "D-243",
+        "D-244",
+        "D-245",
+        "D-246",
+        "D-247",
+        "D-250",
+        "D-251",
+        "D-252",
+        "D-253",
+        "D-260",
+        "D-261",
+        "D-262",
+        "D-263",
+        "D-270",
+        "D-271",
+        "D-272",
+        "D-273",
     ]
+    Category = "D"
 
     def __init__(
         self,
@@ -221,21 +225,20 @@
         @param docType type of the documentation strings (one of 'eric' or 'pep257')
         @type str
         """
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__expected = expected[:]
-        self.__repeat = repeat
+        super().__init__(
+            DocStyleChecker.Category,
+            source,
+            filename,
+            None,
+            select,
+            ignore,
+            expected,
+            repeat,
+            [],
+        )
+
         self.__maxLineLength = maxLineLength
         self.__docType = docType
-        self.__filename = filename
-        self.__source = source[:]
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
-
         self.__lineNumber = 0
 
         # caches
@@ -254,138 +257,106 @@
         if self.__docType == "pep257":
             checkersWithCodes = {
                 "moduleDocstring": [
-                    (self.__checkModulesDocstrings, ("D101",)),
+                    (self.__checkModulesDocstrings, ("D-101",)),
                 ],
                 "functionDocstring": [],
                 "classDocstring": [
-                    (self.__checkClassDocstring, ("D104", "D105")),
-                    (self.__checkBlankBeforeAndAfterClass, ("D142", "D143")),
+                    (self.__checkClassDocstring, ("D-104", "D-105")),
+                    (self.__checkBlankBeforeAndAfterClass, ("D-142", "D-143")),
                 ],
                 "methodDocstring": [],
                 "defDocstring": [
-                    (self.__checkFunctionDocstring, ("D102", "D103")),
-                    (self.__checkImperativeMood, ("D132",)),
-                    (self.__checkNoSignature, ("D133",)),
-                    (self.__checkReturnType, ("D134",)),
-                    (self.__checkNoBlankLineBefore, ("D141",)),
+                    (self.__checkFunctionDocstring, ("D-102", "D-103")),
+                    (self.__checkImperativeMood, ("D-132",)),
+                    (self.__checkNoSignature, ("D-133",)),
+                    (self.__checkReturnType, ("D-134",)),
+                    (self.__checkNoBlankLineBefore, ("D-141",)),
                 ],
                 "docstring": [
-                    (self.__checkTripleDoubleQuotes, ("D111",)),
-                    (self.__checkBackslashes, ("D112",)),
-                    (self.__checkOneLiner, ("D121",)),
-                    (self.__checkIndent, ("D122",)),
-                    (self.__checkSummary, ("D130",)),
-                    (self.__checkEndsWithPeriod, ("D131",)),
-                    (self.__checkBlankAfterSummary, ("D144",)),
-                    (self.__checkBlankAfterLastParagraph, ("D145",)),
+                    (self.__checkTripleDoubleQuotes, ("D-111",)),
+                    (self.__checkBackslashes, ("D-112",)),
+                    (self.__checkOneLiner, ("D-121",)),
+                    (self.__checkIndent, ("D-122",)),
+                    (self.__checkSummary, ("D-130",)),
+                    (self.__checkEndsWithPeriod, ("D-131",)),
+                    (self.__checkBlankAfterSummary, ("D-144",)),
+                    (self.__checkBlankAfterLastParagraph, ("D-145",)),
                 ],
             }
         elif self.__docType in ("eric", "eric_black"):
             checkersWithCodes = {
                 "moduleDocstring": [
-                    (self.__checkModulesDocstrings, ("D101", "D201")),
+                    (self.__checkModulesDocstrings, ("D-101", "D-201")),
                 ],
                 "functionDocstring": [],
                 "classDocstring": [
-                    (self.__checkClassDocstring, ("D104", "D205", "D206")),
+                    (self.__checkClassDocstring, ("D-104", "D-205", "D-206")),
                     (
                         self.__checkEricNoBlankBeforeAndAfterClassOrFunction,
-                        ("D242", "D243"),
+                        ("D-242", "D-243"),
                     ),
-                    (self.__checkEricSignal, ("D260", "D261", "D262", "D263")),
+                    (self.__checkEricSignal, ("D-260", "D-261", "D-262", "D-263")),
                 ],
                 "methodDocstring": [
-                    (self.__checkEricSummary, ("D232")),
+                    (self.__checkEricSummary, ("D-232")),
                 ],
                 "defDocstring": [
                     (
                         self.__checkFunctionDocstring,
-                        ("D102", "D202.1", "D202.2", "D203"),
+                        ("D-102", "D-202.1", "D-202.2", "D-203"),
                     ),
-                    (self.__checkImperativeMood, ("D132",)),
-                    (self.__checkNoSignature, ("D133",)),
-                    (self.__checkEricReturn, ("D234r", "D235r")),
-                    (self.__checkEricYield, ("D234y", "D235y")),
+                    (self.__checkImperativeMood, ("D-132",)),
+                    (self.__checkNoSignature, ("D-133",)),
+                    (self.__checkEricReturn, ("D-234r", "D-235r")),
+                    (self.__checkEricYield, ("D-234y", "D-235y")),
                     (
                         self.__checkEricFunctionArguments,
-                        ("D236", "D237", "D238", "D239"),
+                        ("D-236", "D-237", "D-238", "D-239"),
                     ),
                     (
                         self.__checkEricNoBlankBeforeAndAfterClassOrFunction,
-                        ("D244", "D245"),
+                        ("D-244", "D-245"),
                     ),
-                    (self.__checkEricException, ("D250", "D251", "D252", "D253")),
-                    (self.__checkEricDocumentationSequence, ("D270", "D271")),
-                    (self.__checkEricDocumentationDeprecatedTags, ("D272",)),
-                    (self.__checkEricDocumentationIndent, ("D273",)),
+                    (self.__checkEricException, ("D-250", "D-251", "D-252", "D-253")),
+                    (self.__checkEricDocumentationSequence, ("D-270", "D-271")),
+                    (self.__checkEricDocumentationDeprecatedTags, ("D-272",)),
+                    (self.__checkEricDocumentationIndent, ("D-273",)),
                 ],
                 "docstring": [
-                    (self.__checkTripleDoubleQuotes, ("D111",)),
-                    (self.__checkBackslashes, ("D112",)),
-                    (self.__checkIndent, ("D122",)),
-                    (self.__checkSummary, ("D130",)),
-                    (self.__checkEricEndsWithPeriod, ("D231",)),
-                    (self.__checkEricBlankAfterSummary, ("D246",)),
-                    (self.__checkEricNBlankAfterLastParagraph, ("D247",)),
-                    (self.__checkEricQuotesOnSeparateLines, ("D222", "D223")),
+                    (self.__checkTripleDoubleQuotes, ("D-111",)),
+                    (self.__checkBackslashes, ("D-112",)),
+                    (self.__checkIndent, ("D-122",)),
+                    (self.__checkSummary, ("D-130",)),
+                    (self.__checkEricEndsWithPeriod, ("D-231",)),
+                    (self.__checkEricBlankAfterSummary, ("D-246",)),
+                    (self.__checkEricNBlankAfterLastParagraph, ("D-247",)),
+                    (self.__checkEricQuotesOnSeparateLines, ("D-222", "D-223")),
                 ],
             }
 
-        self.__checkers = {}
+        self.__checkers = collections.defaultdict(list)
         for key, checkers in checkersWithCodes.items():
             for checker, codes in checkers:
-                if any(not (code and self.__ignoreCode(code)) for code in codes):
-                    if key not in self.__checkers:
-                        self.__checkers[key] = []
+                if any(
+                    not (msgCode and self._ignoreCode(msgCode)) for msgCode in codes
+                ):
                     self.__checkers[key].append(checker)
 
-    def __ignoreCode(self, code):
+    def addError(self, lineNumber, offset, msgCode, *args):
         """
-        Private method to check if the error code should be ignored.
+        Public method to record an issue.
 
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
+        @param lineNumber line number of the issue (zero based)
         @type int
         @param offset position within line of the issue
         @type int
-        @param code message code
+        @param msgCode message code
         @type str
         @param args arguments for the message
         @type list
         """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
+        # call super class method with one based line number
+        super().addError(lineNumber + 1, offset, msgCode, *args)
 
     def __resetReadline(self):
         """
@@ -401,16 +372,16 @@
         @rtype str
         """
         self.__lineNumber += 1
-        if self.__lineNumber > len(self.__source):
+        if self.__lineNumber > len(self.source):
             return ""
-        return self.__source[self.__lineNumber - 1]
+        return self.source[self.__lineNumber - 1]
 
     def run(self):
         """
         Public method to check the given source for violations of doc string
         conventions.
         """
-        if not self.__filename:
+        if not self.filename:
             # don't do anything, if essential data is missing
             return
 
@@ -418,11 +389,11 @@
             # don't do anything, if no codes were selected
             return
 
-        for keyword in self.__keywords:
-            if keyword in self.__checkers:
-                for check in self.__checkers[keyword]:
-                    for context in self.__parseContexts(keyword):
-                        docstring = self.__parseDocstring(context, keyword)
+        for key in self.__keywords:
+            if key in self.__checkers:
+                for check in self.__checkers[key]:
+                    for context in self.__parseContexts(key):
+                        docstring = self.__parseDocstring(context, key)
                         check(docstring, context)
 
     def __getSummaryLine(self, docstringContext):
@@ -597,7 +568,7 @@
                     kind, value, (line, char), _, _ = next(tokenGenerator)
                 end = line - 1, char
                 contexts.append(
-                    DocStyleContext(self.__source[start[0] : end[0]], start[0], keyword)
+                    DocStyleContext(self.source[start[0] : end[0]], start[0], keyword)
                 )
         except StopIteration:
             return contexts
@@ -674,12 +645,12 @@
                         startLine = classContext.start() + start[0]
                         endLine = classContext.start() + end[0]
                         context = DocStyleContext(
-                            self.__source[startLine:endLine], startLine, "def"
+                            self.source[startLine:endLine], startLine, "def"
                         )
                         if startLine > 0:
-                            if self.__source[startLine - 1].strip() == "@staticmethod":
+                            if self.source[startLine - 1].strip() == "@staticmethod":
                                 context.setSpecial("staticmethod")
-                            elif self.__source[startLine - 1].strip() == "@classmethod":
+                            elif self.source[startLine - 1].strip() == "@classmethod":
                                 context.setSpecial("classmethod")
                         contexts.append(context)
             self.__methodsCache = contexts
@@ -696,7 +667,7 @@
         @rtype list of DocStyleContext
         """
         if kind == "moduleDocstring":
-            return [DocStyleContext(self.__source, 0, "module")]
+            return [DocStyleContext(self.source, 0, "module")]
         if kind == "functionDocstring":
             return self.__parseFunctions()
         if kind == "classDocstring":
@@ -707,7 +678,7 @@
             return self.__parseFunctions() + self.__parseMethods()
         if kind == "docstring":
             return (
-                [DocStyleContext(self.__source, 0, "module")]
+                [DocStyleContext(self.source, 0, "module")]
                 + self.__parseFunctions()
                 + self.__parseClasses()
                 + self.__parseMethods()
@@ -728,18 +699,18 @@
         @type DocStyleContext
         """
         if docstringContext is None:
-            self.__error(context.start(), 0, "D101")
+            self.addError(context.start(), 0, "D-101")
             return
 
         docstring = docstringContext.ssource()
         if not docstring or not docstring.strip() or not docstring.strip("'\""):
-            self.__error(context.start(), 0, "D101")
+            self.addError(context.start(), 0, "D-101")
 
         if (
             self.__docType == "eric"
             and docstring.strip("'\"").strip() == "Module documentation goes here."
         ):
-            self.__error(docstringContext.end(), 0, "D201")
+            self.addError(docstringContext.end(), 0, "D-201")
             return
 
     def __checkFunctionDocstring(self, docstringContext, context):
@@ -755,27 +726,27 @@
         functionName = context.source()[0].lstrip().split()[1].split("(")[0]
         if functionName.startswith("_") and not functionName.endswith("__"):
             if self.__docType == "eric":
-                code = "D203"
+                code = "D-203"
             else:
-                code = "D103"
+                code = "D-103"
         else:
-            code = "D102"
+            code = "D-102"
 
         if docstringContext is None:
-            self.__error(context.start(), 0, code)
+            self.addError(context.start(), 0, code)
             return
 
         docstring = docstringContext.ssource()
         if not docstring or not docstring.strip() or not docstring.strip("'\""):
-            self.__error(context.start(), 0, code)
+            self.addError(context.start(), 0, code)
 
         if self.__docType == "eric":
             if docstring.strip("'\"").strip() == "Function documentation goes here.":
-                self.__error(docstringContext.end(), 0, "D202.1")
+                self.addError(docstringContext.end(), 0, "D-202.1")
                 return
 
             if "DESCRIPTION" in docstring or "TYPE" in docstring:
-                self.__error(docstringContext.end(), 0, "D202.2")
+                self.addError(docstringContext.end(), 0, "D-202.2")
                 return
 
     def __checkClassDocstring(self, docstringContext, context):
@@ -791,26 +762,26 @@
         className = context.source()[0].lstrip().split()[1].split("(")[0]
         if className.startswith("_"):
             if self.__docType == "eric":
-                code = "D205"
+                code = "D-205"
             else:
-                code = "D105"
+                code = "D-105"
         else:
-            code = "D104"
+            code = "D-104"
 
         if docstringContext is None:
-            self.__error(context.start(), 0, code)
+            self.addError(context.start(), 0, code)
             return
 
         docstring = docstringContext.ssource()
         if not docstring or not docstring.strip() or not docstring.strip("'\""):
-            self.__error(context.start(), 0, code)
+            self.addError(context.start(), 0, code)
             return
 
         if (
             self.__docType == "eric"
             and docstring.strip("'\"").strip() == "Class documentation goes here."
         ):
-            self.__error(docstringContext.end(), 0, "D206")
+            self.addError(docstringContext.end(), 0, "D-206")
             return
 
     def __checkTripleDoubleQuotes(self, docstringContext, _context):
@@ -828,7 +799,7 @@
 
         docstring = docstringContext.ssource().strip()
         if not docstring.startswith(('"""', 'r"""', 'u"""')):
-            self.__error(docstringContext.start(), 0, "D111")
+            self.addError(docstringContext.start(), 0, "D-111")
 
     def __checkBackslashes(self, docstringContext, _context):
         """
@@ -845,7 +816,7 @@
 
         docstring = docstringContext.ssource().strip()
         if "\\" in docstring and not docstring.startswith('r"""'):
-            self.__error(docstringContext.start(), 0, "D112")
+            self.addError(docstringContext.start(), 0, "D-112")
 
     def __checkOneLiner(self, docstringContext, context):
         """
@@ -873,7 +844,7 @@
                     # account for a trailing dot
                     modLen += 1
                 if modLen <= self.__maxLineLength:
-                    self.__error(docstringContext.start(), 0, "D121")
+                    self.addError(docstringContext.start(), 0, "D-121")
 
     def __checkIndent(self, docstringContext, context):
         """
@@ -900,7 +871,7 @@
             0 if context.contextType() == "module" else len(context.indent()) + 4
         )
         if indent != expectedIndent:
-            self.__error(docstringContext.start(), 0, "D122")
+            self.addError(docstringContext.start(), 0, "D-122")
 
     def __checkSummary(self, docstringContext, _context):
         """
@@ -916,7 +887,7 @@
 
         summary, lineNumber = self.__getSummaryLine(docstringContext)
         if summary == "":
-            self.__error(docstringContext.start() + lineNumber, 0, "D130")
+            self.addError(docstringContext.start() + lineNumber, 0, "D-130")
 
     def __checkEndsWithPeriod(self, docstringContext, _context):
         """
@@ -932,7 +903,7 @@
 
         summary, lineNumber = self.__getSummaryLine(docstringContext)
         if not summary.endswith("."):
-            self.__error(docstringContext.start() + lineNumber, 0, "D131")
+            self.addError(docstringContext.start() + lineNumber, 0, "D-131")
 
     def __checkImperativeMood(self, docstringContext, _context):
         """
@@ -951,7 +922,7 @@
         if summary:
             firstWord = summary.strip().split()[0]
             if firstWord.endswith("s") and not firstWord.endswith("ss"):
-                self.__error(docstringContext.start() + lineNumber, 0, "D132")
+                self.addError(docstringContext.start() + lineNumber, 0, "D-132")
 
     def __checkNoSignature(self, docstringContext, context):
         """
@@ -972,7 +943,7 @@
             " ", ""
         ) and functionName + "()" not in summary.replace(" ", ""):
             # report only, if it is not an abbreviated form (i.e. function() )
-            self.__error(docstringContext.start() + lineNumber, 0, "D133")
+            self.addError(docstringContext.start() + lineNumber, 0, "D-133")
 
     def __checkReturnType(self, docstringContext, context):
         """
@@ -999,7 +970,7 @@
                 set(return_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE}
                 != set()
             ):
-                self.__error(docstringContext.end(), 0, "D134")
+                self.addError(docstringContext.end(), 0, "D-134")
 
     def __checkNoBlankLineBefore(self, docstringContext, context):
         """
@@ -1024,7 +995,7 @@
             return
 
         if not contextLines[cti - 1].strip():
-            self.__error(docstringContext.start(), 0, "D141")
+            self.addError(docstringContext.start(), 0, "D-141")
 
     def __checkBlankBeforeAndAfterClass(self, docstringContext, context):
         """
@@ -1062,9 +1033,9 @@
             return
 
         if contextLines[start - 1].strip():
-            self.__error(docstringContext.start(), 0, "D142")
+            self.addError(docstringContext.start(), 0, "D-142")
         if contextLines[end + 1].strip():
-            self.__error(docstringContext.end(), 0, "D143")
+            self.addError(docstringContext.end(), 0, "D-143")
 
     def __checkBlankAfterSummary(self, docstringContext, _context):
         """
@@ -1086,7 +1057,7 @@
 
         summary, lineNumber = self.__getSummaryLine(docstringContext)
         if len(docstrings) > 2 and docstrings[lineNumber + 1].strip():
-            self.__error(docstringContext.start() + lineNumber, 0, "D144")
+            self.addError(docstringContext.start() + lineNumber, 0, "D-144")
 
     def __checkBlankAfterLastParagraph(self, docstringContext, _context):
         """
@@ -1107,7 +1078,7 @@
             return
 
         if docstrings[-2].strip():
-            self.__error(docstringContext.end(), 0, "D145")
+            self.addError(docstringContext.end(), 0, "D-145")
 
     ##################################################################
     ## Checking functionality below (eric specific ones)
@@ -1128,9 +1099,9 @@
 
         lines = docstringContext.source()
         if lines[0].strip().strip("ru\"'"):
-            self.__error(docstringContext.start(), 0, "D221")
+            self.addError(docstringContext.start(), 0, "D-221")
         if lines[-1].strip().strip("\"'"):
-            self.__error(docstringContext.end(), 0, "D222")
+            self.addError(docstringContext.end(), 0, "D-222")
 
     def __checkEricEndsWithPeriod(self, docstringContext, _context):
         """
@@ -1154,10 +1125,10 @@
                 and not summary.endswith(".")
                 and summary.split(None, 1)[0].lower() != "constructor"
             ):
-                self.__error(
+                self.addError(
                     docstringContext.start() + lineNumber + len(summaryLines) - 1,
                     0,
-                    "D231",
+                    "D-231",
                 )
 
     def __checkEricReturn(self, docstringContext, context):
@@ -1182,13 +1153,13 @@
                 set(return_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE}
                 != set()
             ):
-                self.__error(docstringContext.end(), 0, "D234r")
+                self.addError(docstringContext.end(), 0, "D-234r")
         else:
             if (
                 set(return_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE}
                 == set()
             ):
-                self.__error(docstringContext.end(), 0, "D235r")
+                self.addError(docstringContext.end(), 0, "D-235r")
 
     def __checkEricYield(self, docstringContext, context):
         """
@@ -1209,10 +1180,10 @@
         ]
         if "@yield" not in docstringContext.ssource():
             if set(yield_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} != set():
-                self.__error(docstringContext.end(), 0, "D234y")
+                self.addError(docstringContext.end(), 0, "D-234y")
         else:
             if set(yield_) - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} == set():
-                self.__error(docstringContext.end(), 0, "D235y")
+                self.addError(docstringContext.end(), 0, "D-235y")
 
     def __checkEricFunctionArguments(self, docstringContext, context):
         """
@@ -1251,11 +1222,11 @@
             if tagstring.count("@param") + tagstring.count("@keyparam") < len(
                 argNames + kwNames
             ):
-                self.__error(docstringContext.end(), 0, "D236")
+                self.addError(docstringContext.end(), 0, "D-236")
             elif tagstring.count("@param") + tagstring.count("@keyparam") > len(
                 argNames + kwNames
             ):
-                self.__error(docstringContext.end(), 0, "D237")
+                self.addError(docstringContext.end(), 0, "D-237")
             else:
                 # extract @param and @keyparam from docstring
                 args = []
@@ -1272,10 +1243,10 @@
                 # do the checks
                 for name in kwNames:
                     if name not in kwargs:
-                        self.__error(docstringContext.end(), 0, "D238")
+                        self.addError(docstringContext.end(), 0, "D-238")
                         return
                 if argNames + kwNames != args:
-                    self.__error(docstringContext.end(), 0, "D239")
+                    self.addError(docstringContext.end(), 0, "D-239")
 
     def __checkEricException(self, docstringContext, context):
         """
@@ -1315,10 +1286,10 @@
             and "@raise" not in docstringContext.ssource()
         ):
             if exceptions - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} != set():
-                self.__error(docstringContext.end(), 0, "D250")
+                self.addError(docstringContext.end(), 0, "D-250")
         else:
             if exceptions - {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE} == set():
-                self.__error(docstringContext.end(), 0, "D251")
+                self.addError(docstringContext.end(), 0, "D-251")
             else:
                 # step 1: extract documented exceptions
                 documentedExceptions = set()
@@ -1332,12 +1303,12 @@
                 # step 2: report undocumented exceptions
                 for exception in raisedExceptions:
                     if exception not in documentedExceptions:
-                        self.__error(docstringContext.end(), 0, "D252", exception)
+                        self.addError(docstringContext.end(), 0, "D-252", exception)
 
                 # step 3: report undefined signals
                 for exception in documentedExceptions:
                     if exception not in raisedExceptions:
-                        self.__error(docstringContext.end(), 0, "D253", exception)
+                        self.addError(docstringContext.end(), 0, "D-253", exception)
 
     def __checkEricSignal(self, docstringContext, context):
         """
@@ -1366,10 +1337,10 @@
                     definedSignals.add(tokens[i - 2][1])
 
         if "@signal" not in docstringContext.ssource() and definedSignals:
-            self.__error(docstringContext.end(), 0, "D260")
+            self.addError(docstringContext.end(), 0, "D-260")
         elif "@signal" in docstringContext.ssource():
             if not definedSignals:
-                self.__error(docstringContext.end(), 0, "D261")
+                self.addError(docstringContext.end(), 0, "D-261")
             else:
                 # step 1: extract documented signals
                 documentedSignals = set()
@@ -1386,12 +1357,12 @@
                 # step 2: report undocumented signals
                 for signal in definedSignals:
                     if signal not in documentedSignals:
-                        self.__error(docstringContext.end(), 0, "D262", signal)
+                        self.addError(docstringContext.end(), 0, "D-262", signal)
 
                 # step 3: report undefined signals
                 for signal in documentedSignals:
                     if signal not in definedSignals:
-                        self.__error(docstringContext.end(), 0, "D263", signal)
+                        self.addError(docstringContext.end(), 0, "D-263", signal)
 
     def __checkEricBlankAfterSummary(self, docstringContext, _context):
         """
@@ -1416,7 +1387,7 @@
             len(docstrings) - 2 > lineNumber + len(summaryLines) - 1
             and docstrings[lineNumber + len(summaryLines)].strip()
         ):
-            self.__error(docstringContext.start() + lineNumber, 0, "D246")
+            self.addError(docstringContext.start() + lineNumber, 0, "D-246")
 
     def __checkEricNoBlankBeforeAndAfterClassOrFunction(
         self, docstringContext, context
@@ -1458,14 +1429,14 @@
 
         if isClassContext:
             if not contextLines[start - 1].strip():
-                self.__error(docstringContext.start(), 0, "D242")
+                self.addError(docstringContext.start(), 0, "D-242")
             if not contextLines[end + 1].strip() and self.__docType == "eric":
-                self.__error(docstringContext.end(), 0, "D243")
+                self.addError(docstringContext.end(), 0, "D-243")
             elif contextLines[end + 1].strip() and self.__docType == "eric_black":
-                self.__error(docstringContext.end(), 0, "D143")
+                self.addError(docstringContext.end(), 0, "D-143")
         else:
             if not contextLines[start - 1].strip():
-                self.__error(docstringContext.start(), 0, "D244")
+                self.addError(docstringContext.start(), 0, "D-244")
             if not contextLines[end + 1].strip():
                 if (
                     self.__docType == "eric_black"
@@ -1474,7 +1445,7 @@
                 ):
                     return
 
-                self.__error(docstringContext.end(), 0, "D245")
+                self.addError(docstringContext.end(), 0, "D-245")
 
     def __checkEricNBlankAfterLastParagraph(self, docstringContext, _context):
         """
@@ -1495,7 +1466,7 @@
             return
 
         if not docstrings[-2].strip():
-            self.__error(docstringContext.end(), 0, "D247")
+            self.addError(docstringContext.end(), 0, "D-247")
 
     def __checkEricSummary(self, docstringContext, context):
         """
@@ -1520,43 +1491,43 @@
             firstWord = summary.strip().split(None, 1)[0].lower()
             if functionName == "__init__":
                 if firstWord != "constructor":
-                    self.__error(
-                        docstringContext.start() + lineNumber, 0, "D232", "constructor"
+                    self.addError(
+                        docstringContext.start() + lineNumber, 0, "D-232", "constructor"
                     )
             elif functionName.startswith("__") and functionName.endswith("__"):
                 if firstWord != "special":
-                    self.__error(
-                        docstringContext.start() + lineNumber, 0, "D232", "special"
+                    self.addError(
+                        docstringContext.start() + lineNumber, 0, "D-232", "special"
                     )
             elif context.special() == "staticmethod":
                 secondWord = summary.strip().split(None, 2)[1].lower()
                 if firstWord != "static" and secondWord != "static":
-                    self.__error(
-                        docstringContext.start() + lineNumber, 0, "D232", "static"
+                    self.addError(
+                        docstringContext.start() + lineNumber, 0, "D-232", "static"
                     )
                 elif secondWord == "static":
                     if functionName.startswith(("__", "on_")):
                         if firstWord != "private":
-                            self.__error(
+                            self.addError(
                                 docstringContext.start() + lineNumber,
                                 0,
-                                "D232",
+                                "D-232",
                                 "private static",
                             )
                     elif functionName.startswith("_") or functionName.endswith("Event"):
                         if firstWord != "protected":
-                            self.__error(
+                            self.addError(
                                 docstringContext.start() + lineNumber,
                                 0,
-                                "D232",
+                                "D-232",
                                 "protected static",
                             )
                     else:
                         if firstWord != "public":
-                            self.__error(
+                            self.addError(
                                 docstringContext.start() + lineNumber,
                                 0,
-                                "D232",
+                                "D-232",
                                 "public static",
                             )
             elif (
@@ -1565,48 +1536,48 @@
             ):
                 secondWord = summary.strip().split(None, 2)[1].lower()
                 if firstWord != "class" and secondWord != "class":
-                    self.__error(
-                        docstringContext.start() + lineNumber, 0, "D232", "class"
+                    self.addError(
+                        docstringContext.start() + lineNumber, 0, "D-232", "class"
                     )
                 elif secondWord == "class":
                     if functionName.startswith(("__", "on_")):
                         if firstWord != "private":
-                            self.__error(
+                            self.addError(
                                 docstringContext.start() + lineNumber,
                                 0,
-                                "D232",
+                                "D-232",
                                 "private class",
                             )
                     elif functionName.startswith("_") or functionName.endswith("Event"):
                         if firstWord != "protected":
-                            self.__error(
+                            self.addError(
                                 docstringContext.start() + lineNumber,
                                 0,
-                                "D232",
+                                "D-232",
                                 "protected class",
                             )
                     else:
                         if firstWord != "public":
-                            self.__error(
+                            self.addError(
                                 docstringContext.start() + lineNumber,
                                 0,
-                                "D232",
+                                "D-232",
                                 "public class",
                             )
             elif functionName.startswith(("__", "on_")):
                 if firstWord != "private":
-                    self.__error(
-                        docstringContext.start() + lineNumber, 0, "D232", "private"
+                    self.addError(
+                        docstringContext.start() + lineNumber, 0, "D-232", "private"
                     )
             elif functionName.startswith("_") or functionName.endswith("Event"):
                 if firstWord != "protected":
-                    self.__error(
-                        docstringContext.start() + lineNumber, 0, "D232", "protected"
+                    self.addError(
+                        docstringContext.start() + lineNumber, 0, "D-232", "protected"
                     )
             else:
                 if firstWord != "public":
-                    self.__error(
-                        docstringContext.start() + lineNumber, 0, "D232", "public"
+                    self.addError(
+                        docstringContext.start() + lineNumber, 0, "D-232", "public"
                     )
 
     def __checkEricDocumentationSequence(
@@ -1640,7 +1611,9 @@
                     and lineno > 0
                     and lines[lineno - 1].strip() == ""
                 ):
-                    self.__error(docstringContext.start() + lineno, 0, "D271", docToken)
+                    self.addError(
+                        docstringContext.start() + lineno, 0, "D-271", docToken
+                    )
 
         # check the correct sequence of @param/@return/@yield and their accompanying
         # type tag
@@ -1652,16 +1625,16 @@
                 docToken2 = ""
 
             if docToken in ("@param", "@keyparam") and docToken2 != "@type":
-                self.__error(
-                    docstringContext.start() + lineno, 0, "D270", docToken, "@type"
+                self.addError(
+                    docstringContext.start() + lineno, 0, "D-270", docToken, "@type"
                 )
             elif docToken == "@return" and docToken2 != "@rtype":
-                self.__error(
-                    docstringContext.start() + lineno, 0, "D270", docToken, "@rtype"
+                self.addError(
+                    docstringContext.start() + lineno, 0, "D-270", docToken, "@rtype"
                 )
             elif docToken == "@yield" and docToken2 != "@ytype":
-                self.__error(
-                    docstringContext.start() + lineno, 0, "D270", docToken, "@ytype"
+                self.addError(
+                    docstringContext.start() + lineno, 0, "D-270", docToken, "@ytype"
                 )
 
     def __checkEricDocumentationDeprecatedTags(
@@ -1694,10 +1667,10 @@
                 # it is a tag line
                 tag = strippedLine.split(None, 1)[0]
                 with contextlib.suppress(KeyError):
-                    self.__error(
+                    self.addError(
                         docstringContext.start() + lineno,
                         0,
-                        "D272",
+                        "D-272",
                         tag,
                         deprecationsList[tag],
                     )
@@ -1733,4 +1706,4 @@
                 tag = strippedLine.split(None, 1)[0]
                 currentIndentation = len(line) - len(strippedLine)
                 if currentIndentation != indentationLength:
-                    self.__error(docstringContext.start() + lineno, 0, "D273", tag)
+                    self.addError(docstringContext.start() + lineno, 0, "D-273", tag)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/DocStyle/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,200 +12,200 @@
 from PyQt6.QtCore import QCoreApplication
 
 _docStyleMessages = {
-    "D101": QCoreApplication.translate(
+    "D-101": QCoreApplication.translate(
         "DocStyleChecker", "module is missing a docstring"
     ),
-    "D102": QCoreApplication.translate(
+    "D-102": QCoreApplication.translate(
         "DocStyleChecker", "public function/method is missing a docstring"
     ),
-    "D103": QCoreApplication.translate(
+    "D-103": QCoreApplication.translate(
         "DocStyleChecker", "private function/method may be missing a docstring"
     ),
-    "D104": QCoreApplication.translate(
+    "D-104": QCoreApplication.translate(
         "DocStyleChecker", "public class is missing a docstring"
     ),
-    "D105": QCoreApplication.translate(
+    "D-105": QCoreApplication.translate(
         "DocStyleChecker", "private class may be missing a docstring"
     ),
-    "D111": QCoreApplication.translate(
+    "D-111": QCoreApplication.translate(
         "DocStyleChecker", 'docstring not surrounded by """'
     ),
-    "D112": QCoreApplication.translate(
+    "D-112": QCoreApplication.translate(
         "DocStyleChecker", 'docstring containing \\ not surrounded by r"""'
     ),
-    "D121": QCoreApplication.translate(
+    "D-121": QCoreApplication.translate(
         "DocStyleChecker", "one-liner docstring on multiple lines"
     ),
-    "D122": QCoreApplication.translate(
+    "D-122": QCoreApplication.translate(
         "DocStyleChecker", "docstring has wrong indentation"
     ),
-    "D130": QCoreApplication.translate(
+    "D-130": QCoreApplication.translate(
         "DocStyleChecker", "docstring does not contain a summary"
     ),
-    "D131": QCoreApplication.translate(
+    "D-131": QCoreApplication.translate(
         "DocStyleChecker", "docstring summary does not end with a period"
     ),
-    "D132": QCoreApplication.translate(
+    "D-132": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring summary is not in imperative mood (Does instead of Do)",
     ),
-    "D133": QCoreApplication.translate(
+    "D-133": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring summary looks like a function's/method's signature",
     ),
-    "D134": QCoreApplication.translate(
+    "D-134": QCoreApplication.translate(
         "DocStyleChecker", "docstring does not mention the return value type"
     ),
-    "D141": QCoreApplication.translate(
+    "D-141": QCoreApplication.translate(
         "DocStyleChecker", "function/method docstring is separated by a blank line"
     ),
-    "D142": QCoreApplication.translate(
+    "D-142": QCoreApplication.translate(
         "DocStyleChecker", "class docstring is not preceded by a blank line"
     ),
-    "D143": QCoreApplication.translate(
+    "D-143": QCoreApplication.translate(
         "DocStyleChecker", "class docstring is not followed by a blank line"
     ),
-    "D144": QCoreApplication.translate(
+    "D-144": QCoreApplication.translate(
         "DocStyleChecker", "docstring summary is not followed by a blank line"
     ),
-    "D145": QCoreApplication.translate(
+    "D-145": QCoreApplication.translate(
         "DocStyleChecker", "last paragraph of docstring is not followed by a blank line"
     ),
-    "D201": QCoreApplication.translate(
+    "D-201": QCoreApplication.translate(
         "DocStyleChecker", "module docstring is still a default string"
     ),
-    "D202.1": QCoreApplication.translate(
+    "D-202.1": QCoreApplication.translate(
         "DocStyleChecker", "function docstring is still a default string"
     ),
-    "D202.2": QCoreApplication.translate(
+    "D-202.2": QCoreApplication.translate(
         "DocStyleChecker", "function docstring still contains some placeholders"
     ),
-    "D203": QCoreApplication.translate(
+    "D-203": QCoreApplication.translate(
         "DocStyleChecker", "private function/method is missing a docstring"
     ),
-    "D205": QCoreApplication.translate(
+    "D-205": QCoreApplication.translate(
         "DocStyleChecker", "private class is missing a docstring"
     ),
-    "D206": QCoreApplication.translate(
+    "D-206": QCoreApplication.translate(
         "DocStyleChecker", "class docstring is still a default string"
     ),
-    "D221": QCoreApplication.translate(
+    "D-221": QCoreApplication.translate(
         "DocStyleChecker", "leading quotes of docstring not on separate line"
     ),
-    "D222": QCoreApplication.translate(
+    "D-222": QCoreApplication.translate(
         "DocStyleChecker", "trailing quotes of docstring not on separate line"
     ),
-    "D231": QCoreApplication.translate(
+    "D-231": QCoreApplication.translate(
         "DocStyleChecker", "docstring summary does not end with a period"
     ),
-    "D232": QCoreApplication.translate(
+    "D-232": QCoreApplication.translate(
         "DocStyleChecker", "docstring summary does not start with '{0}'"
     ),
-    "D234r": QCoreApplication.translate(
+    "D-234r": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring does not contain a @return line but function/method"
         " returns something",
     ),
-    "D235r": QCoreApplication.translate(
+    "D-235r": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring contains a @return line but function/method doesn't"
         " return anything",
     ),
-    "D234y": QCoreApplication.translate(
+    "D-234y": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring does not contain a @yield line but function/method"
         " yields something",
     ),
-    "D235y": QCoreApplication.translate(
+    "D-235y": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring contains a @yield line but function/method doesn't"
         " yield anything",
     ),
-    "D236": QCoreApplication.translate(
+    "D-236": QCoreApplication.translate(
         "DocStyleChecker", "docstring does not contain enough @param/@keyparam lines"
     ),
-    "D237": QCoreApplication.translate(
+    "D-237": QCoreApplication.translate(
         "DocStyleChecker", "docstring contains too many @param/@keyparam lines"
     ),
-    "D238": QCoreApplication.translate(
+    "D-238": QCoreApplication.translate(
         "DocStyleChecker",
         "keyword only arguments must be documented with @keyparam lines",
     ),
-    "D239": QCoreApplication.translate(
+    "D-239": QCoreApplication.translate(
         "DocStyleChecker",
         "order of @param/@keyparam lines does"
         " not match the function/method signature",
     ),
-    "D242": QCoreApplication.translate(
+    "D-242": QCoreApplication.translate(
         "DocStyleChecker", "class docstring is preceded by a blank line"
     ),
-    "D243": QCoreApplication.translate(
+    "D-243": QCoreApplication.translate(
         "DocStyleChecker", "class docstring is followed by a blank line"
     ),
-    "D244": QCoreApplication.translate(
+    "D-244": QCoreApplication.translate(
         "DocStyleChecker", "function/method docstring is preceded by a blank line"
     ),
-    "D245": QCoreApplication.translate(
+    "D-245": QCoreApplication.translate(
         "DocStyleChecker", "function/method docstring is followed by a blank line"
     ),
-    "D246": QCoreApplication.translate(
+    "D-246": QCoreApplication.translate(
         "DocStyleChecker", "docstring summary is not followed by a blank line"
     ),
-    "D247": QCoreApplication.translate(
+    "D-247": QCoreApplication.translate(
         "DocStyleChecker", "last paragraph of docstring is followed by a blank line"
     ),
-    "D250": QCoreApplication.translate(
+    "D-250": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring does not contain a @exception line but function/method"
         " raises an exception",
     ),
-    "D251": QCoreApplication.translate(
+    "D-251": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring contains a @exception line but function/method doesn't"
         " raise an exception",
     ),
-    "D252": QCoreApplication.translate(
+    "D-252": QCoreApplication.translate(
         "DocStyleChecker", "raised exception '{0}' is not documented in docstring"
     ),
-    "D253": QCoreApplication.translate(
+    "D-253": QCoreApplication.translate(
         "DocStyleChecker", "documented exception '{0}' is not raised"
     ),
-    "D260": QCoreApplication.translate(
+    "D-260": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring does not contain a @signal line but class defines signals",
     ),
-    "D261": QCoreApplication.translate(
+    "D-261": QCoreApplication.translate(
         "DocStyleChecker",
         "docstring contains a @signal line but class doesn't define signals",
     ),
-    "D262": QCoreApplication.translate(
+    "D-262": QCoreApplication.translate(
         "DocStyleChecker", "defined signal '{0}' is not documented in docstring"
     ),
-    "D263": QCoreApplication.translate(
+    "D-263": QCoreApplication.translate(
         "DocStyleChecker", "documented signal '{0}' is not defined"
     ),
-    "D270": QCoreApplication.translate(
+    "D-270": QCoreApplication.translate(
         "DocStyleChecker", "'{0}' line should be followed by an '{1}' line"
     ),
-    "D271": QCoreApplication.translate(
+    "D-271": QCoreApplication.translate(
         "DocStyleChecker", "'{0}' line should not be preceded by an empty line"
     ),
-    "D272": QCoreApplication.translate(
+    "D-272": QCoreApplication.translate(
         "DocStyleChecker", "don't use '{0}' but '{1}' instead"
     ),
-    "D273": QCoreApplication.translate(
+    "D-273": QCoreApplication.translate(
         "DocStyleChecker", "'{0}' line has wrong indentation"
     ),
 }
 
 _docStyleMessagesSampleArgs = {
-    "D232": ["public"],
-    "D252": ["RuntimeError"],
-    "D253": ["RuntimeError"],
-    "D262": ["buttonClicked"],
-    "D263": ["buttonClicked"],
-    "D270": ["@param", "@type"],
-    "D271": ["@type"],
-    "D272": ["@ptype", "@type"],
-    "D273": ["@type"],
+    "D-232": ["public"],
+    "D-252": ["RuntimeError"],
+    "D-253": ["RuntimeError"],
+    "D-262": ["buttonClicked"],
+    "D-263": ["buttonClicked"],
+    "D-270": ["@param", "@type"],
+    "D-271": ["@type"],
+    "D-272": ["@ptype", "@type"],
+    "D-273": ["@type"],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportsChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/ImportsChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -11,23 +11,26 @@
 import copy
 import re
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
-class ImportsChecker:
+
+class ImportsChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for import statements.
     """
 
     Codes = [
         ## Local imports
-        "I101",
-        "I102",
-        "I103",
+        "I-101",
+        "I-102",
+        "I-103",
         ## Various other import related
-        "I901",
-        "I902",
-        "I903",
-        "I904",
+        "I-901",
+        "I-902",
+        "I-903",
+        "I-904",
     ]
+    Category = "I"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -50,94 +53,23 @@
         @param args dictionary of arguments for the various checks
         @type dict
         """
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
+        super().__init__(
+            ImportsChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
         checkersWithCodes = [
-            (self.__checkLocalImports, ("I101", "I102", "I103")),
-            (self.__tidyImports, ("I901", "I902", "I903", "I904")),
+            (self.__checkLocalImports, ("I-101", "I-102", "I-103")),
+            (self.__tidyImports, ("I-901", "I-902", "I-903", "I-904")),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against miscellaneous
-        conditions.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     #######################################################################
     ## Local imports
@@ -151,29 +83,26 @@
         """
         from .LocalImportVisitor import LocalImportVisitor
 
-        visitor = LocalImportVisitor(self.__args, self)
-        visitor.visit(copy.deepcopy(self.__tree))
+        visitor = LocalImportVisitor(self.args, self)
+        visitor.visit(copy.deepcopy(self.tree))
         for violation in visitor.violations:
-            if not self.__ignoreCode(violation[1]):
-                node = violation[0]
-                reason = violation[1]
-                self.__error(node.lineno - 1, node.col_offset, reason)
+            self.addErrorFromNode(violation[0], violation[1])
 
     #######################################################################
     ## Tidy imports
     ##
-    ## adapted from: flake8-tidy-imports v4.10.0
+    ## adapted from: flake8-tidy-imports v4.11.0
     #######################################################################
 
     def __tidyImports(self):
         """
         Private method to check various other import related topics.
         """
-        self.__banRelativeImports = self.__args.get("BanRelativeImports", "")
+        self.__banRelativeImports = self.args.get("BanRelativeImports", "")
         self.__bannedModules = []
         self.__bannedStructuredPatterns = []
         self.__bannedUnstructuredPatterns = []
-        for module in self.__args.get("BannedModules", []):
+        for module in self.args.get("BannedModules", []):
             module = module.strip()
             if "*" in module[:-1] or module == "*":
                 # unstructured
@@ -195,16 +124,16 @@
         self.__bannedStructuredPatterns.sort(key=lambda x: len(x[0]), reverse=True)
 
         ruleMethods = []
-        if not self.__ignoreCode("I901"):
+        if not self._ignoreCode("I-901"):
             ruleMethods.append(self.__checkUnnecessaryAlias)
-        if not self.__ignoreCode("I902") and bool(self.__bannedModules):
+        if not self._ignoreCode("I-902") and bool(self.__bannedModules):
             ruleMethods.append(self.__checkBannedImport)
         if (
-            not self.__ignoreCode("I903") and self.__banRelativeImports == "parents"
-        ) or (not self.__ignoreCode("I904") and self.__banRelativeImports == "true"):
+            not self._ignoreCode("I-903") and self.__banRelativeImports == "parents"
+        ) or (not self._ignoreCode("I-904") and self.__banRelativeImports == "true"):
             ruleMethods.append(self.__checkBannedRelativeImports)
 
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             for method in ruleMethods:
                 method(node)
 
@@ -249,14 +178,14 @@
                     else:
                         rewritten = f"import {importedName}"
 
-                    self.__error(node.lineno - 1, node.col_offset, "I901", rewritten)
+                    self.addErrorFromNode(node, "I-901", rewritten)
 
         elif isinstance(node, ast.ImportFrom):
             for alias in node.names:
                 if alias.name == alias.asname:
                     rewritten = f"from {node.module} import {alias.name}"
 
-                    self.__error(node.lineno - 1, node.col_offset, "I901", rewritten)
+                    self.addErrorFromNode(node, "I-901", rewritten)
 
     def __isModuleBanned(self, moduleName):
         """
@@ -324,7 +253,7 @@
                     continue
                 else:
                     warned.add(moduleName)
-                self.__error(node.lineno - 1, node.col_offset, "I902", moduleName)
+                self.addErrorFromNode(node, "I-902", moduleName)
 
     def __checkBannedRelativeImports(self, node):
         """
@@ -339,10 +268,10 @@
 
         elif self.__banRelativeImports == "parents":
             minNodeLevel = 1
-            msgCode = "I903"
+            msgCode = "I-903"
         else:
             minNodeLevel = 0
-            msgCode = "I904"
+            msgCode = "I-904"
 
         if isinstance(node, ast.ImportFrom) and node.level > minNodeLevel:
-            self.__error(node.lineno - 1, node.col_offset, msgCode)
+            self.addErrorFromNode(node, msgCode)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/LocalImportVisitor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/LocalImportVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -118,7 +118,7 @@
         ) or isinstance(previous, (ast.Import, ast.ImportFrom, ast.arguments))
 
         if not isinstance(parent, ast.FunctionDef) or not isAllowedPrevious:
-            self.violations.append((node, "I101"))
+            self.violations.append((node, "I-101"))
 
         self.generic_visit(node)
 
@@ -146,6 +146,6 @@
             return
 
         if module.split(".")[0] not in SysUtilities.getStandardModules():
-            self.violations.append((node, "I102"))
+            self.violations.append((node, "I-102"))
         else:
-            self.violations.append((node, "I103"))
+            self.violations.append((node, "I-103"))
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Imports/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -11,28 +11,30 @@
 from PyQt6.QtCore import QCoreApplication
 
 _importsMessages = {
-    "I101": QCoreApplication.translate(
+    "I-101": QCoreApplication.translate(
         "ImportsChecker", "local import must be at the beginning of the method body"
     ),
-    "I102": QCoreApplication.translate(
+    "I-102": QCoreApplication.translate(
         "ImportsChecker",
         "packages from external modules should not be imported locally",
     ),
-    "I103": QCoreApplication.translate(
+    "I-103": QCoreApplication.translate(
         "ImportsChecker",
         "packages from standard modules should not be imported locally",
     ),
-    "I901": QCoreApplication.translate(
+    "I-901": QCoreApplication.translate(
         "ImportsChecker", "unnecessary import alias - rewrite as '{0}'"
     ),
-    "I902": QCoreApplication.translate("ImportsChecker", "banned import '{0}' used"),
-    "I903": QCoreApplication.translate(
+    "I-902": QCoreApplication.translate("ImportsChecker", "banned import '{0}' used"),
+    "I-903": QCoreApplication.translate(
         "ImportsChecker", "relative imports from parent modules are banned"
     ),
-    "I904": QCoreApplication.translate("ImportsChecker", "relative imports are banned"),
+    "I-904": QCoreApplication.translate(
+        "ImportsChecker", "relative imports are banned"
+    ),
 }
 
 _importsMessagesSampleArgs = {
-    "I901": ["from foo import bar"],
-    "I902": ["foo"],
+    "I-901": ["from foo import bar"],
+    "I-902": ["foo"],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/LoggingChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/LoggingChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -7,32 +7,33 @@
 Module implementing a checker for logging related issues.
 """
 
-import copy
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
 
-class LoggingChecker:
+class LoggingChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for logging related issues.
     """
 
     Codes = [
         ## Logging
-        "L101",
-        "L102",
-        "L103",
-        "L104",
-        "L105",
-        "L106",
-        "L107",
-        "L108",
-        "L109",
-        "L110",
-        "L111",
-        "L112",
-        "L113",
-        "L114",
-        "L115",
+        "L-101",
+        "L-102",
+        "L-103",
+        "L-104",
+        "L-105",
+        "L-106",
+        "L-107",
+        "L-108",
+        "L-109",
+        "L-110",
+        "L-111",
+        "L-112",
+        "L-113",
+        "L-114",
+        "L-115",
     ]
+    Category = "L"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -55,112 +56,41 @@
         @param args dictionary of arguments for the various checks
         @type dict
         """
-        self.__select = tuple(select)  # noqa: M188
-        self.__ignore = ("",) if select else tuple(ignore)  # noqa: M188
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
+        super().__init__(
+            LoggingChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
         checkersWithCodes = [
             (
                 self.__checkLogging,
                 (
-                    "L101",
-                    "L102",
-                    "L103",
-                    "L104",
-                    "L105",
-                    "L106",
-                    "L107",
-                    "L108",
-                    "L109",
-                    "L110",
-                    "L111",
-                    "L112",
-                    "L113",
-                    "L114",
-                    "L115",
+                    "L-101",
+                    "L-102",
+                    "L-103",
+                    "L-104",
+                    "L-105",
+                    "L-106",
+                    "L-107",
+                    "L-108",
+                    "L-109",
+                    "L-110",
+                    "L-111",
+                    "L-112",
+                    "L-113",
+                    "L-114",
+                    "L-115",
                 ),
             ),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against miscellaneous
-        conditions.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     def __checkLogging(self):
         """
@@ -168,5 +98,5 @@
         """
         from .LoggingVisitor import LoggingVisitor
 
-        visitor = LoggingVisitor(errorCallback=self.__error)
-        visitor.visit(self.__tree)
+        visitor = LoggingVisitor(errorCallback=self.addErrorFromNode)
+        visitor.visit(self.tree)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/LoggingVisitor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/LoggingVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -10,7 +10,7 @@
 #######################################################################
 ## LoggingVisitor
 ##
-## adapted from: flake8-logging v1.5.0
+## adapted from: flake8-logging v1.7.0
 ##
 ## Original: Copyright (c) 2023 Adam Johnson
 #######################################################################
@@ -75,9 +75,9 @@
     # https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting
     return re.compile(
         r"""
-            %  # noqa: M601
+            %  # noqa: M-601
             (?P<spec>
-                % |  # raw % character  # noqa: M601
+                % |  # raw % character  # noqa: M-601
                 (?:
                     ([-#0 +]+)?  # conversion flags
                     (?P<minwidth>\d+|\*)?  # minimum field width
@@ -103,7 +103,7 @@
     # https://docs.python.org/3/library/stdtypes.html#printf-style-string-formatting
     return re.compile(
         r"""
-            %  # noqa: M601
+            %  # noqa: M-601
             \(
                 (?P<name>.*?)
             \)
@@ -173,13 +173,9 @@
         if node.module == "logging":
             for alias in node.names:
                 if alias.name == "WARN":
-                    if sys.version_info >= (3, 10):
-                        lineno = alias.lineno
-                        colOffset = alias.col_offset
-                    else:
-                        lineno = node.lineno
-                        colOffset = node.col_offset
-                    self.__error(lineno - 1, colOffset, "L109")
+                    self.__error(
+                        alias if sys.version_info >= (3, 10) else node, "L-109"
+                    )
                 if not alias.asname:
                     self.__fromImports[alias.name] = node.module
 
@@ -198,7 +194,7 @@
             and node.value.id == self.__loggingName
             and node.attr == "WARN"
         ):
-            self.__error(node.lineno - 1, node.col_offset, "L109")
+            self.__error(node, "L-109")
 
         self.generic_visit(node)
 
@@ -223,7 +219,7 @@
                 and self.__fromImports.get("Logger") == "logging"
             )
         ) and not self.__atModuleLevel():
-            self.__error(node.lineno - 1, node.col_offset, "L101")
+            self.__error(node, "L-101")
 
         if (
             isinstance(node.func, ast.Attribute)
@@ -236,7 +232,7 @@
             and node.func.id in _LoggerMethods
             and self.__fromImports.get(node.func.id) == "logging"
         ):
-            self.__error(node.lineno - 1, node.col_offset, "L115")
+            self.__error(node, "L-115")
 
         if (
             self.__loggingName
@@ -263,7 +259,7 @@
                 and isinstance(node.args[0], ast.Name)
                 and node.args[0].id in self.GetLoggerNames
             ):
-                self.__error(node.args[0].lineno - 1, node.args[0].col_offset, "L102")
+                self.__error(node.args[0], "L-102")
 
         if (
             isinstance(node.func, ast.Attribute)
@@ -277,7 +273,7 @@
 
             # L108
             if node.func.attr == "warn":
-                self.__error(node.lineno - 1, node.col_offset, "L108")
+                self.__error(node, "L-108")
 
             # L103
             extraKeys = []
@@ -301,17 +297,12 @@
 
             for key, keyNode in extraKeys:
                 if key in _LogrecordAttributes:
-                    if isinstance(keyNode, ast.keyword):
-                        lineno, colOffset = self.__keywordPos(keyNode)
-                    else:
-                        lineno = keyNode.lineno
-                        colOffset = keyNode.col_offset
-                    self.__error(lineno - 1, colOffset, "L103", repr(key))
+                    self.__error(keyNode, "L-103", repr(key))
 
             if node.func.attr == "exception":
                 # L104
                 if not excHandler:
-                    self.__error(node.lineno - 1, node.col_offset, "L104")
+                    self.__error(node, "L-104")
 
                 if any((excInfo := kw).arg == "exc_info" for kw in node.keywords):
                     # L106
@@ -322,16 +313,14 @@
                         and isinstance(excInfo.value, ast.Name)
                         and excInfo.value.id == excHandler.name
                     ):
-                        lineno, colOffset = self.__keywordPos(excInfo)
-                        self.__error(lineno - 1, colOffset, "L106")
+                        self.__error(excInfo, "L-106")
 
                     # L107
                     elif (
                         isinstance(excInfo.value, ast.Constant)
                         and not excInfo.value.value
                     ):
-                        lineno, colOffset = self.__keywordPos(excInfo)
-                        self.__error(lineno - 1, colOffset, "L107")
+                        self.__error(excInfo, "L-107")
 
             # L105
             elif node.func.attr == "error" and excHandler is not None:
@@ -348,7 +337,7 @@
                     rewritable = True
 
                 if rewritable:
-                    self.__error(node.lineno - 1, node.col_offset, "L105")
+                    self.__error(node, "L-105")
 
             # L114
             elif (
@@ -357,8 +346,7 @@
                 and isinstance(excInfo.value, ast.Constant)
                 and excInfo.value.value
             ):
-                lineno, colOffset = self.__keywordPos(excInfo)
-                self.__error(lineno - 1, colOffset, "L114")
+                self.__error(excInfo, "L-114")
 
             # L110
             if (
@@ -368,7 +356,7 @@
                 and excHandler is not None
                 and node.args[0].id == excHandler.name
             ):
-                self.__error(node.args[0].lineno - 1, node.args[0].col_offset, "L110")
+                self.__error(node.args[0], "L-110")
 
             msgArgKwarg = False
             if node.func.attr == "log" and len(node.args) >= 2:
@@ -384,7 +372,7 @@
 
             # L111
             if isinstance(msgArg, ast.JoinedStr):
-                self.__error(msgArg.lineno - 1, msgArg.col_offset, "L111a")
+                self.__error(msgArg, "L-111a")
             elif (
                 isinstance(msgArg, ast.Call)
                 and isinstance(msgArg.func, ast.Attribute)
@@ -392,16 +380,16 @@
                 and isinstance(msgArg.func.value.value, str)
                 and msgArg.func.attr == "format"
             ):
-                self.__error(msgArg.lineno - 1, msgArg.col_offset, "L111b")
+                self.__error(msgArg, "L-111b")
             elif (
                 isinstance(msgArg, ast.BinOp)
                 and isinstance(msgArg.op, ast.Mod)
                 and isinstance(msgArg.left, ast.Constant)
                 and isinstance(msgArg.left.value, str)
             ):
-                self.__error(msgArg.lineno - 1, msgArg.col_offset, "L111c")
+                self.__error(msgArg, "L-111c")
             elif isinstance(msgArg, ast.BinOp) and self.__isAddChainWithNonStr(msgArg):
-                self.__error(msgArg.lineno - 1, msgArg.col_offset, "L111d")
+                self.__error(msgArg, "L-111d")
 
             # L112
             if (
@@ -447,20 +435,12 @@
             # L113
             given = {cast(ast.Constant, k).value for k in dictNode.keys}
             if missing := modnames - given:
-                self.__error(
-                    msgArg.lineno - 1,
-                    msgArg.col_offset,
-                    "L113a",  # missing keys
-                    ", ".join([repr(k) for k in missing]),
-                )
+                # missing keys
+                self.__error(msgArg, "L-113a", ", ".join([repr(k) for k in missing]))
 
             if missing := given - modnames:
-                self.__error(
-                    msgArg.lineno - 1,
-                    msgArg.col_offset,
-                    "L113b",  # unreferenced keys
-                    ", ".join([repr(k) for k in missing]),
-                )
+                # unreferenced keys
+                self.__error(msgArg, "L-113b", ", ".join([repr(k) for k in missing]))
 
             return
 
@@ -473,14 +453,7 @@
         argCount = len(node.args) - 1 - (node.func.attr == "log")
 
         if modposCount > 0 and modposCount != argCount:
-            self.__error(
-                msgArg.lineno - 1,
-                msgArg.col_offset,
-                "L112",
-                modposCount,
-                "'%'",  # noqa: M601
-                argCount,
-            )
+            self.__error(msgArg, "L-112", modposCount, "'%'", argCount)  # noqa: M-601
             return
 
     def __atModuleLevel(self):
@@ -510,24 +483,6 @@
 
         return None
 
-    def __keywordPos(self, node):
-        """
-        Private method determine line number and column offset of a given keyword node.
-
-        @param node reference to the keyword node
-        @type ast.keyword
-        @return tuple containing the line number and the column offset
-        @rtype tuple of (int, int)
-        """
-        if sys.version_info >= (3, 9):
-            return (node.lineno, node.col_offset)
-        else:
-            # Educated guess
-            return (
-                node.value.lineno,
-                max(0, node.value.col_offset - 1 - len(node.arg)),
-            )
-
     def __isAddChainWithNonStr(self, node):
         """
         Private method to check, if the node is an Add with a non string argument.
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Logging/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -13,79 +13,79 @@
 
 _loggingMessages = {
     ## Logging
-    "L101": QCoreApplication.translate(
+    "L-101": QCoreApplication.translate(
         "LoggingChecker",
         "use logging.getLogger() to instantiate loggers",
     ),
-    "L102": QCoreApplication.translate(
+    "L-102": QCoreApplication.translate(
         "LoggingChecker",
         "use '__name__' with getLogger()",
     ),
-    "L103": QCoreApplication.translate(
+    "L-103": QCoreApplication.translate(
         "LoggingChecker",
         "extra key {0} clashes with LogRecord attribute",
     ),
-    "L104": QCoreApplication.translate(
+    "L-104": QCoreApplication.translate(
         "LoggingChecker",
         "avoid exception() outside of exception handlers",
     ),
-    "L105": QCoreApplication.translate(
+    "L-105": QCoreApplication.translate(
         "LoggingChecker",
         ".exception(...) should be used instead of .error(..., exc_info=True)",
     ),
-    "L106": QCoreApplication.translate(
+    "L-106": QCoreApplication.translate(
         "LoggingChecker",
         "redundant exc_info argument for exception() should be removed",
     ),
-    "L107": QCoreApplication.translate(
+    "L-107": QCoreApplication.translate(
         "LoggingChecker",
         "use error() instead of exception() with exc_info=False",
     ),
-    "L108": QCoreApplication.translate(
+    "L-108": QCoreApplication.translate(
         "LoggingChecker",
         "warn() is deprecated, use warning() instead",
     ),
-    "L109": QCoreApplication.translate(
+    "L-109": QCoreApplication.translate(
         "LoggingChecker",
         "WARN is undocumented, use WARNING instead",
     ),
-    "L110": QCoreApplication.translate(
+    "L-110": QCoreApplication.translate(
         "LoggingChecker",
         "exception() does not take an exception",
     ),
-    "L111a": QCoreApplication.translate(
+    "L-111a": QCoreApplication.translate(
         "LoggingChecker",
         "avoid pre-formatting log messages using f-string",
     ),
-    "L111b": QCoreApplication.translate(
+    "L-111b": QCoreApplication.translate(
         "LoggingChecker",
         "avoid pre-formatting log messages using string.format()",
     ),
-    "L111c": QCoreApplication.translate(
+    "L-111c": QCoreApplication.translate(
         "LoggingChecker",
-        "avoid pre-formatting log messages using '%'",  # noqa: M601
+        "avoid pre-formatting log messages using '%'",  # noqa: M-601
     ),
-    "L111d": QCoreApplication.translate(
+    "L-111d": QCoreApplication.translate(
         "LoggingChecker",
         "avoid pre-formatting log messages using '+'",
     ),
-    "L112": QCoreApplication.translate(
+    "L-112": QCoreApplication.translate(
         "LoggingChecker",
         "formatting error: {0} {1} placeholder(s) but {2} argument(s)",
     ),
-    "L113a": QCoreApplication.translate(
+    "L-113a": QCoreApplication.translate(
         "LoggingChecker",
         "formatting error: missing key(s): {0}",
     ),
-    "L113b": QCoreApplication.translate(
+    "L-113b": QCoreApplication.translate(
         "LoggingChecker",
         "formatting error: unreferenced key(s): {0}",
     ),
-    "L114": QCoreApplication.translate(
+    "L-114": QCoreApplication.translate(
         "LoggingChecker",
         "avoid exc_info=True outside of exception handlers",
     ),
-    "L115": QCoreApplication.translate(
+    "L-115": QCoreApplication.translate(
         "LoggingChecker",
         "avoid logging calls on the root logger",
     ),
@@ -93,8 +93,8 @@
 
 _loggingMessagesSampleArgs = {
     ## Logging
-    "L103": ["'pathname'"],
-    "L112": [3, "'%'", 2],  # noqa: M601
-    "L113a": ["'foo', 'bar'"],
-    "L113b": ["'foo', 'bar'"],
+    "L-103": ["'pathname'"],
+    "L-112": [3, "'%'", 2],  # noqa: M-601
+    "L-113a": ["'foo', 'bar'"],
+    "L-113b": ["'foo', 'bar'"],
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/BugBearVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,2101 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a visitor to check for various potential issues.
+"""
+
+import ast
+import builtins
+import contextlib
+import itertools
+import math
+import re
+
+from collections import Counter, namedtuple
+from dataclasses import dataclass
+from keyword import iskeyword
+
+import AstUtilities
+
+#######################################################################
+## adapted from: flake8-bugbear v24.12.12
+##
+## Original: Copyright (c) 2016 Łukasz Langa
+#######################################################################
+
+BugbearMutableLiterals = ("Dict", "List", "Set")
+BugbearMutableComprehensions = ("ListComp", "DictComp", "SetComp")
+BugbearMutableCalls = (
+    "Counter",
+    "OrderedDict",
+    "collections.Counter",
+    "collections.OrderedDict",
+    "collections.defaultdict",
+    "collections.deque",
+    "defaultdict",
+    "deque",
+    "dict",
+    "list",
+    "set",
+)
+BugbearImmutableCalls = (
+    "tuple",
+    "frozenset",
+    "types.MappingProxyType",
+    "MappingProxyType",
+    "re.compile",
+    "operator.attrgetter",
+    "operator.itemgetter",
+    "operator.methodcaller",
+    "attrgetter",
+    "itemgetter",
+    "methodcaller",
+)
+
+
+BugBearContext = namedtuple("BugBearContext", ["node", "stack"])
+
+
+def composeCallPath(node):
+    """
+    Generator function to assemble the call path of a given node.
+
+    @param node node to assemble call path for
+    @type ast.Node
+    @yield call path components
+    @ytype str
+    """
+    if isinstance(node, ast.Attribute):
+        yield from composeCallPath(node.value)
+        yield node.attr
+    elif isinstance(node, ast.Call):
+        yield from composeCallPath(node.func)
+    elif isinstance(node, ast.Name):
+        yield node.id
+
+
+@dataclass
+class M540CaughtException:
+    """
+    Class to hold the data for a caught exception.
+    """
+
+    name: str
+    hasNote: bool
+
+
+class M541UnhandledKeyType:
+    """
+    Class to hold a dictionary key of a type that we do not check for duplicates.
+    """
+
+
+class M541VariableKeyType:
+    """
+    Class to hold the name of a variable key type.
+    """
+
+    def __init__(self, name):
+        """
+        Constructor
+
+        @param name name of the variable key type
+        @type str
+        """
+        self.name = name
+
+
+class BugBearVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check for various topics.
+    """
+
+    CONTEXTFUL_NODES = (
+        ast.Module,
+        ast.ClassDef,
+        ast.AsyncFunctionDef,
+        ast.FunctionDef,
+        ast.Lambda,
+        ast.ListComp,
+        ast.SetComp,
+        ast.DictComp,
+        ast.GeneratorExp,
+    )
+
+    FUNCTION_NODES = (
+        ast.AsyncFunctionDef,
+        ast.FunctionDef,
+        ast.Lambda,
+    )
+
+    NodeWindowSize = 4
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.nodeWindow = []
+        self.violations = []
+        self.contexts = []
+
+        self.__M523Seen = set()
+        self.__M505Imports = set()
+        self.__M540CaughtException = None
+
+        self.__inTryStar = ""
+
+    @property
+    def nodeStack(self):
+        """
+        Public method to get a reference to the most recent node stack.
+
+        @return reference to the most recent node stack
+        @rtype list
+        """
+        if len(self.contexts) == 0:
+            return []
+
+        context, stack = self.contexts[-1]
+        return stack
+
+    def __isIdentifier(self, arg):
+        """
+        Private method to check if arg is a valid identifier.
+
+        See https://docs.python.org/2/reference/lexical_analysis.html#identifiers
+
+        @param arg reference to an argument node
+        @type ast.Node
+        @return flag indicating a valid identifier
+        @rtype TYPE
+        """
+        if not AstUtilities.isString(arg):
+            return False
+
+        return (
+            re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", AstUtilities.getValue(arg))
+            is not None
+        )
+
+    def toNameStr(self, node):
+        """
+        Public method to turn Name and Attribute nodes to strings, handling any
+        depth of attribute accesses.
+
+
+        @param node reference to the node
+        @type ast.Name or ast.Attribute
+        @return string representation
+        @rtype str
+        """
+        if isinstance(node, ast.Name):
+            return node.id
+        elif isinstance(node, ast.Call):
+            return self.toNameStr(node.func)
+        elif isinstance(node, ast.Attribute):
+            inner = self.toNameStr(node.value)
+            if inner is None:
+                return None
+            return f"{inner}.{node.attr}"
+        else:
+            return None
+
+    def __typesafeIssubclass(self, obj, classOrTuple):
+        """
+        Private method implementing a type safe issubclass() function.
+
+        @param obj reference to the object to be tested
+        @type Any
+        @param classOrTuple type to check against
+        @type type
+        @return flag indicating a subclass
+        @rtype bool
+        """
+        try:
+            return issubclass(obj, classOrTuple)
+        except TypeError:
+            # User code specifies a type that is not a type in our current run.
+            # Might be their error, might be a difference in our environments.
+            # We don't know so we ignore this.
+            return False
+
+    def __getAssignedNames(self, loopNode):
+        """
+        Private method to get the names of a for loop.
+
+        @param loopNode reference to the node to be processed
+        @type ast.For
+        @yield DESCRIPTION
+        @ytype TYPE
+        """
+        loopTargets = (ast.For, ast.AsyncFor, ast.comprehension)
+        for node in self.__childrenInScope(loopNode):
+            if isinstance(node, (ast.Assign)):
+                for child in node.targets:
+                    yield from self.__namesFromAssignments(child)
+            if isinstance(node, loopTargets + (ast.AnnAssign, ast.AugAssign)):
+                yield from self.__namesFromAssignments(node.target)
+
+    def __namesFromAssignments(self, assignTarget):
+        """
+        Private method to get names of an assignment.
+
+        @param assignTarget reference to the node to be processed
+        @type ast.Node
+        @yield name of the assignment
+        @ytype str
+        """
+        if isinstance(assignTarget, ast.Name):
+            yield assignTarget.id
+        elif isinstance(assignTarget, ast.Starred):
+            yield from self.__namesFromAssignments(assignTarget.value)
+        elif isinstance(assignTarget, (ast.List, ast.Tuple)):
+            for child in assignTarget.elts:
+                yield from self.__namesFromAssignments(child)
+
+    def __childrenInScope(self, node):
+        """
+        Private method to get all child nodes in the given scope.
+
+        @param node reference to the node to be processed
+        @type ast.Node
+        @yield reference to a child node
+        @ytype ast.Node
+        """
+        yield node
+        if not isinstance(node, BugBearVisitor.FUNCTION_NODES):
+            for child in ast.iter_child_nodes(node):
+                yield from self.__childrenInScope(child)
+
+    def __flattenExcepthandler(self, node):
+        """
+        Private method to flatten the list of exceptions handled by an except handler.
+
+        @param node reference to the node to be processed
+        @type ast.Node
+        @yield reference to the exception type node
+        @ytype ast.Node
+        """
+        if not isinstance(node, ast.Tuple):
+            yield node
+            return
+
+        exprList = node.elts.copy()
+        while len(exprList):
+            expr = exprList.pop(0)
+            if isinstance(expr, ast.Starred) and isinstance(
+                expr.value, (ast.List, ast.Tuple)
+            ):
+                exprList.extend(expr.value.elts)
+                continue
+            yield expr
+
+    def __checkRedundantExcepthandlers(self, names, node, inTryStar):
+        """
+        Private method to check for redundant exception types in an exception handler.
+
+        @param names list of exception types to be checked
+        @type list of ast.Name
+        @param node reference to the exception handler node
+        @type ast.ExceptionHandler
+        @param inTryStar character indicating an 'except*' handler
+        @type str
+        @return tuple containing the error data
+        @rtype tuple of (ast.Node, str, str, str, str)
+        """
+        redundantExceptions = {
+            "OSError": {
+                # All of these are actually aliases of OSError since Python 3.3
+                "IOError",
+                "EnvironmentError",
+                "WindowsError",
+                "mmap.error",
+                "socket.error",
+                "select.error",
+            },
+            "ValueError": {
+                "binascii.Error",
+            },
+        }
+
+        # See if any of the given exception names could be removed, e.g. from:
+        #    (MyError, MyError)  # duplicate names  # noqa: M-891
+        #    (MyError, BaseException)  # everything derives from the Base  # noqa: M-891
+        #    (Exception, TypeError)  # builtins where one subclasses another
+        # noqa: M-891
+        #    (IOError, OSError)  # IOError is an alias of OSError since Python3.3
+        # noqa: M-891
+        # but note that other cases are impractical to handle from the AST.
+        # We expect this is mostly useful for users who do not have the
+        # builtin exception hierarchy memorised, and include a 'shadowed'
+        # subtype without realising that it's redundant.
+        good = sorted(set(names), key=names.index)
+        if "BaseException" in good:
+            good = ["BaseException"]
+        # Remove redundant exceptions that the automatic system either handles
+        # poorly (usually aliases) or can't be checked (e.g. it's not an
+        # built-in exception).
+        for primary, equivalents in redundantExceptions.items():
+            if primary in good:
+                good = [g for g in good if g not in equivalents]
+
+        for name, other in itertools.permutations(tuple(good), 2):
+            if (
+                self.__typesafeIssubclass(
+                    getattr(builtins, name, type), getattr(builtins, other, ())
+                )
+                and name in good
+            ):
+                good.remove(name)
+        if good != names:
+            desc = good[0] if len(good) == 1 else "({0})".format(", ".join(good))
+            as_ = " as " + node.name if node.name is not None else ""
+            return (node, "M-514", ", ".join(names), as_, desc, inTryStar)
+
+        return None
+
+    def __walkList(self, nodes):
+        """
+        Private method to walk a given list of nodes.
+
+        @param nodes list of nodes to walk
+        @type list of ast.Node
+        @yield node references as determined by the ast.walk() function
+        @ytype ast.Node
+        """
+        for node in nodes:
+            yield from ast.walk(node)
+
+    def __getNamesFromTuple(self, node):
+        """
+        Private method to get the names from an ast.Tuple node.
+
+        @param node ast node to be processed
+        @type ast.Tuple
+        @yield names
+        @ytype str
+        """
+        for dim in node.elts:
+            if isinstance(dim, ast.Name):
+                yield dim.id
+            elif isinstance(dim, ast.Tuple):
+                yield from self.__getNamesFromTuple(dim)
+
+    def __getDictCompLoopAndNamedExprVarNames(self, node):
+        """
+        Private method to get the names of comprehension loop variables.
+
+        @param node ast node to be processed
+        @type ast.DictComp
+        @yield loop variable names
+        @ytype str
+        """
+        finder = NamedExprFinder()
+        for gen in node.generators:
+            if isinstance(gen.target, ast.Name):
+                yield gen.target.id
+            elif isinstance(gen.target, ast.Tuple):
+                yield from self.__getNamesFromTuple(gen.target)
+
+            finder.visit(gen.ifs)
+
+        yield from finder.getNames().keys()
+
+    def __inClassInit(self):
+        """
+        Private method to check, if we are inside an '__init__' method.
+
+        @return flag indicating being within the '__init__' method
+        @rtype bool
+        """
+        return (
+            len(self.contexts) >= 2
+            and isinstance(self.contexts[-2].node, ast.ClassDef)
+            and isinstance(self.contexts[-1].node, ast.FunctionDef)
+            and self.contexts[-1].node.name == "__init__"
+        )
+
+    def visit_Return(self, node):
+        """
+        Public method to handle 'Return' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.Return
+        """
+        if self.__inClassInit() and node.value is not None:
+            self.violations.append((node, "M-537"))
+
+        self.generic_visit(node)
+
+    def visit_Yield(self, node):
+        """
+        Public method to handle 'Yield' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.Yield
+        """
+        if self.__inClassInit():
+            self.violations.append((node, "M-537"))
+
+        self.generic_visit(node)
+
+    def visit_YieldFrom(self, node) -> None:
+        """
+        Public method to handle 'YieldFrom' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.YieldFrom
+        """
+        if self.__inClassInit():
+            self.violations.append((node, "M-537"))
+
+        self.generic_visit(node)
+
+    def visit(self, node):
+        """
+        Public method to traverse a given AST node.
+
+        @param node AST node to be traversed
+        @type ast.Node
+        """
+        isContextful = isinstance(node, BugBearVisitor.CONTEXTFUL_NODES)
+
+        if isContextful:
+            context = BugBearContext(node, [])
+            self.contexts.append(context)
+
+        self.nodeStack.append(node)
+        self.nodeWindow.append(node)
+        self.nodeWindow = self.nodeWindow[-BugBearVisitor.NodeWindowSize :]
+
+        super().visit(node)
+
+        self.nodeStack.pop()
+
+        if isContextful:
+            self.contexts.pop()
+
+        self.__checkForM518(node)
+
+    def visit_ExceptHandler(self, node):
+        """
+        Public method to handle exception handlers.
+
+        @param node reference to the node to be processed
+        @type ast.ExceptHandler
+        """
+        if node.type is None:
+            # bare except is handled by pycodestyle already
+            self.generic_visit(node)
+            return
+
+        oldM540CaughtException = self.__M540CaughtException
+        if node.name is None:
+            self.__M540CaughtException = None
+        else:
+            self.__M540CaughtException = M540CaughtException(node.name, False)
+
+        names = self.__checkForM513_M514_M529_M530(node)
+
+        if "BaseException" in names and not ExceptBaseExceptionVisitor(node).reRaised():
+            self.violations.append((node, "M-536"))
+
+        self.generic_visit(node)
+
+        if (
+            self.__M540CaughtException is not None
+            and self.__M540CaughtException.hasNote
+        ):
+            self.violations.append((node, "M-540"))
+        self.__M540CaughtException = oldM540CaughtException
+
+    def visit_UAdd(self, node):
+        """
+        Public method to handle unary additions.
+
+        @param node reference to the node to be processed
+        @type ast.UAdd
+        """
+        trailingNodes = list(map(type, self.nodeWindow[-4:]))
+        if trailingNodes == [ast.UnaryOp, ast.UAdd, ast.UnaryOp, ast.UAdd]:
+            originator = self.nodeWindow[-4]
+            self.violations.append((originator, "M-502"))
+
+        self.generic_visit(node)
+
+    def visit_Call(self, node):
+        """
+        Public method to handle a function call.
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        isM540AddNote = False
+
+        if isinstance(node.func, ast.Attribute):
+            self.__checkForM505(node)
+            isM540AddNote = self.__checkForM540AddNote(node.func)
+        else:
+            with contextlib.suppress(AttributeError, IndexError):
+                # bad super() call
+                if isinstance(node.func, ast.Name) and node.func.id == "super":
+                    args = node.args
+                    if (
+                        len(args) == 2
+                        and isinstance(args[0], ast.Attribute)
+                        and isinstance(args[0].value, ast.Name)
+                        and args[0].value.id == "self"
+                        and args[0].attr == "__class__"
+                    ):
+                        self.violations.append((node, "M-582"))
+
+                # bad getattr and setattr
+                if (
+                    node.func.id in ("getattr", "hasattr")
+                    and node.args[1].value == "__call__"
+                ):
+                    self.violations.append((node, "M-504"))
+                if (
+                    node.func.id == "getattr"
+                    and len(node.args) == 2
+                    and self.__isIdentifier(node.args[1])
+                    and iskeyword(AstUtilities.getValue(node.args[1]))
+                ):
+                    self.violations.append((node, "M-509"))
+                elif (
+                    node.func.id == "setattr"
+                    and len(node.args) == 3
+                    and self.__isIdentifier(node.args[1])
+                    and iskeyword(AstUtilities.getValue(node.args[1]))
+                ):
+                    self.violations.append((node, "M-510"))
+
+        self.__checkForM526(node)
+
+        self.__checkForM528(node)
+        self.__checkForM534(node)
+        self.__checkForM539(node)
+
+        # no need for copying, if used in nested calls it will be set to None
+        currentM540CaughtException = self.__M540CaughtException
+        if not isM540AddNote:
+            self.__checkForM540Usage(node.args)
+            self.__checkForM540Usage(node.keywords)
+
+        self.generic_visit(node)
+
+        if isM540AddNote:
+            # Avoid nested calls within the parameter list using the variable itself.
+            # e.g. `e.add_note(str(e))`
+            self.__M540CaughtException = currentM540CaughtException
+
+    def visit_Module(self, node):
+        """
+        Public method to handle a module node.
+
+        @param node reference to the node to be processed
+        @type ast.Module
+        """
+        self.generic_visit(node)
+
+    def visit_Assign(self, node):
+        """
+        Public method to handle assignments.
+
+        @param node reference to the node to be processed
+        @type ast.Assign
+        """
+        self.__checkForM540Usage(node.value)
+        if len(node.targets) == 1:
+            target = node.targets[0]
+            if (
+                isinstance(target, ast.Attribute)
+                and isinstance(target.value, ast.Name)
+                and (target.value.id, target.attr) == ("os", "environ")
+            ):
+                self.violations.append((node, "M-503"))
+
+        self.generic_visit(node)
+
+    def visit_For(self, node):
+        """
+        Public method to handle 'for' statements.
+
+        @param node reference to the node to be processed
+        @type ast.For
+        """
+        self.__checkForM507(node)
+        self.__checkForM520(node)
+        self.__checkForM523(node)
+        self.__checkForM531(node)
+        self.__checkForM569(node)
+
+        self.generic_visit(node)
+
+    def visit_AsyncFor(self, node):
+        """
+        Public method to handle 'for' statements.
+
+        @param node reference to the node to be processed
+        @type ast.AsyncFor
+        """
+        self.__checkForM507(node)
+        self.__checkForM520(node)
+        self.__checkForM523(node)
+        self.__checkForM531(node)
+
+        self.generic_visit(node)
+
+    def visit_While(self, node):
+        """
+        Public method to handle 'while' statements.
+
+        @param node reference to the node to be processed
+        @type ast.While
+        """
+        self.__checkForM523(node)
+
+        self.generic_visit(node)
+
+    def visit_ListComp(self, node):
+        """
+        Public method to handle list comprehensions.
+
+        @param node reference to the node to be processed
+        @type ast.ListComp
+        """
+        self.__checkForM523(node)
+
+        self.generic_visit(node)
+
+    def visit_SetComp(self, node):
+        """
+        Public method to handle set comprehensions.
+
+        @param node reference to the node to be processed
+        @type ast.SetComp
+        """
+        self.__checkForM523(node)
+
+        self.generic_visit(node)
+
+    def visit_DictComp(self, node):
+        """
+        Public method to handle dictionary comprehensions.
+
+        @param node reference to the node to be processed
+        @type ast.DictComp
+        """
+        self.__checkForM523(node)
+        self.__checkForM535(node)
+
+        self.generic_visit(node)
+
+    def visit_GeneratorExp(self, node):
+        """
+        Public method to handle generator expressions.
+
+        @param node reference to the node to be processed
+        @type ast.GeneratorExp
+        """
+        self.__checkForM523(node)
+
+        self.generic_visit(node)
+
+    def visit_Assert(self, node):
+        """
+        Public method to handle 'assert' statements.
+
+        @param node reference to the node to be processed
+        @type ast.Assert
+        """
+        if (
+            AstUtilities.isNameConstant(node.test)
+            and AstUtilities.getValue(node.test) is False
+        ):
+            self.violations.append((node, "M-511"))
+
+        self.generic_visit(node)
+
+    def visit_AsyncFunctionDef(self, node):
+        """
+        Public method to handle async function definitions.
+
+        @param node reference to the node to be processed
+        @type ast.AsyncFunctionDef
+        """
+        self.__checkForM506_M508(node)
+
+        self.generic_visit(node)
+
+    def visit_FunctionDef(self, node):
+        """
+        Public method to handle function definitions.
+
+        @param node reference to the node to be processed
+        @type ast.FunctionDef
+        """
+        self.__checkForM506_M508(node)
+        self.__checkForM519(node)
+        self.__checkForM521(node)
+
+        self.generic_visit(node)
+
+    def visit_ClassDef(self, node):
+        """
+        Public method to handle class definitions.
+
+        @param node reference to the node to be processed
+        @type ast.ClassDef
+        """
+        self.__checkForM521(node)
+        self.__checkForM524_M527(node)
+
+        self.generic_visit(node)
+
+    def visit_Try(self, node):
+        """
+        Public method to handle 'try' statements.
+
+        @param node reference to the node to be processed
+        @type ast.Try
+        """
+        self.__checkForM512(node)
+        self.__checkForM525(node)
+
+        self.generic_visit(node)
+
+    def visit_TryStar(self, node):
+        """
+        Public method to handle 'except*' statements.
+
+        @param node reference to the node to be processed
+        @type ast.TryStar
+        """
+        outerTryStar = self.__inTryStar
+        self.__inTryStar = "*"
+        self.visit_Try(node)
+        self.__inTryStar = outerTryStar
+
+    def visit_Compare(self, node):
+        """
+        Public method to handle comparison statements.
+
+        @param node reference to the node to be processed
+        @type ast.Compare
+        """
+        self.__checkForM515(node)
+
+        self.generic_visit(node)
+
+    def visit_Raise(self, node):
+        """
+        Public method to handle 'raise' statements.
+
+        @param node reference to the node to be processed
+        @type ast.Raise
+        """
+        if node.exc is None:
+            self.__M540CaughtException = None
+        else:
+            self.__checkForM540Usage(node.exc)
+            self.__checkForM540Usage(node.cause)
+        self.__checkForM516(node)
+
+        self.generic_visit(node)
+
+    def visit_With(self, node):
+        """
+        Public method to handle 'with' statements.
+
+        @param node reference to the node to be processed
+        @type ast.With
+        """
+        self.__checkForM517(node)
+        self.__checkForM522(node)
+
+        self.generic_visit(node)
+
+    def visit_JoinedStr(self, node):
+        """
+        Public method to handle f-string arguments.
+
+        @param node reference to the node to be processed
+        @type ast.JoinedStr
+        """
+        for value in node.values:
+            if isinstance(value, ast.FormattedValue):
+                return
+
+        self.violations.append((node, "M-581"))
+
+    def visit_AnnAssign(self, node):
+        """
+        Public method to check annotated assign statements.
+
+        @param node reference to the node to be processed
+        @type ast.AnnAssign
+        """
+        self.__checkForM532(node)
+        self.__checkForM540Usage(node.value)
+
+        self.generic_visit(node)
+
+    def visit_Import(self, node):
+        """
+        Public method to check imports.
+
+        @param node reference to the node to be processed
+        @type ast.Import
+        """
+        self.__checkForM505(node)
+
+        self.generic_visit(node)
+
+    def visit_ImportFrom(self, node):
+        """
+        Public method to check from imports.
+
+        @param node reference to the node to be processed
+        @type ast.Import
+        """
+        self.visit_Import(node)
+
+    def visit_Set(self, node):
+        """
+        Public method to check a set.
+
+        @param node reference to the node to be processed
+        @type ast.Set
+        """
+        self.__checkForM533(node)
+
+        self.generic_visit(node)
+
+    def visit_Dict(self, node):
+        """
+        Public method to check a dictionary.
+
+        @param node reference to the node to be processed
+        @type ast.Dict
+        """
+        self.__checkForM541(node)
+
+        self.generic_visit(node)
+
+    def __checkForM505(self, node):
+        """
+        Private method to check the use of *strip().
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if isinstance(node, ast.Import):
+            for name in node.names:
+                self.__M505Imports.add(name.asname or name.name)
+        elif isinstance(node, ast.ImportFrom):
+            for name in node.names:
+                self.__M505Imports.add(f"{node.module}.{name.name or name.asname}")
+        elif isinstance(node, ast.Call) and isinstance(node.func, ast.Attribute):
+            if node.func.attr not in ("lstrip", "rstrip", "strip"):
+                return  # method name doesn't match
+
+            if (
+                isinstance(node.func.value, ast.Name)
+                and node.func.value.id in self.__M505Imports
+            ):
+                return  # method is being run on an imported module
+
+            if len(node.args) != 1 or not AstUtilities.isString(node.args[0]):
+                return  # used arguments don't match the builtin strip
+
+            value = AstUtilities.getValue(node.args[0])
+            if len(value) == 1:
+                return  # stripping just one character
+
+            if len(value) == len(set(value)):
+                return  # no characters appear more than once
+
+            self.violations.append((node, "M-505"))
+
+    def __checkForM506_M508(self, node):
+        """
+        Private method to check the use of mutable literals, comprehensions and calls.
+
+        @param node reference to the node to be processed
+        @type ast.AsyncFunctionDef or ast.FunctionDef
+        """
+        visitor = FunctionDefDefaultsVisitor("M-506", "M-508")
+        visitor.visit(node.args.defaults + node.args.kw_defaults)
+        self.violations.extend(visitor.errors)
+
+    def __checkForM507(self, node):
+        """
+        Private method to check for unused loop variables.
+
+        @param node reference to the node to be processed
+        @type ast.For or ast.AsyncFor
+        """
+        targets = NameFinder()
+        targets.visit(node.target)
+        ctrlNames = set(filter(lambda s: not s.startswith("_"), targets.getNames()))
+        body = NameFinder()
+        for expr in node.body:
+            body.visit(expr)
+        usedNames = set(body.getNames())
+        for name in sorted(ctrlNames - usedNames):
+            n = targets.getNames()[name][0]
+            self.violations.append((n, "M-507", name))
+
+    def __checkForM512(self, node):
+        """
+        Private method to check for return/continue/break inside finally blocks.
+
+        @param node reference to the node to be processed
+        @type ast.Try
+        """
+
+        def _loop(node, badNodeTypes):
+            if isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef)):
+                return
+
+            if isinstance(node, (ast.While, ast.For)):
+                badNodeTypes = (ast.Return,)
+
+            elif isinstance(node, badNodeTypes):
+                self.violations.append((node, "M-512", self.__inTryStar))
+
+            for child in ast.iter_child_nodes(node):
+                _loop(child, badNodeTypes)
+
+        for child in node.finalbody:
+            _loop(child, (ast.Return, ast.Continue, ast.Break))
+
+    def __checkForM513_M514_M529_M530(self, node):
+        """
+        Private method to check various exception handler situations.
+
+        @param node reference to the node to be processed
+        @type ast.ExceptHandler
+        @return list of exception handler names
+        @rtype list of str
+        """
+        handlers = self.__flattenExcepthandler(node.type)
+        names = []
+        badHandlers = []
+        ignoredHandlers = []
+
+        for handler in handlers:
+            if isinstance(handler, (ast.Name, ast.Attribute)):
+                name = self.toNameStr(handler)
+                if name is None:
+                    ignoredHandlers.append(handler)
+                else:
+                    names.append(name)
+            elif isinstance(handler, (ast.Call, ast.Starred)):
+                ignoredHandlers.append(handler)
+            else:
+                badHandlers.append(handler)
+        if badHandlers:
+            self.violations.append((node, "M-530"))
+        if len(names) == 0 and not badHandlers and not ignoredHandlers:
+            self.violations.append((node, "M-529", self.__inTryStar))
+        elif (
+            len(names) == 1
+            and not badHandlers
+            and not ignoredHandlers
+            and isinstance(node.type, ast.Tuple)
+        ):
+            self.violations.append((node, "M-513", *names, self.__inTryStar))
+        else:
+            maybeError = self.__checkRedundantExcepthandlers(
+                names, node, self.__inTryStar
+            )
+            if maybeError is not None:
+                self.violations.append(maybeError)
+        return names
+
+    def __checkForM515(self, node):
+        """
+        Private method to check for pointless comparisons.
+
+        @param node reference to the node to be processed
+        @type ast.Compare
+        """
+        if isinstance(self.nodeStack[-2], ast.Expr):
+            self.violations.append((node, "M-515"))
+
+    def __checkForM516(self, node):
+        """
+        Private method to check for raising a literal instead of an exception.
+
+        @param node reference to the node to be processed
+        @type ast.Raise
+        """
+        if (
+            AstUtilities.isNameConstant(node.exc)
+            or AstUtilities.isNumber(node.exc)
+            or AstUtilities.isString(node.exc)
+        ):
+            self.violations.append((node, "M-516"))
+
+    def __checkForM517(self, node):
+        """
+        Private method to check for use of the evil syntax
+        'with assertRaises(Exception): or 'with pytest.raises(Exception):'.
+
+        @param node reference to the node to be processed
+        @type ast.With
+        """
+        item = node.items[0]
+        itemContext = item.context_expr
+        if (
+            hasattr(itemContext, "func")
+            and (
+                (
+                    isinstance(itemContext.func, ast.Attribute)
+                    and (
+                        itemContext.func.attr == "assertRaises"
+                        or (
+                            itemContext.func.attr == "raises"
+                            and isinstance(itemContext.func.value, ast.Name)
+                            and itemContext.func.value.id == "pytest"
+                            and "match" not in (kwd.arg for kwd in itemContext.keywords)
+                        )
+                    )
+                )
+                or (
+                    isinstance(itemContext.func, ast.Name)
+                    and itemContext.func.id == "raises"
+                    and isinstance(itemContext.func.ctx, ast.Load)
+                    and "pytest.raises" in self.__M505Imports
+                    and "match" not in (kwd.arg for kwd in itemContext.keywords)
+                )
+            )
+            and len(itemContext.args) == 1
+            and isinstance(itemContext.args[0], ast.Name)
+            and itemContext.args[0].id in ("Exception", "BaseException")
+            and not item.optional_vars
+        ):
+            self.violations.append((node, "M-517"))
+
+    def __checkForM518(self, node):
+        """
+        Private method to check for useless expressions.
+
+        @param node reference to the node to be processed
+        @type ast.FunctionDef
+        """
+        if not isinstance(node, ast.Expr):
+            return
+
+        if isinstance(
+            node.value,
+            (ast.List, ast.Set, ast.Dict, ast.Tuple),
+        ) or (
+            isinstance(node.value, ast.Constant)
+            and (
+                isinstance(
+                    node.value.value,
+                    (int, float, complex, bytes, bool),
+                )
+                or node.value.value is None
+            )
+        ):
+            self.violations.append((node, "M-518", node.value.__class__.__name__))
+
+    def __checkForM519(self, node):
+        """
+        Private method to check for use of 'functools.lru_cache' or 'functools.cache'.
+
+        @param node reference to the node to be processed
+        @type ast.FunctionDef
+        """
+        caches = {
+            "functools.cache",
+            "functools.lru_cache",
+            "cache",
+            "lru_cache",
+        }
+
+        if (
+            len(node.decorator_list) == 0
+            or len(self.contexts) < 2
+            or not isinstance(self.contexts[-2].node, ast.ClassDef)
+        ):
+            return
+
+        # Preserve decorator order so we can get the lineno from the decorator node
+        # rather than the function node (this location definition changes in Python 3.8)
+        resolvedDecorators = (
+            ".".join(composeCallPath(decorator)) for decorator in node.decorator_list
+        )
+        for idx, decorator in enumerate(resolvedDecorators):
+            if decorator in {"classmethod", "staticmethod"}:
+                return
+
+            if decorator in caches:
+                self.violations.append((node.decorator_list[idx], "M-519"))
+                return
+
+    def __checkForM520(self, node):
+        """
+        Private method to check for a loop that modifies its iterable.
+
+        @param node reference to the node to be processed
+        @type ast.For or ast.AsyncFor
+        """
+        targets = NameFinder()
+        targets.visit(node.target)
+        ctrlNames = set(targets.getNames())
+
+        iterset = M520NameFinder()
+        iterset.visit(node.iter)
+        itersetNames = set(iterset.getNames())
+
+        for name in sorted(ctrlNames):
+            if name in itersetNames:
+                n = targets.getNames()[name][0]
+                self.violations.append((n, "M-520"))
+
+    def __checkForM521(self, node):
+        """
+        Private method to check for use of an f-string as docstring.
+
+        @param node reference to the node to be processed
+        @type ast.FunctionDef or ast.ClassDef
+        """
+        if (
+            node.body
+            and isinstance(node.body[0], ast.Expr)
+            and isinstance(node.body[0].value, ast.JoinedStr)
+        ):
+            self.violations.append((node.body[0].value, "M-521"))
+
+    def __checkForM522(self, node):
+        """
+        Private method to check for use of an f-string as docstring.
+
+        @param node reference to the node to be processed
+        @type ast.With
+        """
+        item = node.items[0]
+        itemContext = item.context_expr
+        if (
+            hasattr(itemContext, "func")
+            and hasattr(itemContext.func, "value")
+            and hasattr(itemContext.func.value, "id")
+            and itemContext.func.value.id == "contextlib"
+            and hasattr(itemContext.func, "attr")
+            and itemContext.func.attr == "suppress"
+            and len(itemContext.args) == 0
+        ):
+            self.violations.append((node, "M-522"))
+
+    def __checkForM523(self, loopNode):
+        """
+        Private method to check that functions (including lambdas) do not use loop
+        variables.
+
+        @param loopNode reference to the node to be processed
+        @type ast.For, ast.AsyncFor, ast.While, ast.ListComp, ast.SetComp,ast.DictComp,
+            or ast.GeneratorExp
+        """
+        safe_functions = []
+        suspiciousVariables = []
+        for node in ast.walk(loopNode):
+            # check if function is immediately consumed to avoid false alarm
+            if isinstance(node, ast.Call):
+                # check for filter&reduce
+                if (
+                    isinstance(node.func, ast.Name)
+                    and node.func.id in ("filter", "reduce", "map")
+                ) or (
+                    isinstance(node.func, ast.Attribute)
+                    and node.func.attr == "reduce"
+                    and isinstance(node.func.value, ast.Name)
+                    and node.func.value.id == "functools"
+                ):
+                    for arg in node.args:
+                        if isinstance(arg, BugBearVisitor.FUNCTION_NODES):
+                            safe_functions.append(arg)
+
+                # check for key=
+                for keyword in node.keywords:
+                    if keyword.arg == "key" and isinstance(
+                        keyword.value, BugBearVisitor.FUNCTION_NODES
+                    ):
+                        safe_functions.append(keyword.value)
+
+            # mark `return lambda: x` as safe
+            # does not (currently) check inner lambdas in a returned expression
+            # e.g. `return (lambda: x, )
+            if isinstance(node, ast.Return) and isinstance(
+                node.value, BugBearVisitor.FUNCTION_NODES
+            ):
+                safe_functions.append(node.value)
+
+            # find unsafe functions
+            if (
+                isinstance(node, BugBearVisitor.FUNCTION_NODES)
+                and node not in safe_functions
+            ):
+                argnames = {
+                    arg.arg for arg in ast.walk(node.args) if isinstance(arg, ast.arg)
+                }
+                if isinstance(node, ast.Lambda):
+                    bodyNodes = ast.walk(node.body)
+                else:
+                    bodyNodes = itertools.chain.from_iterable(map(ast.walk, node.body))
+                errors = []
+                for name in bodyNodes:
+                    if isinstance(name, ast.Name) and name.id not in argnames:
+                        if isinstance(name.ctx, ast.Load):
+                            errors.append((name.lineno, name.col_offset, name.id, name))
+                        elif isinstance(name.ctx, ast.Store):
+                            argnames.add(name.id)
+                for err in errors:
+                    if err[2] not in argnames and err not in self.__M523Seen:
+                        self.__M523Seen.add(err)  # dedupe across nested loops
+                        suspiciousVariables.append(err)
+
+        if suspiciousVariables:
+            reassignedInLoop = set(self.__getAssignedNames(loopNode))
+
+        for err in sorted(suspiciousVariables):
+            if reassignedInLoop.issuperset(err[2]):
+                self.violations.append((err[3], "M-523", err[2]))
+
+    def __checkForM524_M527(self, node):
+        """
+        Private method to check for inheritance from abstract classes in abc and lack of
+        any methods decorated with abstract*.
+
+        @param node reference to the node to be processed
+        @type ast.ClassDef
+        """  # __IGNORE_WARNING_D-234r__
+
+        def isAbcClass(value, name="ABC"):
+            if isinstance(value, ast.keyword):
+                return value.arg == "metaclass" and isAbcClass(value.value, "ABCMeta")
+
+            # class foo(ABC)
+            # class foo(abc.ABC)
+            return (isinstance(value, ast.Name) and value.id == name) or (
+                isinstance(value, ast.Attribute)
+                and value.attr == name
+                and isinstance(value.value, ast.Name)
+                and value.value.id == "abc"
+            )
+
+        def isAbstractDecorator(expr):
+            return (isinstance(expr, ast.Name) and expr.id[:8] == "abstract") or (
+                isinstance(expr, ast.Attribute) and expr.attr[:8] == "abstract"
+            )
+
+        def isOverload(expr):
+            return (isinstance(expr, ast.Name) and expr.id == "overload") or (
+                isinstance(expr, ast.Attribute) and expr.attr == "overload"
+            )
+
+        def emptyBody(body):
+            def isStrOrEllipsis(node):
+                return isinstance(node, ast.Constant) and (
+                    node.value is Ellipsis or isinstance(node.value, str)
+                )
+
+            # Function body consist solely of `pass`, `...`, and/or (doc)string literals
+            return all(
+                isinstance(stmt, ast.Pass)
+                or (isinstance(stmt, ast.Expr) and isStrOrEllipsis(stmt.value))
+                for stmt in body
+            )
+
+        # don't check multiple inheritance
+        if len(node.bases) + len(node.keywords) > 1:
+            return
+
+        # only check abstract classes
+        if not any(map(isAbcClass, (*node.bases, *node.keywords))):
+            return
+
+        hasMethod = False
+        hasAbstractMethod = False
+
+        if not any(map(isAbcClass, (*node.bases, *node.keywords))):
+            return
+
+        for stmt in node.body:
+            # Ignore abc's that declares a class attribute that must be set
+            if isinstance(stmt, ast.AnnAssign) and stmt.value is None:
+                hasAbstractMethod = True
+                continue
+
+            # only check function defs
+            if not isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef)):
+                continue
+            hasMethod = True
+
+            hasAbstractDecorator = any(map(isAbstractDecorator, stmt.decorator_list))
+
+            hasAbstractMethod |= hasAbstractDecorator
+
+            if (
+                not hasAbstractDecorator
+                and emptyBody(stmt.body)
+                and not any(map(isOverload, stmt.decorator_list))
+            ):
+                self.violations.append((stmt, "M-527", stmt.name))
+
+        if hasMethod and not hasAbstractMethod:
+            self.violations.append((node, "M-524", node.name))
+
+    def __checkForM525(self, node):
+        """
+        Private method to check for exceptions being handled multiple times.
+
+        @param node reference to the node to be processed
+        @type ast.Try
+        """
+        seen = []
+
+        for handler in node.handlers:
+            if isinstance(handler.type, (ast.Name, ast.Attribute)):
+                name = ".".join(composeCallPath(handler.type))
+                seen.append(name)
+            elif isinstance(handler.type, ast.Tuple):
+                # to avoid checking the same as M514, remove duplicates per except
+                uniques = set()
+                for entry in handler.type.elts:
+                    name = ".".join(composeCallPath(entry))
+                    uniques.add(name)
+                seen.extend(uniques)
+
+        # sort to have a deterministic output
+        duplicates = sorted({x for x in seen if seen.count(x) > 1})
+        for duplicate in duplicates:
+            self.violations.append((node, "M-525", duplicate, self.__inTryStar))
+
+    def __checkForM526(self, node):
+        """
+        Private method to check for Star-arg unpacking after keyword argument.
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if not node.keywords:
+            return
+
+        starreds = [arg for arg in node.args if isinstance(arg, ast.Starred)]
+        if not starreds:
+            return
+
+        firstKeyword = node.keywords[0].value
+        for starred in starreds:
+            if (starred.lineno, starred.col_offset) > (
+                firstKeyword.lineno,
+                firstKeyword.col_offset,
+            ):
+                self.violations.append((node, "M-526"))
+
+    def __checkForM528(self, node):
+        """
+        Private method to check for warn without stacklevel.
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if (
+            isinstance(node.func, ast.Attribute)
+            and node.func.attr == "warn"
+            and isinstance(node.func.value, ast.Name)
+            and node.func.value.id == "warnings"
+            and not any(kw.arg == "stacklevel" for kw in node.keywords)
+            and len(node.args) < 3
+            and not any(isinstance(a, ast.Starred) for a in node.args)
+            and not any(kw.arg is None for kw in node.keywords)
+        ):
+            self.violations.append((node, "M-528"))
+
+    def __checkForM531(self, loopNode):
+        """
+        Private method to check that 'itertools.groupby' isn't iterated over more than
+        once.
+
+        A warning is emitted when the generator returned by 'groupby()' is used
+        more than once inside a loop body or when it's used in a nested loop.
+
+        @param loopNode reference to the node to be processed
+        @type ast.For or ast.AsyncFor
+        """
+        # for <loop_node.target> in <loop_node.iter>: ...
+        if isinstance(loopNode.iter, ast.Call):
+            node = loopNode.iter
+            if (isinstance(node.func, ast.Name) and node.func.id in ("groupby",)) or (
+                isinstance(node.func, ast.Attribute)
+                and node.func.attr == "groupby"
+                and isinstance(node.func.value, ast.Name)
+                and node.func.value.id == "itertools"
+            ):
+                # We have an invocation of groupby which is a simple unpacking
+                if isinstance(loopNode.target, ast.Tuple) and isinstance(
+                    loopNode.target.elts[1], ast.Name
+                ):
+                    groupName = loopNode.target.elts[1].id
+                else:
+                    # Ignore any 'groupby()' invocation that isn't unpacked
+                    return
+
+                numUsages = 0
+                for node in self.__walkList(loopNode.body):
+                    # Handled nested loops
+                    if isinstance(node, ast.For):
+                        for nestedNode in self.__walkList(node.body):
+                            if (
+                                isinstance(nestedNode, ast.Name)
+                                and nestedNode.id == groupName
+                            ):
+                                self.violations.append((nestedNode, "M-531"))
+
+                    # Handle multiple uses
+                    if isinstance(node, ast.Name) and node.id == groupName:
+                        numUsages += 1
+                        if numUsages > 1:
+                            self.violations.append((nestedNode, "M-531"))
+
+    def __checkForM532(self, node):
+        """
+        Private method to check for possible unintentional typing annotation.
+
+        @param node reference to the node to be processed
+        @type ast.AnnAssign
+        """
+        if (
+            node.value is None
+            and hasattr(node.target, "value")
+            and isinstance(node.target.value, ast.Name)
+            and (
+                isinstance(node.target, ast.Subscript)
+                or (
+                    isinstance(node.target, ast.Attribute)
+                    and node.target.value.id != "self"
+                )
+            )
+        ):
+            self.violations.append((node, "M-532"))
+
+    def __checkForM533(self, node):
+        """
+        Private method to check a set for duplicate items.
+
+        @param node reference to the node to be processed
+        @type ast.Set
+        """
+        seen = set()
+        for elt in node.elts:
+            if not isinstance(elt, ast.Constant):
+                continue
+            if elt.value in seen:
+                self.violations.append((node, "M-533", repr(elt.value)))
+            else:
+                seen.add(elt.value)
+
+    def __checkForM534(self, node):
+        """
+        Private method to check that re.sub/subn/split arguments flags/count/maxsplit
+        are passed as keyword arguments.
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if not isinstance(node.func, ast.Attribute):
+            return
+        func = node.func
+        if not isinstance(func.value, ast.Name) or func.value.id != "re":
+            return
+
+        def check(numArgs, paramName):
+            if len(node.args) > numArgs:
+                arg = node.args[numArgs]
+                self.violations.append((arg, "M-534", func.attr, paramName))
+
+        if func.attr in ("sub", "subn"):
+            check(3, "count")
+        elif func.attr == "split":
+            check(2, "maxsplit")
+
+    def __checkForM535(self, node):
+        """
+        Private method to check that a static key isn't used in a dict comprehension.
+
+        Record a warning if a likely unchanging key is used - either a constant,
+        or a variable that isn't coming from the generator expression.
+
+        @param node reference to the node to be processed
+        @type ast.DictComp
+        """
+        if isinstance(node.key, ast.Constant):
+            self.violations.append((node, "M-535", node.key.value))
+        elif isinstance(
+            node.key, ast.Name
+        ) and node.key.id not in self.__getDictCompLoopAndNamedExprVarNames(node):
+            self.violations.append((node, "M-535", node.key.id))
+
+    def __checkForM539(self, node):
+        """
+        Private method to check for correct ContextVar usage.
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if not (
+            (isinstance(node.func, ast.Name) and node.func.id == "ContextVar")
+            or (
+                isinstance(node.func, ast.Attribute)
+                and node.func.attr == "ContextVar"
+                and isinstance(node.func.value, ast.Name)
+                and node.func.value.id == "contextvars"
+            )
+        ):
+            return
+
+        # ContextVar only takes one kw currently, but better safe than sorry
+        for kw in node.keywords:
+            if kw.arg == "default":
+                break
+        else:
+            return
+
+        visitor = FunctionDefDefaultsVisitor("M-539", "M-539")
+        visitor.visit(kw.value)
+        self.violations.extend(visitor.errors)
+
+    def __checkForM540AddNote(self, node):
+        """
+        Private method to check add_note usage.
+
+        @param node reference to the node to be processed
+        @type ast.Attribute
+        @return flag
+        @rtype bool
+        """
+        if (
+            node.attr == "add_note"
+            and isinstance(node.value, ast.Name)
+            and self.__M540CaughtException
+            and node.value.id == self.__M540CaughtException.name
+        ):
+            self.__M540CaughtException.hasNote = True
+            return True
+
+        return False
+
+    def __checkForM540Usage(self, node):
+        """
+        Private method to check the usage of exceptions with added note.
+
+        @param node reference to the node to be processed
+        @type ast.expr or None
+        """  # noqa: D-234y
+
+        def superwalk(node: ast.AST | list[ast.AST]):
+            """
+            Function to walk an AST node or a list of AST nodes.
+
+            @param node reference to the node or a list of nodes to be processed
+            @type ast.AST or list[ast.AST]
+            @yield next node to be processed
+            @ytype ast.AST
+            """
+            if isinstance(node, list):
+                for n in node:
+                    yield from ast.walk(n)
+            else:
+                yield from ast.walk(node)
+
+        if not self.__M540CaughtException or node is None:
+            return
+
+        for n in superwalk(node):
+            if isinstance(n, ast.Name) and n.id == self.__M540CaughtException.name:
+                self.__M540CaughtException = None
+                break
+
+    def __checkForM541(self, node):
+        """
+        Private method to check for duplicate key value pairs in a dictionary literal.
+
+        @param node reference to the node to be processed
+        @type ast.Dict
+        """  # noqa: D-234r
+
+        def convertToValue(item):
+            """
+            Function to extract the value of a given item.
+
+            @param item node to extract value from
+            @type ast.Ast
+            @return value of the node
+            @rtype Any
+            """
+            if isinstance(item, ast.Constant):
+                return item.value
+            elif isinstance(item, ast.Tuple):
+                return tuple(convertToValue(i) for i in item.elts)
+            elif isinstance(item, ast.Name):
+                return M541VariableKeyType(item.id)
+            else:
+                return M541UnhandledKeyType()
+
+        keys = [convertToValue(key) for key in node.keys]
+        keyCounts = Counter(keys)
+        duplicateKeys = [key for key, count in keyCounts.items() if count > 1]
+        for key in duplicateKeys:
+            keyIndices = [i for i, iKey in enumerate(keys) if iKey == key]
+            seen = set()
+            for index in keyIndices:
+                value = convertToValue(node.values[index])
+                if value in seen:
+                    keyNode = node.keys[index]
+                    self.violations.append((keyNode, "M-541"))
+                seen.add(value)
+
+    def __checkForM569(self, node):
+        """
+        Private method to check for changes to a loop's mutable iterable.
+
+        @param node loop node to be checked
+        @type ast.For
+        """
+        if isinstance(node.iter, ast.Name):
+            name = self.toNameStr(node.iter)
+        elif isinstance(node.iter, ast.Attribute):
+            name = self.toNameStr(node.iter)
+        else:
+            return
+        checker = M569Checker(name, self)
+        checker.visit(node.body)
+        for mutation in checker.mutations:
+            self.violations.append((mutation, "M-569"))
+
+
+class M569Checker(ast.NodeVisitor):
+    """
+    Class traversing a 'for' loop body to check for modifications to a loop's
+    mutable iterable.
+    """
+
+    # https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types
+    MUTATING_FUNCTIONS = (
+        "append",
+        "sort",
+        "reverse",
+        "remove",
+        "clear",
+        "extend",
+        "insert",
+        "pop",
+        "popitem",
+    )
+
+    def __init__(self, name, bugbear):
+        """
+        Constructor
+
+        @param name name of the iterator
+        @type str
+        @param bugbear reference to the bugbear visitor
+        @type BugBearVisitor
+        """
+        self.__name = name
+        self.__bb = bugbear
+        self.mutations = []
+
+    def visit_Delete(self, node):
+        """
+        Public method handling 'Delete' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.Delete
+        """
+        for target in node.targets:
+            if isinstance(target, ast.Subscript):
+                name = self.__bb.toNameStr(target.value)
+            elif isinstance(target, (ast.Attribute, ast.Name)):
+                name = self.__bb.toNameStr(target)
+            else:
+                name = ""  # fallback
+                self.generic_visit(target)
+
+            if name == self.__name:
+                self.mutations.append(node)
+
+    def visit_Call(self, node):
+        """
+        Public method handling 'Call' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        if isinstance(node.func, ast.Attribute):
+            name = self.__bb.toNameStr(node.func.value)
+            functionObject = name
+            functionName = node.func.attr
+
+            if (
+                functionObject == self.__name
+                and functionName in self.MUTATING_FUNCTIONS
+            ):
+                self.mutations.append(node)
+
+        self.generic_visit(node)
+
+    def visit(self, node):
+        """
+        Public method to inspect an ast node.
+
+        Like super-visit but supports iteration over lists.
+
+        @param node AST node to be traversed
+        @type TYPE
+        @return reference to the last processed node
+        @rtype ast.Node
+        """
+        if not isinstance(node, list):
+            return super().visit(node)
+
+        for elem in node:
+            super().visit(elem)
+        return node
+
+
+class NamedExprFinder(ast.NodeVisitor):
+    """
+    Class to extract names defined through an ast.NamedExpr.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.__names = {}
+
+    def visit_NamedExpr(self, node: ast.NamedExpr):
+        """
+        Public method handling 'NamedExpr' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.NamedExpr
+        """
+        self.__names.setdefault(node.target.id, []).append(node.target)
+
+        self.generic_visit(node)
+
+    def visit(self, node):
+        """
+        Public method to traverse a given AST node.
+
+        Like super-visit but supports iteration over lists.
+
+        @param node AST node to be traversed
+        @type TYPE
+        @return reference to the last processed node
+        @rtype ast.Node
+        """
+        if not isinstance(node, list):
+            super().visit(node)
+
+        for elem in node:
+            super().visit(elem)
+
+        return node
+
+    def getNames(self):
+        """
+        Public method to return the extracted names and Name nodes.
+
+        @return dictionary containing the names as keys and the list of nodes
+        @rtype dict
+        """
+        return self.__names
+
+
+class ExceptBaseExceptionVisitor(ast.NodeVisitor):
+    """
+    Class to determine, if a 'BaseException' is re-raised.
+    """
+
+    def __init__(self, exceptNode):
+        """
+        Constructor
+
+        @param exceptNode exception node to be inspected
+        @type ast.ExceptHandler
+        """
+        super().__init__()
+        self.__root = exceptNode
+        self.__reRaised = False
+
+    def reRaised(self) -> bool:
+        """
+        Public method to check, if the exception is re-raised.
+
+        @return flag indicating a re-raised exception
+        @rtype bool
+        """
+        self.visit(self.__root)
+        return self.__reRaised
+
+    def visit_Raise(self, node):
+        """
+        Public method to handle 'Raise' nodes.
+
+        If we find a corresponding `raise` or `raise e` where e was from
+        `except BaseException as e:` then we mark re_raised as True and can
+        stop scanning.
+
+        @param node reference to the node to be processed
+        @type ast.Raise
+        """
+        if node.exc is None or (
+            isinstance(node.exc, ast.Name) and node.exc.id == self.__root.name
+        ):
+            self.__reRaised = True
+            return
+
+        super().generic_visit(node)
+
+    def visit_ExceptHandler(self, node: ast.ExceptHandler):
+        """
+        Public method to handle 'ExceptHandler' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.ExceptHandler
+        """
+        if node is not self.__root:
+            return  # entered a nested except - stop searching
+
+        super().generic_visit(node)
+
+
+class FunctionDefDefaultsVisitor(ast.NodeVisitor):
+    """
+    Class used by M506, M508 and M539.
+    """
+
+    def __init__(
+        self,
+        errorCodeCalls,  # M506 or M539
+        errorCodeLiterals,  # M508 or M539
+    ):
+        """
+        Constructor
+
+        @param errorCodeCalls error code for ast.Call nodes
+        @type str
+        @param errorCodeLiterals error code for literal nodes
+        @type str
+        """
+        self.__errorCodeCalls = errorCodeCalls
+        self.__errorCodeLiterals = errorCodeLiterals
+        for nodeType in BugbearMutableLiterals + BugbearMutableComprehensions:
+            setattr(
+                self, f"visit_{nodeType}", self.__visitMutableLiteralOrComprehension
+            )
+        self.errors = []
+        self.__argDepth = 0
+
+        super().__init__()
+
+    def __visitMutableLiteralOrComprehension(self, node):
+        """
+        Private method to flag mutable literals and comprehensions.
+
+        @param node AST node to be processed
+        @type ast.Dict, ast.List, ast.Set, ast.ListComp, ast.DictComp or ast.SetComp
+        """
+        # Flag M506 if mutable literal/comprehension is not nested.
+        # We only flag these at the top level of the expression as we
+        # cannot easily guarantee that nested mutable structures are not
+        # made immutable by outer operations, so we prefer no false positives.
+        # e.g.
+        # >>> def this_is_fine(a=frozenset({"a", "b", "c"})): ...
+        #
+        # >>> def this_is_not_fine_but_hard_to_detect(a=(lambda x: x)([1, 2, 3]))
+        #
+        # We do still search for cases of B008 within mutable structures though.
+        if self.__argDepth == 1:
+            self.errors.append((node, self.__errorCodeCalls))
+
+        # Check for nested functions.
+        self.generic_visit(node)
+
+    def visit_Call(self, node):
+        """
+        Public method to process Call nodes.
+
+        @param node AST node to be processed
+        @type ast.Call
+        """
+        callPath = ".".join(composeCallPath(node.func))
+        if callPath in BugbearMutableCalls:
+            self.errors.append((node, self.__errorCodeCalls))
+            self.generic_visit(node)
+            return
+
+        if callPath in BugbearImmutableCalls:
+            self.generic_visit(node)
+            return
+
+        # Check if function call is actually a float infinity/NaN literal
+        if callPath == "float" and len(node.args) == 1:
+            try:
+                value = float(ast.literal_eval(node.args[0]))
+            except Exception:  # secok
+                pass
+            else:
+                if math.isfinite(value):
+                    self.errors.append((node, self.__errorCodeLiterals))
+        else:
+            self.errors.append((node, self.__errorCodeLiterals))
+
+        # Check for nested functions.
+        self.generic_visit(node)
+
+    def visit_Lambda(self, node):
+        """
+        Public method to process Lambda nodes.
+
+        @param node AST node to be processed
+        @type ast.Lambda
+        """
+        # Don't recurse into lambda expressions
+        # as they are evaluated at call time.
+        pass
+
+    def visit(self, node):
+        """
+        Public method to traverse an AST node or a list of AST nodes.
+
+        This is an extended method that can also handle a list of AST nodes.
+
+        @param node AST node or list of AST nodes to be processed
+        @type ast.AST or list of ast.AST
+        """
+        self.__argDepth += 1
+        if isinstance(node, list):
+            for elem in node:
+                if elem is not None:
+                    super().visit(elem)
+        else:
+            super().visit(node)
+        self.__argDepth -= 1
+
+
+class NameFinder(ast.NodeVisitor):
+    """
+    Class to extract a name out of a tree of nodes.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.__names = {}
+
+    def visit_Name(self, node):
+        """
+        Public method to handle 'Name' nodes.
+
+        @param node reference to the node to be processed
+        @type ast.Name
+        """
+        self.__names.setdefault(node.id, []).append(node)
+
+    def visit(self, node):
+        """
+        Public method to traverse a given AST node.
+
+        @param node AST node to be traversed
+        @type ast.Node
+        @return reference to the last processed node
+        @rtype ast.Node
+        """
+        if isinstance(node, list):
+            for elem in node:
+                super().visit(elem)
+            return node
+        else:
+            return super().visit(node)
+
+    def getNames(self):
+        """
+        Public method to return the extracted names and Name nodes.
+
+        @return dictionary containing the names as keys and the list of nodes
+        @rtype dict
+        """
+        return self.__names
+
+
+class M520NameFinder(NameFinder):
+    """
+    Class to extract a name out of a tree of nodes ignoring names defined within the
+    local scope of a comprehension.
+    """
+
+    def visit_GeneratorExp(self, node):
+        """
+        Public method to handle a generator expressions.
+
+        @param node reference to the node to be processed
+        @type ast.GeneratorExp
+        """
+        self.visit(node.generators)
+
+    def visit_ListComp(self, node):
+        """
+        Public method  to handle a list comprehension.
+
+        @param node reference to the node to be processed
+        @type TYPE
+        """
+        self.visit(node.generators)
+
+    def visit_DictComp(self, node):
+        """
+        Public method  to handle a dictionary comprehension.
+
+        @param node reference to the node to be processed
+        @type TYPE
+        """
+        self.visit(node.generators)
+
+    def visit_comprehension(self, node):
+        """
+        Public method  to handle the 'for' of a comprehension.
+
+        @param node reference to the node to be processed
+        @type ast.comprehension
+        """
+        self.visit(node.iter)
+
+    def visit_Lambda(self, node):
+        """
+        Public method  to handle a Lambda function.
+
+        @param node reference to the node to be processed
+        @type ast.Lambda
+        """
+        self.visit(node.body)
+        for lambdaArg in node.args.args:
+            self.getNames().pop(lambdaArg.arg, None)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/DateTimeVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,218 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a node visitor to check datetime function calls.
+"""
+
+import ast
+
+import AstUtilities
+
+
+class DateTimeVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check datetime function calls.
+
+    Note: This class is modeled after flake8_datetimez v20.10.0 checker.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.violations = []
+
+    def __getFromKeywords(self, keywords, name):
+        """
+        Private method to get a keyword node given its name.
+
+        @param keywords list of keyword argument nodes
+        @type list of ast.AST
+        @param name name of the keyword node
+        @type str
+        @return keyword node
+        @rtype ast.AST
+        """
+        for keyword in keywords:
+            if keyword.arg == name:
+                return keyword
+
+        return None
+
+    def visit_Call(self, node):
+        """
+        Public method to handle a function call.
+
+        Every datetime related function call is check for use of the naive
+        variant (i.e. use without TZ info).
+
+        @param node reference to the node to be processed
+        @type ast.Call
+        """
+        # datetime.something()
+        isDateTimeClass = (
+            isinstance(node.func, ast.Attribute)
+            and isinstance(node.func.value, ast.Name)
+            and node.func.value.id == "datetime"
+        )
+
+        # datetime.datetime.something()
+        isDateTimeModuleAndClass = (
+            isinstance(node.func, ast.Attribute)
+            and isinstance(node.func.value, ast.Attribute)
+            and node.func.value.attr == "datetime"
+            and isinstance(node.func.value.value, ast.Name)
+            and node.func.value.value.id == "datetime"
+        )
+
+        if isDateTimeClass:
+            if node.func.attr == "datetime":
+                # datetime.datetime(2000, 1, 1, 0, 0, 0, 0,
+                #                   datetime.timezone.utc)
+                isCase1 = len(node.args) >= 8 and not (
+                    AstUtilities.isNameConstant(node.args[7])
+                    and AstUtilities.getValue(node.args[7]) is None
+                )
+
+                # datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
+                tzinfoKeyword = self.__getFromKeywords(node.keywords, "tzinfo")
+                isCase2 = tzinfoKeyword is not None and not (
+                    AstUtilities.isNameConstant(tzinfoKeyword.value)
+                    and AstUtilities.getValue(tzinfoKeyword.value) is None
+                )
+
+                if not (isCase1 or isCase2):
+                    self.violations.append((node, "M-301"))
+
+            elif node.func.attr == "time":
+                # time(12, 10, 45, 0, datetime.timezone.utc)
+                isCase1 = len(node.args) >= 5 and not (
+                    AstUtilities.isNameConstant(node.args[4])
+                    and AstUtilities.getValue(node.args[4]) is None
+                )
+
+                # datetime.time(12, 10, 45, tzinfo=datetime.timezone.utc)
+                tzinfoKeyword = self.__getFromKeywords(node.keywords, "tzinfo")
+                isCase2 = tzinfoKeyword is not None and not (
+                    AstUtilities.isNameConstant(tzinfoKeyword.value)
+                    and AstUtilities.getValue(tzinfoKeyword.value) is None
+                )
+
+                if not (isCase1 or isCase2):
+                    self.violations.append((node, "M-321"))
+
+            elif node.func.attr == "date":
+                self.violations.append((node, "M-311"))
+
+        if isDateTimeClass or isDateTimeModuleAndClass:
+            if node.func.attr == "today":
+                self.violations.append((node, "M-302"))
+
+            elif node.func.attr == "utcnow":
+                self.violations.append((node, "M-303"))
+
+            elif node.func.attr == "utcfromtimestamp":
+                self.violations.append((node, "M-304"))
+
+            elif node.func.attr in "now":
+                # datetime.now(UTC)
+                isCase1 = (
+                    len(node.args) == 1
+                    and len(node.keywords) == 0
+                    and not (
+                        AstUtilities.isNameConstant(node.args[0])
+                        and AstUtilities.getValue(node.args[0]) is None
+                    )
+                )
+
+                # datetime.now(tz=UTC)
+                tzKeyword = self.__getFromKeywords(node.keywords, "tz")
+                isCase2 = tzKeyword is not None and not (
+                    AstUtilities.isNameConstant(tzKeyword.value)
+                    and AstUtilities.getValue(tzKeyword.value) is None
+                )
+
+                if not (isCase1 or isCase2):
+                    self.violations.append((node, "M-305"))
+
+            elif node.func.attr == "fromtimestamp":
+                # datetime.fromtimestamp(1234, UTC)
+                isCase1 = (
+                    len(node.args) == 2
+                    and len(node.keywords) == 0
+                    and not (
+                        AstUtilities.isNameConstant(node.args[1])
+                        and AstUtilities.getValue(node.args[1]) is None
+                    )
+                )
+
+                # datetime.fromtimestamp(1234, tz=UTC)
+                tzKeyword = self.__getFromKeywords(node.keywords, "tz")
+                isCase2 = tzKeyword is not None and not (
+                    AstUtilities.isNameConstant(tzKeyword.value)
+                    and AstUtilities.getValue(tzKeyword.value) is None
+                )
+
+                if not (isCase1 or isCase2):
+                    self.violations.append((node, "M-306"))
+
+            elif node.func.attr == "strptime":
+                # datetime.strptime(...).replace(tzinfo=UTC)
+                parent = getattr(node, "_dtCheckerParent", None)
+                pparent = getattr(parent, "_dtCheckerParent", None)
+                if not (
+                    isinstance(parent, ast.Attribute) and parent.attr == "replace"
+                ) or not isinstance(pparent, ast.Call):
+                    isCase1 = False
+                else:
+                    tzinfoKeyword = self.__getFromKeywords(pparent.keywords, "tzinfo")
+                    isCase1 = tzinfoKeyword is not None and not (
+                        AstUtilities.isNameConstant(tzinfoKeyword.value)
+                        and AstUtilities.getValue(tzinfoKeyword.value) is None
+                    )
+
+                if not isCase1:
+                    self.violations.append((node, "M-307"))
+
+            elif node.func.attr == "fromordinal":
+                self.violations.append((node, "M-308"))
+
+        # date.something()
+        isDateClass = (
+            isinstance(node.func, ast.Attribute)
+            and isinstance(node.func.value, ast.Name)
+            and node.func.value.id == "date"
+        )
+
+        # datetime.date.something()
+        isDateModuleAndClass = (
+            isinstance(node.func, ast.Attribute)
+            and isinstance(node.func.value, ast.Attribute)
+            and node.func.value.attr == "date"
+            and isinstance(node.func.value.value, ast.Name)
+            and node.func.value.value.id == "datetime"
+        )
+
+        if isDateClass or isDateModuleAndClass:
+            if node.func.attr == "today":
+                self.violations.append((node, "M-312"))
+
+            elif node.func.attr == "fromtimestamp":
+                self.violations.append((node, "M-313"))
+
+            elif node.func.attr == "fromordinal":
+                self.violations.append((node, "M-314"))
+
+            elif node.func.attr == "fromisoformat":
+                self.violations.append((node, "M-315"))
+
+        self.generic_visit(node)
+
+
+#
+# eflag: noqa = M-891
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/DefaultMatchCaseVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,121 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a node visitor to check default match cases.
+"""
+
+import ast
+
+
+class DefaultMatchCaseVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check default match cases.
+
+    Note: This class is modeled after flake8-spm v0.0.1.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.violations = []
+
+    def visit_Match(self, node):
+        """
+        Public method to handle Match nodes.
+
+        @param node reference to the node to be processed
+        @type ast.Match
+        """
+        for badNode, issueCode in self.__badNodes(node):
+            self.violations.append((badNode, issueCode))
+
+        self.generic_visit(node)
+
+    def __badNodes(self, node):
+        """
+        Private method to yield bad match nodes.
+
+        @param node reference to the node to be processed
+        @type ast.Match
+        @yield tuple containing a reference to bad match case node and the corresponding
+            issue code
+        @ytype tyuple of (ast.AST, str)
+        """
+        for case in node.cases:
+            if self.__emptyMatchDefault(case):
+                if self.__lastStatementDoesNotRaise(case):
+                    yield self.__findBadNode(case), "M-901"
+                elif self.__returnPrecedesExceptionRaising(case):
+                    yield self.__findBadNode(case), "M-902"
+
+    def __emptyMatchDefault(self, case):
+        """
+        Private method to check for an empty default match case.
+
+        @param case reference to the node to be processed
+        @type ast.match_case
+        @return flag indicating an empty default match case
+        @rtype bool
+        """
+        pattern = case.pattern
+        return isinstance(pattern, ast.MatchAs) and (
+            pattern.pattern is None
+            or (
+                isinstance(pattern.pattern, ast.MatchAs)
+                and pattern.pattern.pattern is None
+            )
+        )
+
+    def __lastStatementDoesNotRaise(self, case):
+        """
+        Private method to check that the last case statement does not raise an
+        exception.
+
+        @param case reference to the node to be processed
+        @type ast.match_case
+        @return flag indicating that the last case statement does not raise an
+            exception
+        @rtype bool
+        """
+        return not isinstance(case.body[-1], ast.Raise)
+
+    def __returnPrecedesExceptionRaising(self, case):
+        """
+        Private method to check that no return precedes an exception raising.
+
+        @param case reference to the node to be processed
+        @type ast.match_case
+        @return flag indicating that a return precedes an exception raising
+        @rtype bool
+        """
+        returnIndex = -1
+        raiseIndex = -1
+        for index, body in enumerate(case.body):
+            if isinstance(body, ast.Return):
+                returnIndex = index
+            elif isinstance(body, ast.Raise):
+                raiseIndex = index
+        return returnIndex >= 0 and returnIndex < raiseIndex
+
+    def __findBadNode(self, case) -> ast.AST:
+        """
+        Private method returning a reference to the bad node of a case node.
+
+        @param case reference to the node to be processed
+        @type ast.match_case
+        @return reference to the bad node
+        @rtype ast.AST
+        """
+        for body in case.body:
+            # Handle special case when return precedes exception raising.
+            # In this case the bad node is that with the return statement.
+            if isinstance(body, ast.Return):
+                return body
+
+        return case.body[-1]
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,14 +12,10 @@
 import contextlib
 import copy
 import itertools
-import math
 import re
 import sys
 import tokenize
 
-from collections import defaultdict, namedtuple
-from dataclasses import dataclass
-from keyword import iskeyword
 from string import Formatter
 
 try:
@@ -37,216 +33,182 @@
 
 import AstUtilities
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
+
+from .BugBearVisitor import BugBearVisitor
+from .DateTimeVisitor import DateTimeVisitor
+from .DefaultMatchCaseVisitor import DefaultMatchCaseVisitor
 from .eradicate import Eradicator
 from .MiscellaneousDefaults import MiscellaneousCheckerDefaultArgs
-
-BugbearMutableLiterals = ("Dict", "List", "Set")
-BugbearMutableComprehensions = ("ListComp", "DictComp", "SetComp")
-BugbearMutableCalls = (
-    "Counter",
-    "OrderedDict",
-    "collections.Counter",
-    "collections.OrderedDict",
-    "collections.defaultdict",
-    "collections.deque",
-    "defaultdict",
-    "deque",
-    "dict",
-    "list",
-    "set",
-)
-BugbearImmutableCalls = (
-    "tuple",
-    "frozenset",
-    "types.MappingProxyType",
-    "MappingProxyType",
-    "re.compile",
-    "operator.attrgetter",
-    "operator.itemgetter",
-    "operator.methodcaller",
-    "attrgetter",
-    "itemgetter",
-    "methodcaller",
-)
+from .ReturnVisitor import ReturnVisitor
+from .SysVersionVisitor import SysVersionVisitor
+from .TextVisitor import TextVisitor
 
 
-def composeCallPath(node):
-    """
-    Generator function to assemble the call path of a given node.
-
-    @param node node to assemble call path for
-    @type ast.Node
-    @yield call path components
-    @ytype str
-    """
-    if isinstance(node, ast.Attribute):
-        yield from composeCallPath(node.value)
-        yield node.attr
-    elif isinstance(node, ast.Call):
-        yield from composeCallPath(node.func)
-    elif isinstance(node, ast.Name):
-        yield node.id
-
-
-class MiscellaneousChecker:
+class MiscellaneousChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for miscellaneous checks.
     """
 
     Codes = [
         ## Coding line
-        "M101",
-        "M102",
+        "M-101",
+        "M-102",
         ## Copyright
-        "M111",
-        "M112",
+        "M-111",
+        "M-112",
         ## Shadowed Builtins
-        "M131",
-        "M132",
+        "M-131",
+        "M-132",
         ## Comprehensions
-        "M180",
-        "M181",
-        "M182",
-        "M183",
-        "M184",
-        "M185",
-        "M186",
-        "M188",
-        "M189",
-        "M189a",
-        "M189b",
-        "M190",
-        "M190a",
-        "M190b",
-        "M191",
-        "M193",
-        "M193a",
-        "M193b",
-        "M193c",
-        "M194",
-        "M195",
-        "M196",
-        "M197",
-        "M198",
-        "M199",
-        "M200",
+        "M-180",
+        "M-181",
+        "M-182",
+        "M-183",
+        "M-184",
+        "M-185",
+        "M-186",
+        "M-188",
+        "M-189",
+        "M-189a",
+        "M-189b",
+        "M-190",
+        "M-190a",
+        "M-190b",
+        "M-191",
+        "M-193",
+        "M-193a",
+        "M-193b",
+        "M-193c",
+        "M-194",
+        "M-195",
+        "M-196",
+        "M-197",
+        "M-198",
+        "M-199",
+        "M-200",
         ## Dictionaries with sorted keys
-        "M251",
+        "M-251",
         ## Property
-        "M260",
-        "M261",
-        "M262",
-        "M263",
-        "M264",
-        "M265",
-        "M266",
-        "M267",
+        "M-260",
+        "M-261",
+        "M-262",
+        "M-263",
+        "M-264",
+        "M-265",
+        "M-266",
+        "M-267",
         ## Naive datetime usage
-        "M301",
-        "M302",
-        "M303",
-        "M304",
-        "M305",
-        "M306",
-        "M307",
-        "M308",
-        "M311",
-        "M312",
-        "M313",
-        "M314",
-        "M315",
-        "M321",
+        "M-301",
+        "M-302",
+        "M-303",
+        "M-304",
+        "M-305",
+        "M-306",
+        "M-307",
+        "M-308",
+        "M-311",
+        "M-312",
+        "M-313",
+        "M-314",
+        "M-315",
+        "M-321",
         ## sys.version and sys.version_info usage
-        "M401",
-        "M402",
-        "M403",
-        "M411",
-        "M412",
-        "M413",
-        "M414",
-        "M421",
-        "M422",
-        "M423",
+        "M-401",
+        "M-402",
+        "M-403",
+        "M-411",
+        "M-412",
+        "M-413",
+        "M-414",
+        "M-421",
+        "M-422",
+        "M-423",
         ## Bugbear
-        "M501",
-        "M502",
-        "M503",
-        "M504",
-        "M505",
-        "M506",
-        "M507",
-        "M508",
-        "M509",
-        "M510",
-        "M511",
-        "M512",
-        "M513",
-        "M514",
-        "M515",
-        "M516",
-        "M517",
-        "M518",
-        "M519",
-        "M520",
-        "M521",
-        "M522",
-        "M523",
-        "M524",
-        "M525",
-        "M526",
-        "M527",
-        "M528",
-        "M529",
-        "M530",
-        "M531",
-        "M532",
-        "M533",
-        "M534",
-        "M535",
-        "M536",
-        "M537",
-        "M539",
-        "M540",
+        "M-501",
+        "M-502",
+        "M-503",
+        "M-504",
+        "M-505",
+        "M-506",
+        "M-507",
+        "M-508",
+        "M-509",
+        "M-510",
+        "M-511",
+        "M-512",
+        "M-513",
+        "M-514",
+        "M-515",
+        "M-516",
+        "M-517",
+        "M-518",
+        "M-519",
+        "M-520",
+        "M-521",
+        "M-522",
+        "M-523",
+        "M-524",
+        "M-525",
+        "M-526",
+        "M-527",
+        "M-528",
+        "M-529",
+        "M-530",
+        "M-531",
+        "M-532",
+        "M-533",
+        "M-534",
+        "M-535",
+        "M-536",
+        "M-537",
+        "M-539",
+        "M-540",
+        "M-541",
         ## Bugbear, opininonated
-        "M569",
+        "M-569",
         ## Bugbear++
-        "M581",
-        "M582",
+        "M-581",
+        "M-582",
         ## Format Strings
-        "M601",
-        "M611",
-        "M612",
-        "M613",
-        "M621",
-        "M622",
-        "M623",
-        "M624",
-        "M625",
-        "M631",
-        "M632",
+        "M-601",
+        "M-611",
+        "M-612",
+        "M-613",
+        "M-621",
+        "M-622",
+        "M-623",
+        "M-624",
+        "M-625",
+        "M-631",
+        "M-632",
         ## Future statements
-        "M701",
-        "M702",
+        "M-701",
+        "M-702",
         ## Gettext
-        "M711",
+        "M-711",
         ## print() statements
-        "M801",
+        "M-801",
         ## one element tuple
-        "M811",
-        ## return statements
-        "M831",
-        "M832",
-        "M833",
-        "M834",
+        "M-811",
+        ## return statements  # noqa: M-891
+        "M-831",
+        "M-832",
+        "M-833",
+        "M-834",
         ## line continuation
-        "M841",
+        "M-841",
         ## implicitly concatenated strings
-        "M851",
-        "M852",
-        "M853",
+        "M-851",
+        "M-852",
+        "M-853",
         ## commented code
-        "M891",
+        "M-891",
+        ## structural pattern matching
+        "M-901",
+        "M-902",
     ]
+    Category = "M"
 
     Formatter = Formatter()
     FormatFieldRegex = re.compile(r"^((?:\s|.)*?)(\..*|\[.*\])?$")
@@ -278,16 +240,19 @@
         @param args dictionary of arguments for the miscellaneous checks
         @type dict
         """
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
+        super().__init__(
+            MiscellaneousChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
-        linesIterator = iter(self.__source)
+        linesIterator = iter(self.source)
         self.__tokens = list(tokenize.generate_tokens(lambda: next(linesIterator)))
 
         self.__pep3101FormatRegex = re.compile(
@@ -298,162 +263,168 @@
 
         self.__eradicator = Eradicator()
 
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
-
         checkersWithCodes = [
-            (self.__checkCoding, ("M101", "M102")),
-            (self.__checkCopyright, ("M111", "M112")),
-            (self.__checkBuiltins, ("M131", "M132")),
+            (self.__checkCoding, ("M-101", "M-102")),
+            (self.__checkCopyright, ("M-111", "M-112")),
+            (self.__checkBuiltins, ("M-131", "M-132")),
             (
                 self.__checkComprehensions,
                 (
-                    "M180",
-                    "M181",
-                    "M182",
-                    "M183",
-                    "M184",
-                    "M185",
-                    "M186",
-                    "M188",
-                    "M189",
-                    "M189a",
-                    "M189b",
-                    "M190",
-                    "M190a",
-                    "M190b",
-                    "M191",
-                    "M193",
-                    "M193a",
-                    "M193b",
-                    "M193c",
-                    "M194",
-                    "M195",
-                    "M196",
-                    "M197",
-                    "M198",
-                    "M199",
-                    "M200",
+                    "M-180",
+                    "M-181",
+                    "M-182",
+                    "M-183",
+                    "M-184",
+                    "M-185",
+                    "M-186",
+                    "M-188",
+                    "M-189",
+                    "M-189a",
+                    "M-189b",
+                    "M-190",
+                    "M-190a",
+                    "M-190b",
+                    "M-191",
+                    "M-193",
+                    "M-193a",
+                    "M-193b",
+                    "M-193c",
+                    "M-194",
+                    "M-195",
+                    "M-196",
+                    "M-197",
+                    "M-198",
+                    "M-199",
+                    "M-200",
                 ),
             ),
-            (self.__checkDictWithSortedKeys, ("M251",)),
+            (self.__checkDictWithSortedKeys, ("M-251",)),
             (
                 self.__checkProperties,
-                ("M260", "M261", "M262", "M263", "M264", "M265", "M266", "M267"),
+                (
+                    "M-260",
+                    "M-261",
+                    "M-262",
+                    "M-263",
+                    "M-264",
+                    "M-265",
+                    "M-266",
+                    "M-267",
+                ),
             ),
             (
                 self.__checkDateTime,
                 (
-                    "M301",
-                    "M302",
-                    "M303",
-                    "M304",
-                    "M305",
-                    "M306",
-                    "M307",
-                    "M308",
-                    "M311",
-                    "M312",
-                    "M313",
-                    "M314",
-                    "M315",
-                    "M321",
+                    "M-301",
+                    "M-302",
+                    "M-303",
+                    "M-304",
+                    "M-305",
+                    "M-306",
+                    "M-307",
+                    "M-308",
+                    "M-311",
+                    "M-312",
+                    "M-313",
+                    "M-314",
+                    "M-315",
+                    "M-321",
                 ),
             ),
             (
                 self.__checkSysVersion,
                 (
-                    "M401",
-                    "M402",
-                    "M403",
-                    "M411",
-                    "M412",
-                    "M413",
-                    "M414",
-                    "M421",
-                    "M422",
-                    "M423",
+                    "M-401",
+                    "M-402",
+                    "M-403",
+                    "M-411",
+                    "M-412",
+                    "M-413",
+                    "M-414",
+                    "M-421",
+                    "M-422",
+                    "M-423",
                 ),
             ),
             (
                 self.__checkBugBear,
                 (
-                    "M501",
-                    "M502",
-                    "M503",
-                    "M504",
-                    "M505",
-                    "M506",
-                    "M507",
-                    "M508",
-                    "M509",
-                    "M510",
-                    "M511",
-                    "M512",
-                    "M513",
-                    "M514",
-                    "M515",
-                    "M516",
-                    "M517",
-                    "M518",
-                    "M519",
-                    "M520",
-                    "M521",
-                    "M522",
-                    "M523",
-                    "M524",
-                    "M525",
-                    "M526",
-                    "M527",
-                    "M528",
-                    "M529",
-                    "M530",
-                    "M531",
-                    "M532",
-                    "M533",
-                    "M534",
-                    "M535",
-                    "M536",
-                    "M537",
-                    "M539",
-                    "M540",
-                    "M569",
-                    "M581",
-                    "M582",
+                    "M-501",
+                    "M-502",
+                    "M-503",
+                    "M-504",
+                    "M-505",
+                    "M-506",
+                    "M-507",
+                    "M-508",
+                    "M-509",
+                    "M-510",
+                    "M-511",
+                    "M-512",
+                    "M-513",
+                    "M-514",
+                    "M-515",
+                    "M-516",
+                    "M-517",
+                    "M-518",
+                    "M-519",
+                    "M-520",
+                    "M-521",
+                    "M-522",
+                    "M-523",
+                    "M-524",
+                    "M-525",
+                    "M-526",
+                    "M-527",
+                    "M-528",
+                    "M-529",
+                    "M-530",
+                    "M-531",
+                    "M-532",
+                    "M-533",
+                    "M-534",
+                    "M-535",
+                    "M-536",
+                    "M-537",
+                    "M-539",
+                    "M-540",
+                    "M-541",
+                    "M-569",
+                    "M-581",
+                    "M-582",
                 ),
             ),
-            (self.__checkPep3101, ("M601",)),
+            (self.__checkPep3101, ("M-601",)),
             (
                 self.__checkFormatString,
                 (
-                    "M611",
-                    "M612",
-                    "M613",
-                    "M621",
-                    "M622",
-                    "M623",
-                    "M624",
-                    "M625",
-                    "M631",
-                    "M632",
+                    "M-611",
+                    "M-612",
+                    "M-613",
+                    "M-621",
+                    "M-622",
+                    "M-623",
+                    "M-624",
+                    "M-625",
+                    "M-631",
+                    "M-632",
                 ),
             ),
-            (self.__checkFuture, ("M701", "M702")),
-            (self.__checkGettext, ("M711",)),
-            (self.__checkPrintStatements, ("M801",)),
-            (self.__checkTuple, ("M811",)),
-            (self.__checkReturn, ("M831", "M832", "M833", "M834")),
-            (self.__checkLineContinuation, ("M841",)),
-            (self.__checkImplicitStringConcat, ("M851", "M852")),
-            (self.__checkExplicitStringConcat, ("M853",)),
-            (self.__checkCommentedCode, ("M891",)),
+            (self.__checkFuture, ("M-701", "M-702")),
+            (self.__checkGettext, ("M-711",)),
+            (self.__checkPrintStatements, ("M-801",)),
+            (self.__checkTuple, ("M-811",)),
+            (self.__checkReturn, ("M-831", "M-832", "M-833", "M-834")),
+            (self.__checkLineContinuation, ("M-841",)),
+            (self.__checkImplicitStringConcat, ("M-851", "M-852")),
+            (self.__checkExplicitStringConcat, ("M-853",)),
+            (self.__checkCommentedCode, ("M-891",)),
+            (self.__checkDefaultMatchCase, ("M-901", "M-902")),
         ]
+        self._initializeCheckers(checkersWithCodes)
 
         # the eradicate whitelist
-        commentedCodeCheckerArgs = self.__args.get(
+        commentedCodeCheckerArgs = self.args.get(
             "CommentedCodeChecker",
             MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"],
         )
@@ -465,75 +436,6 @@
             commentedCodeCheckerWhitelist, extend_default=False
         )
 
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against miscellaneous
-        conditions.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
-
     def __getCoding(self):
         """
         Private method to get the defined coding of the source.
@@ -541,7 +443,7 @@
         @return tuple containing the line number and the coding
         @rtype tuple of int and str
         """
-        for lineno, line in enumerate(self.__source[:5]):
+        for lineno, line in enumerate(self.source[:5], start=1):
             matched = re.search(r"coding[:=]\s*([-\w_.]+)", line, re.IGNORECASE)
             if matched:
                 return lineno, matched.group(1)
@@ -553,28 +455,28 @@
         Private method to check the presence of a coding line and valid
         encodings.
         """
-        if len(self.__source) == 0:
+        if len(self.source) == 0:
             return
 
         encodings = [
             e.lower().strip()
-            for e in self.__args.get(
+            for e in self.args.get(
                 "CodingChecker", MiscellaneousCheckerDefaultArgs["CodingChecker"]
             ).split(",")
         ]
         lineno, coding = self.__getCoding()
         if coding:
             if coding.lower() not in encodings:
-                self.__error(lineno, 0, "M102", coding)
+                self.addError(lineno, 0, "M-102", coding)
         else:
-            self.__error(0, 0, "M101")
+            self.addError(1, 0, "M-101")
 
     def __checkCopyright(self):
         """
         Private method to check the presence of a copyright statement.
         """
-        source = "".join(self.__source)
-        copyrightArgs = self.__args.get(
+        source = "".join(self.source)
+        copyrightArgs = self.args.get(
             "CopyrightChecker", MiscellaneousCheckerDefaultArgs["CopyrightChecker"]
         )
         copyrightMinFileSize = copyrightArgs.get(
@@ -595,7 +497,7 @@
 
         copyrightRe = re.compile(copyrightRegexStr.format(author=r".*"), re.IGNORECASE)
         if not copyrightRe.search(topOfSource):
-            self.__error(0, 0, "M111")
+            self.addError(1, 0, "M-111")
             return
 
         if copyrightAuthor:
@@ -603,14 +505,14 @@
                 copyrightRegexStr.format(author=copyrightAuthor), re.IGNORECASE
             )
             if not copyrightAuthorRe.search(topOfSource):
-                self.__error(0, 0, "M112")
+                self.addError(1, 0, "M-112")
 
     def __checkCommentedCode(self):
         """
         Private method to check for commented code.
         """
-        source = "".join(self.__source)
-        commentedCodeCheckerArgs = self.__args.get(
+        source = "".join(self.source)
+        commentedCodeCheckerArgs = self.args.get(
             "CommentedCodeChecker",
             MiscellaneousCheckerDefaultArgs["CommentedCodeChecker"],
         )
@@ -621,7 +523,7 @@
         for markedLine in self.__eradicator.commented_out_code_line_numbers(
             source, aggressive=aggressive
         ):
-            self.__error(markedLine - 1, 0, "M891")
+            self.addError(markedLine, 0, "M-891")
 
     def __checkLineContinuation(self):
         """
@@ -629,7 +531,7 @@
         """
         # generate source lines without comments
         comments = [tok for tok in self.__tokens if tok[0] == tokenize.COMMENT]
-        stripped = self.__source[:]
+        stripped = self.source[:]
         for comment in comments:
             lineno = comment[3][0]
             start = comment[2][1]
@@ -644,25 +546,25 @@
             if strippedLine.endswith("\\") and not strippedLine.startswith(
                 ("assert", "with")
             ):
-                self.__error(lineIndex, len(line), "M841")
+                self.addError(lineIndex + 1, len(line), "M-841")
 
     def __checkPrintStatements(self):
         """
         Private method to check for print statements.
         """
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if (
                 isinstance(node, ast.Call) and getattr(node.func, "id", None) == "print"
             ) or (hasattr(ast, "Print") and isinstance(node, ast.Print)):
-                self.__error(node.lineno - 1, node.col_offset, "M801")
+                self.addErrorFromNode(node, "M-801")
 
     def __checkTuple(self):
         """
         Private method to check for one element tuples.
         """
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if isinstance(node, ast.Tuple) and len(node.elts) == 1:
-                self.__error(node.lineno - 1, node.col_offset, "M811")
+                self.addErrorFromNode(node, "M-811")
 
     def __checkFuture(self):
         """
@@ -670,7 +572,7 @@
         """
         expectedImports = {
             i.strip()
-            for i in self.__args.get("FutureChecker", "").split(",")
+            for i in self.args.get("FutureChecker", "").split(",")
             if bool(i.strip())
         }
         if len(expectedImports) == 0:
@@ -681,7 +583,7 @@
         node = None
         hasCode = False
 
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if isinstance(node, ast.ImportFrom) and node.module == "__future__":
                 imports |= {name.name for name in node.names}
             elif isinstance(node, ast.Expr):
@@ -697,23 +599,17 @@
 
         if imports < expectedImports:
             if imports:
-                self.__error(
-                    node.lineno - 1,
-                    node.col_offset,
-                    "M701",
-                    ", ".join(expectedImports),
-                    ", ".join(imports),
+                self.addErrorFromNode(
+                    node, "M-701", ", ".join(expectedImports), ", ".join(imports)
                 )
             else:
-                self.__error(
-                    node.lineno - 1, node.col_offset, "M702", ", ".join(expectedImports)
-                )
+                self.addErrorFromNode(node, "M-702", ", ".join(expectedImports))
 
     def __checkPep3101(self):
         """
         Private method to check for old style string formatting.
         """
-        for lineno, line in enumerate(self.__source):
+        for lineno, line in enumerate(self.source, start=1):
             match = self.__pep3101FormatRegex.search(line)
             if match:
                 lineLen = len(line)
@@ -730,7 +626,7 @@
                     c = line[pos]
                 if c in "diouxXeEfFgGcrs":
                     formatter += c
-                self.__error(lineno, formatPos, "M601", formatter)
+                self.addError(lineno, formatPos, "M-601", formatter)
 
     def __checkFormatString(self):
         """
@@ -742,7 +638,7 @@
             coding = "utf-8"
 
         visitor = TextVisitor()
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
         for node in visitor.nodes:
             text = node.value
             if isinstance(text, bytes):
@@ -753,12 +649,12 @@
             fields, implicit, explicit = self.__getFields(text)
             if implicit:
                 if node in visitor.calls:
-                    self.__error(node.lineno - 1, node.col_offset, "M611")
+                    self.addErrorFromNode(node, "M-611")
                 else:
                     if node.is_docstring:
-                        self.__error(node.lineno - 1, node.col_offset, "M612")
+                        self.addErrorFromNode(node, "M-612")
                     else:
-                        self.__error(node.lineno - 1, node.col_offset, "M613")
+                        self.addErrorFromNode(node, "M-613")
 
             if node in visitor.calls:
                 call, strArgs = visitor.calls[node]
@@ -778,7 +674,7 @@
                     else:
                         names.add(fieldMatch.group(1))
 
-                keywords = {keyword.arg for keyword in call.keywords}
+                keywords = {kw.arg for kw in call.keywords}
                 numArgs = len(call.args)
                 if strArgs:
                     numArgs -= 1
@@ -796,33 +692,31 @@
                 # parameters but at least check if the args are used
                 if hasKwArgs and not names:
                     # No names but kwargs
-                    self.__error(call.lineno - 1, call.col_offset, "M623")
+                    self.addErrorFromNode(call, "M-623")
                 if hasStarArgs and not numbers:
                     # No numbers but args
-                    self.__error(call.lineno - 1, call.col_offset, "M624")
+                    self.addErrorFromNode(call, "M-624")
 
                 if not hasKwArgs and not hasStarArgs:
                     # can actually verify numbers and names
                     for number in sorted(numbers):
                         if number >= numArgs:
-                            self.__error(
-                                call.lineno - 1, call.col_offset, "M621", number
-                            )
+                            self.addErrorFromNode(call, "M-621", number)
 
                     for name in sorted(names):
                         if name not in keywords:
-                            self.__error(call.lineno - 1, call.col_offset, "M622", name)
+                            self.addErrorFromNode(call, "M-622", name)
 
                 for arg in range(numArgs):
                     if arg not in numbers:
-                        self.__error(call.lineno - 1, call.col_offset, "M631", arg)
+                        self.addErrorFromNode(call, "M-631", arg)
 
-                for keyword in keywords:
-                    if keyword not in names:
-                        self.__error(call.lineno - 1, call.col_offset, "M632", keyword)
+                for kw in keywords:
+                    if kw not in names:
+                        self.addErrorFromNode(call, "M-632", kw)
 
                 if implicit and explicit:
-                    self.__error(call.lineno - 1, call.col_offset, "M625")
+                    self.addErrorFromNode(call, "M-625")
 
     def __getFields(self, string):
         """
@@ -865,11 +759,11 @@
         with contextlib.suppress(AttributeError):
             functionDefs.append(ast.AsyncFunctionDef)
 
-        ignoreBuiltinAssignments = self.__args.get(
+        ignoreBuiltinAssignments = self.args.get(
             "BuiltinsChecker", MiscellaneousCheckerDefaultArgs["BuiltinsChecker"]
         )
 
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if isinstance(node, ast.Assign):
                 # assign statement
                 for element in node.targets:
@@ -882,51 +776,39 @@
                         ):
                             # ignore compatibility assignments
                             continue
-                        self.__error(
-                            element.lineno - 1, element.col_offset, "M131", element.id
-                        )
+                        self.addErrorFromNode(element, "M-131", element.id)
                     elif isinstance(element, (ast.Tuple, ast.List)):
                         for tupleElement in element.elts:
                             if (
                                 isinstance(tupleElement, ast.Name)
                                 and tupleElement.id in self.__builtins
                             ):
-                                self.__error(
-                                    tupleElement.lineno - 1,
-                                    tupleElement.col_offset,
-                                    "M131",
-                                    tupleElement.id,
+                                self.addErrorFromNode(
+                                    tupleElement, "M-131", tupleElement.id
                                 )
             elif isinstance(node, ast.For):
                 # for loop
                 target = node.target
                 if isinstance(target, ast.Name) and target.id in self.__builtins:
-                    self.__error(
-                        target.lineno - 1, target.col_offset, "M131", target.id
-                    )
+                    self.addErrorFromNode(target, "M-131", target.id)
                 elif isinstance(target, (ast.Tuple, ast.List)):
                     for element in target.elts:
                         if (
                             isinstance(element, ast.Name)
                             and element.id in self.__builtins
                         ):
-                            self.__error(
-                                element.lineno - 1,
-                                element.col_offset,
-                                "M131",
-                                element.id,
-                            )
+                            self.addErrorFromNode(element, "M-131", element.id)
             elif any(isinstance(node, functionDef) for functionDef in functionDefs):
                 # (asynchronous) function definition
                 for arg in node.args.args:
                     if isinstance(arg, ast.arg) and arg.arg in self.__builtins:
-                        self.__error(arg.lineno - 1, arg.col_offset, "M132", arg.arg)
+                        self.addErrorFromNode(arg, "M-132", arg.arg)
 
     def __checkComprehensions(self):
         """
         Private method to check some comprehension related things.
 
-        This method is adapted from: flake8-comprehensions v3.15.0
+        This method is adapted from: flake8-comprehensions v3.16.0
         Original: Copyright (c) 2017 Adam Johnson
         """
         compType = {
@@ -937,7 +819,7 @@
 
         visitedMapCalls = set()
 
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if isinstance(node, ast.Call) and isinstance(node.func, ast.Name):
                 numPositionalArgs = len(node.args)
                 numKeywordArgs = len(node.keywords)
@@ -948,10 +830,10 @@
                     and node.func.id in ("list", "set")
                 ):
                     errorCode = {
-                        "list": "M180",
-                        "set": "M181",
+                        "list": "M-180",
+                        "set": "M-181",
                     }[node.func.id]
-                    self.__error(node.lineno - 1, node.col_offset, errorCode)
+                    self.addErrorFromNode(node, errorCode)
 
                 elif (
                     numPositionalArgs == 1
@@ -962,10 +844,10 @@
                     and len(node.args[0].elt.elts) == 2
                 ):
                     if isinstance(node.args[0], ast.GeneratorExp):
-                        errorCode = "M182"
+                        errorCode = "M-182"
                     else:
-                        errorCode = "M184"
-                    self.__error(node.lineno - 1, node.col_offset, errorCode)
+                        errorCode = "M-184"
+                    self.addErrorFromNode(node, errorCode)
 
                 elif (
                     numPositionalArgs == 1
@@ -973,14 +855,12 @@
                     and node.func.id in ("list", "set", "any", "all")
                 ):
                     errorCode = {
-                        "list": "M191",
-                        "set": "M183",
-                        "any": "M199",
-                        "all": "M199",
+                        "list": "M-191",
+                        "set": "M-183",
+                        "any": "M-199",
+                        "all": "M-199",
                     }[node.func.id]
-                    self.__error(
-                        node.lineno - 1, node.col_offset, errorCode, node.func.id
-                    )
+                    self.addErrorFromNode(node, errorCode, node.func.id)
 
                 elif numPositionalArgs == 1 and (
                     isinstance(node.args[0], ast.Tuple)
@@ -989,12 +869,11 @@
                     and node.func.id == "list"
                 ):
                     errorCode = {
-                        "tuple": "M189a",
-                        "list": "M190a",
+                        "tuple": "M-189a",
+                        "list": "M-190a",
                     }[node.func.id]
-                    self.__error(
-                        node.lineno - 1,
-                        node.col_offset,
+                    self.addErrorFromNode(
+                        node,
                         errorCode,
                         type(node.args[0]).__name__.lower(),
                         node.func.id,
@@ -1010,12 +889,7 @@
                         type_ = "dict"
                     else:
                         type_ = "dict comprehension"
-                    self.__error(
-                        node.lineno - 1,
-                        node.col_offset,
-                        "M198",
-                        type_,
-                    )
+                    self.addErrorFromNode(node, "M-198", type_)
 
                 elif (
                     numPositionalArgs == 1
@@ -1032,14 +906,13 @@
                     )
                 ):
                     errorCode = {
-                        "tuple": "M189b",
-                        "list": "M190b",
-                        "set": "M185",
-                        "dict": "M186",
+                        "tuple": "M-189b",
+                        "list": "M-190b",
+                        "set": "M-185",
+                        "dict": "M-186",
                     }[node.func.id]
-                    self.__error(
-                        node.lineno - 1,
-                        node.col_offset,
+                    self.addErrorFromNode(
+                        node,
                         errorCode,
                         type(node.args[0]).__name__.lower(),
                         node.func.id,
@@ -1055,7 +928,7 @@
                     and numKeywordArgs == 0
                     and node.func.id in ("tuple", "list")
                 ):
-                    self.__error(node.lineno - 1, node.col_offset, "M188", node.func.id)
+                    self.addErrorFromNode(node, "M-188", node.func.id)
 
                 elif (
                     node.func.id in {"list", "reversed"}
@@ -1076,30 +949,21 @@
                             )
 
                         if reverseFlagValue is None:
-                            self.__error(
-                                node.lineno - 1,
-                                node.col_offset,
-                                "M193a",
-                                node.func.id,
-                                node.args[0].func.id,
+                            self.addErrorFromNode(
+                                node, "M-193a", node.func.id, node.args[0].func.id
                             )
                         else:
-                            self.__error(
-                                node.lineno - 1,
-                                node.col_offset,
-                                "M193b",
+                            self.addErrorFromNode(
+                                node,
+                                "M-193b",
                                 node.func.id,
                                 node.args[0].func.id,
                                 not reverseFlagValue,
                             )
 
                     else:
-                        self.__error(
-                            node.lineno - 1,
-                            node.col_offset,
-                            "M193c",
-                            node.func.id,
-                            node.args[0].func.id,
+                        self.addErrorFromNode(
+                            node, "M-193c", node.func.id, node.args[0].func.id
                         )
 
                 elif (
@@ -1119,12 +983,8 @@
                         or (node.func.id == "set" and node.args[0].func.id == "set")
                     )
                 ):
-                    self.__error(
-                        node.lineno - 1,
-                        node.col_offset,
-                        "M194",
-                        node.args[0].func.id,
-                        node.func.id,
+                    self.addErrorFromNode(
+                        node, "M-194", node.args[0].func.id, node.func.id
                     )
 
                 elif (
@@ -1139,7 +999,7 @@
                     and isinstance(node.args[0].slice.step.operand, ast.Constant)
                     and node.args[0].slice.step.operand.n == 1
                 ):
-                    self.__error(node.lineno - 1, node.col_offset, "M195", node.func.id)
+                    self.addErrorFromNode(node, "M-195", node.func.id)
 
                 elif (
                     node.func.id == "map"
@@ -1147,9 +1007,7 @@
                     and len(node.args) == 2
                     and isinstance(node.args[0], ast.Lambda)
                 ):
-                    self.__error(
-                        node.lineno - 1, node.col_offset, "M197", "generator expression"
-                    )
+                    self.addErrorFromNode(node, "M-197", "generator expression")
 
                 elif (
                     node.func.id in ("list", "set", "dict")
@@ -1177,9 +1035,7 @@
 
                     if rewriteable:
                         comprehensionType = f"{node.func.id} comprehension"
-                        self.__error(
-                            node.lineno - 1, node.col_offset, "M197", comprehensionType
-                        )
+                        self.addErrorFromNode(node, "M-197", comprehensionType)
 
             elif isinstance(node, (ast.DictComp, ast.ListComp, ast.SetComp)) and (
                 len(node.generators) == 1
@@ -1202,12 +1058,7 @@
                     and isinstance(node.generators[0].target.elts[1], ast.Name)
                     and node.generators[0].target.elts[1].id == node.value.id
                 ):
-                    self.__error(
-                        node.lineno - 1,
-                        node.col_offset,
-                        "M196",
-                        compType[node.__class__],
-                    )
+                    self.addErrorFromNode(node, "M-196", compType[node.__class__])
 
                 elif (
                     isinstance(node, ast.DictComp)
@@ -1216,12 +1067,7 @@
                     and isinstance(node.generators[0].target, ast.Name)
                     and node.key.id == node.generators[0].target.id
                 ):
-                    self.__error(
-                        node.lineno - 1,
-                        node.col_offset,
-                        "M200",
-                        compType[node.__class__],
-                    )
+                    self.addErrorFromNode(node, "M-200", compType[node.__class__])
 
     def __dictShouldBeChecked(self, node):
         """
@@ -1236,8 +1082,9 @@
             return False
 
         if (
-            "__IGNORE_WARNING__" in self.__source[node.lineno - 1]
-            or "__IGNORE_WARNING_M251__" in self.__source[node.lineno - 1]
+            "__IGNORE_WARNING__" in self.source[node.lineno - 1]
+            or "__IGNORE_WARNING_M-251__" in self.source[node.lineno - 1]
+            or "noqa: M-251" in self.source[node.lineno - 1]
         ):
             return False
 
@@ -1248,52 +1095,39 @@
         """
         Private method to check, if dictionary keys appear in sorted order.
         """
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if isinstance(node, ast.Dict) and self.__dictShouldBeChecked(node):
                 for key1, key2 in zip(node.keys, node.keys[1:]):
                     if key2.value < key1.value:
-                        self.__error(
-                            key2.lineno - 1,
-                            key2.col_offset,
-                            "M251",
-                            key2.value,
-                            key1.value,
-                        )
+                        self.addErrorFromNode(key2, "M-251", key2.value, key1.value)
 
     def __checkGettext(self):
         """
         Private method to check the 'gettext' import statement.
         """
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if isinstance(node, ast.ImportFrom) and any(
                 name.asname == "_" for name in node.names
             ):
-                self.__error(
-                    node.lineno - 1, node.col_offset, "M711", node.names[0].name
-                )
+                self.addErrorFromNode(node, "M-711", node.names[0].name)
 
     def __checkBugBear(self):
         """
         Private method for bugbear checks.
         """
         visitor = BugBearVisitor()
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
         for violation in visitor.violations:
-            node = violation[0]
-            reason = violation[1]
-            params = violation[2:]
-            self.__error(node.lineno - 1, node.col_offset, reason, *params)
+            self.addErrorFromNode(*violation)
 
     def __checkReturn(self):
         """
         Private method to check return statements.
         """
         visitor = ReturnVisitor()
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
         for violation in visitor.violations:
-            node = violation[0]
-            reason = violation[1]
-            self.__error(node.lineno - 1, node.col_offset, reason)
+            self.addErrorFromNode(*violation)
 
     def __checkDateTime(self):
         """
@@ -1301,7 +1135,7 @@
         """
         # step 1: generate an augmented node tree containing parent info
         #         for each child node
-        tree = copy.deepcopy(self.__tree)
+        tree = copy.deepcopy(self.tree)
         for node in ast.walk(tree):
             for childNode in ast.iter_child_nodes(node):
                 childNode._dtCheckerParent = node
@@ -1310,27 +1144,23 @@
         visitor = DateTimeVisitor()
         visitor.visit(tree)
         for violation in visitor.violations:
-            node = violation[0]
-            reason = violation[1]
-            self.__error(node.lineno - 1, node.col_offset, reason)
+            self.addErrorFromNode(*violation)
 
     def __checkSysVersion(self):
         """
         Private method to check the use of sys.version and sys.version_info.
         """
         visitor = SysVersionVisitor()
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
         for violation in visitor.violations:
-            node = violation[0]
-            reason = violation[1]
-            self.__error(node.lineno - 1, node.col_offset, reason)
+            self.addErrorFromNode(*violation)
 
     def __checkProperties(self):
         """
         Private method to check for issue with property related methods.
         """
         properties = []
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if isinstance(node, ast.ClassDef):
                 properties.clear()
 
@@ -1342,12 +1172,7 @@
                         propertyCount += 1
                         properties.append(node.name)
                         if len(node.args.args) != 1:
-                            self.__error(
-                                node.lineno - 1,
-                                node.col_offset,
-                                "M260",
-                                len(node.args.args),
-                            )
+                            self.addErrorFromNode(node, "M-260", len(node.args.args))
 
                     if isinstance(decorator, ast.Attribute):
                         # property setter method
@@ -1355,27 +1180,16 @@
                             propertyCount += 1
                             if node.name != decorator.value.id:
                                 if node.name in properties:
-                                    self.__error(
-                                        node.lineno - 1,
-                                        node.col_offset,
-                                        "M265",
-                                        node.name,
-                                        decorator.value.id,
+                                    self.addErrorFromNode(
+                                        node, "M-265", node.name, decorator.value.id
                                     )
                                 else:
-                                    self.__error(
-                                        node.lineno - 1,
-                                        node.col_offset,
-                                        "M263",
-                                        decorator.value.id,
-                                        node.name,
+                                    self.addErrorFromNode(
+                                        node, "M-263", decorator.value.id, node.name
                                     )
                             if len(node.args.args) != 2:
-                                self.__error(
-                                    node.lineno - 1,
-                                    node.col_offset,
-                                    "M261",
-                                    len(node.args.args),
+                                self.addErrorFromNode(
+                                    node, "M-261", len(node.args.args)
                                 )
 
                         # property deleter method
@@ -1383,31 +1197,20 @@
                             propertyCount += 1
                             if node.name != decorator.value.id:
                                 if node.name in properties:
-                                    self.__error(
-                                        node.lineno - 1,
-                                        node.col_offset,
-                                        "M266",
-                                        node.name,
-                                        decorator.value.id,
+                                    self.addErrorFromNode(
+                                        node, "M-266", node.name, decorator.value.id
                                     )
                                 else:
-                                    self.__error(
-                                        node.lineno - 1,
-                                        node.col_offset,
-                                        "M264",
-                                        decorator.value.id,
-                                        node.name,
+                                    self.addErrorFromNode(
+                                        node, "M-264", decorator.value.id, node.name
                                     )
                             if len(node.args.args) != 1:
-                                self.__error(
-                                    node.lineno - 1,
-                                    node.col_offset,
-                                    "M262",
-                                    len(node.args.args),
+                                self.addErrorFromNode(
+                                    node, "M-262", len(node.args.args)
                                 )
 
                 if propertyCount > 1:
-                    self.__error(node.lineno - 1, node.col_offset, "M267", node.name)
+                    self.addErrorFromNode(node, "M-267", node.name)
 
     #######################################################################
     ## The following methods check for implicitly concatenated strings.
@@ -1480,15 +1283,17 @@
         )
         for a, b in pairwise(tokensWithoutWhitespace):
             if self.__isImplicitStringConcat(a, b):
-                self.__error(
-                    a.end[0] - 1, a.end[1], "M851" if a.end[0] == b.start[0] else "M852"
+                self.addError(
+                    a.end[0],
+                    a.end[1],
+                    "M-851" if a.end[0] == b.start[0] else "M-852",
                 )
 
     def __checkExplicitStringConcat(self):
         """
         Private method to check for explicitly concatenated strings.
         """
-        for node in ast.walk(self.__tree):
+        for node in ast.walk(self.tree):
             if (
                 isinstance(node, ast.BinOp)
                 and isinstance(node.op, ast.Add)
@@ -1498,2832 +1303,17 @@
                     for operand in (node.left, node.right)
                 )
             ):
-                self.__error(node.lineno - 1, node.col_offset, "M853")
-
-
-class TextVisitor(ast.NodeVisitor):
-    """
-    Class implementing a node visitor for bytes and str instances.
-
-    It tries to detect docstrings as string of the first expression of each
-    module, class or function.
-    """
-
-    # modeled after the string format flake8 extension
-
-    def __init__(self):
-        """
-        Constructor
-        """
-        super().__init__()
-        self.nodes = []
-        self.calls = {}
-
-    def __addNode(self, node):
-        """
-        Private method to add a node to our list of nodes.
-
-        @param node reference to the node to add
-        @type ast.AST
-        """
-        if not hasattr(node, "is_docstring"):
-            node.is_docstring = False
-        self.nodes.append(node)
-
-    def visit_Constant(self, node):
-        """
-        Public method to handle constant nodes.
-
-        @param node reference to the bytes node
-        @type ast.Constant
-        """
-        if AstUtilities.isBaseString(node):
-            self.__addNode(node)
-        else:
-            super().generic_visit(node)
-
-    def __visitDefinition(self, node):
-        """
-        Private method handling class and function definitions.
-
-        @param node reference to the node to handle
-        @type ast.FunctionDef, ast.AsyncFunctionDef or ast.ClassDef
-        """
-        # Manually traverse class or function definition
-        # * Handle decorators normally
-        # * Use special check for body content
-        # * Don't handle the rest (e.g. bases)
-        for decorator in node.decorator_list:
-            self.visit(decorator)
-        self.__visitBody(node)
-
-    def __visitBody(self, node):
-        """
-        Private method to traverse the body of the node manually.
-
-        If the first node is an expression which contains a string or bytes it
-        marks that as a docstring.
-
-        @param node reference to the node to traverse
-        @type ast.AST
-        """
-        if (
-            node.body
-            and isinstance(node.body[0], ast.Expr)
-            and AstUtilities.isBaseString(node.body[0].value)
-        ):
-            node.body[0].value.is_docstring = True
-
-        for subnode in node.body:
-            self.visit(subnode)
-
-    def visit_Module(self, node):
-        """
-        Public method to handle a module.
-
-        @param node reference to the node to handle
-        @type ast.Module
-        """
-        self.__visitBody(node)
-
-    def visit_ClassDef(self, node):
-        """
-        Public method to handle a class definition.
-
-        @param node reference to the node to handle
-        @type ast.ClassDef
-        """
-        # Skipped nodes: ('name', 'bases', 'keywords', 'starargs', 'kwargs')
-        self.__visitDefinition(node)
-
-    def visit_FunctionDef(self, node):
-        """
-        Public method to handle a function definition.
-
-        @param node reference to the node to handle
-        @type ast.FunctionDef
-        """
-        # Skipped nodes: ('name', 'args', 'returns')
-        self.__visitDefinition(node)
-
-    def visit_AsyncFunctionDef(self, node):
-        """
-        Public method to handle an asynchronous function definition.
-
-        @param node reference to the node to handle
-        @type ast.AsyncFunctionDef
-        """
-        # Skipped nodes: ('name', 'args', 'returns')
-        self.__visitDefinition(node)
-
-    def visit_Call(self, node):
-        """
-        Public method to handle a function call.
-
-        @param node reference to the node to handle
-        @type ast.Call
-        """
-        if isinstance(node.func, ast.Attribute) and node.func.attr == "format":
-            if AstUtilities.isBaseString(node.func.value):
-                self.calls[node.func.value] = (node, False)
-            elif (
-                isinstance(node.func.value, ast.Name)
-                and node.func.value.id == "str"
-                and node.args
-                and AstUtilities.isBaseString(node.args[0])
-            ):
-                self.calls[node.args[0]] = (node, True)
-        super().generic_visit(node)
-
-
-#######################################################################
-## BugBearVisitor
-##
-## adapted from: flake8-bugbear v24.8.19
-##
-## Original: Copyright (c) 2016 Łukasz Langa
-#######################################################################
-
-BugBearContext = namedtuple("BugBearContext", ["node", "stack"])
-
-
-@dataclass
-class M540CaughtException:
-    """
-    Class to hold the data for a caught exception.
-    """
-
-    name: str
-    hasNote: bool
-
-
-class BugBearVisitor(ast.NodeVisitor):
-    """
-    Class implementing a node visitor to check for various topics.
-    """
-
-    CONTEXTFUL_NODES = (
-        ast.Module,
-        ast.ClassDef,
-        ast.AsyncFunctionDef,
-        ast.FunctionDef,
-        ast.Lambda,
-        ast.ListComp,
-        ast.SetComp,
-        ast.DictComp,
-        ast.GeneratorExp,
-    )
-
-    FUNCTION_NODES = (
-        ast.AsyncFunctionDef,
-        ast.FunctionDef,
-        ast.Lambda,
-    )
-
-    NodeWindowSize = 4
-
-    def __init__(self):
-        """
-        Constructor
-        """
-        super().__init__()
-
-        self.nodeWindow = []
-        self.violations = []
-        self.contexts = []
-
-        self.__M523Seen = set()
-        self.__M505Imports = set()
-        self.__M540CaughtException = None
-
-    @property
-    def nodeStack(self):
-        """
-        Public method to get a reference to the most recent node stack.
-
-        @return reference to the most recent node stack
-        @rtype list
-        """
-        if len(self.contexts) == 0:
-            return []
-
-        context, stack = self.contexts[-1]
-        return stack
-
-    def __isIdentifier(self, arg):
-        """
-        Private method to check if arg is a valid identifier.
-
-        See https://docs.python.org/2/reference/lexical_analysis.html#identifiers
-
-        @param arg reference to an argument node
-        @type ast.Node
-        @return flag indicating a valid identifier
-        @rtype TYPE
-        """
-        if not AstUtilities.isString(arg):
-            return False
-
-        return (
-            re.match(r"^[A-Za-z_][A-Za-z0-9_]*$", AstUtilities.getValue(arg))
-            is not None
-        )
-
-    def toNameStr(self, node):
-        """
-        Public method to turn Name and Attribute nodes to strings, handling any
-        depth of attribute accesses.
-
-
-        @param node reference to the node
-        @type ast.Name or ast.Attribute
-        @return string representation
-        @rtype str
-        """
-        if isinstance(node, ast.Name):
-            return node.id
-        elif isinstance(node, ast.Call):
-            return self.toNameStr(node.func)
-        elif isinstance(node, ast.Attribute):
-            inner = self.toNameStr(node.value)
-            if inner is None:
-                return None
-            return f"{inner}.{node.attr}"
-        else:
-            return None
-
-    def __typesafeIssubclass(self, obj, classOrTuple):
-        """
-        Private method implementing a type safe issubclass() function.
-
-        @param obj reference to the object to be tested
-        @type Any
-        @param classOrTuple type to check against
-        @type type
-        @return flag indicating a subclass
-        @rtype bool
-        """
-        try:
-            return issubclass(obj, classOrTuple)
-        except TypeError:
-            # User code specifies a type that is not a type in our current run.
-            # Might be their error, might be a difference in our environments.
-            # We don't know so we ignore this.
-            return False
-
-    def __getAssignedNames(self, loopNode):
-        """
-        Private method to get the names of a for loop.
-
-        @param loopNode reference to the node to be processed
-        @type ast.For
-        @yield DESCRIPTION
-        @ytype TYPE
-        """
-        loopTargets = (ast.For, ast.AsyncFor, ast.comprehension)
-        for node in self.__childrenInScope(loopNode):
-            if isinstance(node, (ast.Assign)):
-                for child in node.targets:
-                    yield from self.__namesFromAssignments(child)
-            if isinstance(node, loopTargets + (ast.AnnAssign, ast.AugAssign)):
-                yield from self.__namesFromAssignments(node.target)
-
-    def __namesFromAssignments(self, assignTarget):
-        """
-        Private method to get names of an assignment.
-
-        @param assignTarget reference to the node to be processed
-        @type ast.Node
-        @yield name of the assignment
-        @ytype str
-        """
-        if isinstance(assignTarget, ast.Name):
-            yield assignTarget.id
-        elif isinstance(assignTarget, ast.Starred):
-            yield from self.__namesFromAssignments(assignTarget.value)
-        elif isinstance(assignTarget, (ast.List, ast.Tuple)):
-            for child in assignTarget.elts:
-                yield from self.__namesFromAssignments(child)
-
-    def __childrenInScope(self, node):
-        """
-        Private method to get all child nodes in the given scope.
-
-        @param node reference to the node to be processed
-        @type ast.Node
-        @yield reference to a child node
-        @ytype ast.Node
-        """
-        yield node
-        if not isinstance(node, BugBearVisitor.FUNCTION_NODES):
-            for child in ast.iter_child_nodes(node):
-                yield from self.__childrenInScope(child)
-
-    def __flattenExcepthandler(self, node):
-        """
-        Private method to flatten the list of exceptions handled by an except handler.
-
-        @param node reference to the node to be processed
-        @type ast.Node
-        @yield reference to the exception type node
-        @ytype ast.Node
-        """
-        if not isinstance(node, ast.Tuple):
-            yield node
-            return
-
-        exprList = node.elts.copy()
-        while len(exprList):
-            expr = exprList.pop(0)
-            if isinstance(expr, ast.Starred) and isinstance(
-                expr.value, (ast.List, ast.Tuple)
-            ):
-                exprList.extend(expr.value.elts)
-                continue
-            yield expr
-
-    def __checkRedundantExcepthandlers(self, names, node):
-        """
-        Private method to check for redundant exception types in an exception handler.
-
-        @param names list of exception types to be checked
-        @type list of ast.Name
-        @param node reference to the exception handler node
-        @type ast.ExceptionHandler
-        @return tuple containing the error data
-        @rtype tuple of (ast.Node, str, str, str, str)
-        """
-        redundantExceptions = {
-            "OSError": {
-                # All of these are actually aliases of OSError since Python 3.3
-                "IOError",
-                "EnvironmentError",
-                "WindowsError",
-                "mmap.error",
-                "socket.error",
-                "select.error",
-            },
-            "ValueError": {
-                "binascii.Error",
-            },
-        }
-
-        # See if any of the given exception names could be removed, e.g. from:
-        #    (MyError, MyError)  # duplicate names
-        #    (MyError, BaseException)  # everything derives from the Base
-        #    (Exception, TypeError)  # builtins where one subclasses another
-        #    (IOError, OSError)  # IOError is an alias of OSError since Python3.3
-        # but note that other cases are impractical to handle from the AST.
-        # We expect this is mostly useful for users who do not have the
-        # builtin exception hierarchy memorised, and include a 'shadowed'
-        # subtype without realising that it's redundant.
-        good = sorted(set(names), key=names.index)
-        if "BaseException" in good:
-            good = ["BaseException"]
-        # Remove redundant exceptions that the automatic system either handles
-        # poorly (usually aliases) or can't be checked (e.g. it's not an
-        # built-in exception).
-        for primary, equivalents in redundantExceptions.items():
-            if primary in good:
-                good = [g for g in good if g not in equivalents]
-
-        for name, other in itertools.permutations(tuple(good), 2):
-            if (
-                self.__typesafeIssubclass(
-                    getattr(builtins, name, type), getattr(builtins, other, ())
-                )
-                and name in good
-            ):
-                good.remove(name)
-        if good != names:
-            desc = good[0] if len(good) == 1 else "({0})".format(", ".join(good))
-            as_ = " as " + node.name if node.name is not None else ""
-            return (node, "M514", ", ".join(names), as_, desc)
-
-        return None
-
-    def __walkList(self, nodes):
-        """
-        Private method to walk a given list of nodes.
-
-        @param nodes list of nodes to walk
-        @type list of ast.Node
-        @yield node references as determined by the ast.walk() function
-        @ytype ast.Node
-        """
-        for node in nodes:
-            yield from ast.walk(node)
-
-    def __getNamesFromTuple(self, node):
-        """
-        Private method to get the names from an ast.Tuple node.
-
-        @param node ast node to be processed
-        @type ast.Tuple
-        @yield names
-        @ytype str
-        """
-        for dim in node.elts:
-            if isinstance(dim, ast.Name):
-                yield dim.id
-            elif isinstance(dim, ast.Tuple):
-                yield from self.__getNamesFromTuple(dim)
-
-    def __getDictCompLoopAndNamedExprVarNames(self, node):
-        """
-        Private method to get the names of comprehension loop variables.
-
-        @param node ast node to be processed
-        @type ast.DictComp
-        @yield loop variable names
-        @ytype str
-        """
-        finder = NamedExprFinder()
-        for gen in node.generators:
-            if isinstance(gen.target, ast.Name):
-                yield gen.target.id
-            elif isinstance(gen.target, ast.Tuple):
-                yield from self.__getNamesFromTuple(gen.target)
-
-            finder.visit(gen.ifs)
-
-        yield from finder.getNames().keys()
-
-    def __inClassInit(self):
-        """
-        Private method to check, if we are inside an '__init__' method.
-
-        @return flag indicating being within the '__init__' method
-        @rtype bool
-        """
-        return (
-            len(self.contexts) >= 2
-            and isinstance(self.contexts[-2].node, ast.ClassDef)
-            and isinstance(self.contexts[-1].node, ast.FunctionDef)
-            and self.contexts[-1].node.name == "__init__"
-        )
-
-    def visit_Return(self, node):
-        """
-        Public method to handle 'Return' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.Return
-        """
-        if self.__inClassInit() and node.value is not None:
-            self.violations.append((node, "M537"))
-
-        self.generic_visit(node)
-
-    def visit_Yield(self, node):
-        """
-        Public method to handle 'Yield' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.Yield
-        """
-        if self.__inClassInit():
-            self.violations.append((node, "M537"))
-
-        self.generic_visit(node)
-
-    def visit_YieldFrom(self, node) -> None:
-        """
-        Public method to handle 'YieldFrom' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.YieldFrom
-        """
-        if self.__inClassInit():
-            self.violations.append((node, "M537"))
-
-        self.generic_visit(node)
-
-    def visit(self, node):
-        """
-        Public method to traverse a given AST node.
-
-        @param node AST node to be traversed
-        @type ast.Node
-        """
-        isContextful = isinstance(node, BugBearVisitor.CONTEXTFUL_NODES)
-
-        if isContextful:
-            context = BugBearContext(node, [])
-            self.contexts.append(context)
-
-        self.nodeStack.append(node)
-        self.nodeWindow.append(node)
-        self.nodeWindow = self.nodeWindow[-BugBearVisitor.NodeWindowSize :]
-
-        super().visit(node)
-
-        self.nodeStack.pop()
-
-        if isContextful:
-            self.contexts.pop()
-
-        self.__checkForM518(node)
-
-    def visit_ExceptHandler(self, node):
-        """
-        Public method to handle exception handlers.
-
-        @param node reference to the node to be processed
-        @type ast.ExceptHandler
-        """
-        if node.type is None:
-            # bare except is handled by pycodestyle already
-            self.generic_visit(node)
-            return
-
-        oldM540CaughtException = self.__M540CaughtException
-        if node.name is None:
-            self.__M540CaughtException = None
-        else:
-            self.__M540CaughtException = M540CaughtException(node.name, False)
-
-        names = self.__checkForM513_M529_M530(node)
-
-        if "BaseException" in names and not ExceptBaseExceptionVisitor(node).reRaised():
-            self.violations.append((node, "M536"))
-
-        self.generic_visit(node)
-
-        if (
-            self.__M540CaughtException is not None
-            and self.__M540CaughtException.hasNote
-        ):
-            self.violations.append((node, "M540"))
-        self.__M540CaughtException = oldM540CaughtException
-
-    def visit_UAdd(self, node):
-        """
-        Public method to handle unary additions.
-
-        @param node reference to the node to be processed
-        @type ast.UAdd
-        """
-        trailingNodes = list(map(type, self.nodeWindow[-4:]))
-        if trailingNodes == [ast.UnaryOp, ast.UAdd, ast.UnaryOp, ast.UAdd]:
-            originator = self.nodeWindow[-4]
-            self.violations.append((originator, "M502"))
-
-        self.generic_visit(node)
-
-    def visit_Call(self, node):
-        """
-        Public method to handle a function call.
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        isM540AddNote = False
-
-        if isinstance(node.func, ast.Attribute):
-            self.__checkForM505(node)
-            isM540AddNote = self.__checkForM540AddNote(node.func)
-        else:
-            with contextlib.suppress(AttributeError, IndexError):
-                # bad super() call
-                if isinstance(node.func, ast.Name) and node.func.id == "super":
-                    args = node.args
-                    if (
-                        len(args) == 2
-                        and isinstance(args[0], ast.Attribute)
-                        and isinstance(args[0].value, ast.Name)
-                        and args[0].value.id == "self"
-                        and args[0].attr == "__class__"
-                    ):
-                        self.violations.append((node, "M582"))
-
-                # bad getattr and setattr
-                if (
-                    node.func.id in ("getattr", "hasattr")
-                    and node.args[1].value == "__call__"
-                ):
-                    self.violations.append((node, "M504"))
-                if (
-                    node.func.id == "getattr"
-                    and len(node.args) == 2
-                    and self.__isIdentifier(node.args[1])
-                    and iskeyword(AstUtilities.getValue(node.args[1]))
-                ):
-                    self.violations.append((node, "M509"))
-                elif (
-                    node.func.id == "setattr"
-                    and len(node.args) == 3
-                    and self.__isIdentifier(node.args[1])
-                    and iskeyword(AstUtilities.getValue(node.args[1]))
-                ):
-                    self.violations.append((node, "M510"))
-
-        self.__checkForM526(node)
-
-        self.__checkForM528(node)
-        self.__checkForM534(node)
-        self.__checkForM539(node)
-
-        # no need for copying, if used in nested calls it will be set to None
-        currentM540CaughtException = self.__M540CaughtException
-        if not isM540AddNote:
-            self.__checkForM540Usage(node.args)
-            self.__checkForM540Usage(node.keywords)
-
-        self.generic_visit(node)
-
-        if isM540AddNote:
-            # Avoid nested calls within the parameter list using the variable itself.
-            # e.g. `e.add_note(str(e))`
-            self.__M540CaughtException = currentM540CaughtException
-
-    def visit_Module(self, node):
-        """
-        Public method to handle a module node.
-
-        @param node reference to the node to be processed
-        @type ast.Module
-        """
-        self.generic_visit(node)
-
-    def visit_Assign(self, node):
-        """
-        Public method to handle assignments.
-
-        @param node reference to the node to be processed
-        @type ast.Assign
-        """
-        self.__checkForM540Usage(node.value)
-        if len(node.targets) == 1:
-            target = node.targets[0]
-            if (
-                isinstance(target, ast.Attribute)
-                and isinstance(target.value, ast.Name)
-                and (target.value.id, target.attr) == ("os", "environ")
-            ):
-                self.violations.append((node, "M503"))
-
-        self.generic_visit(node)
-
-    def visit_For(self, node):
-        """
-        Public method to handle 'for' statements.
-
-        @param node reference to the node to be processed
-        @type ast.For
-        """
-        self.__checkForM507(node)
-        self.__checkForM520(node)
-        self.__checkForM523(node)
-        self.__checkForM531(node)
-        self.__checkForM569(node)
-
-        self.generic_visit(node)
-
-    def visit_AsyncFor(self, node):
-        """
-        Public method to handle 'for' statements.
-
-        @param node reference to the node to be processed
-        @type ast.AsyncFor
-        """
-        self.__checkForM507(node)
-        self.__checkForM520(node)
-        self.__checkForM523(node)
-        self.__checkForM531(node)
-
-        self.generic_visit(node)
-
-    def visit_While(self, node):
-        """
-        Public method to handle 'while' statements.
-
-        @param node reference to the node to be processed
-        @type ast.While
-        """
-        self.__checkForM523(node)
-
-        self.generic_visit(node)
+                self.addErrorFromNode(node, "M-853")
 
-    def visit_ListComp(self, node):
-        """
-        Public method to handle list comprehensions.
-
-        @param node reference to the node to be processed
-        @type ast.ListComp
-        """
-        self.__checkForM523(node)
-
-        self.generic_visit(node)
-
-    def visit_SetComp(self, node):
-        """
-        Public method to handle set comprehensions.
-
-        @param node reference to the node to be processed
-        @type ast.SetComp
-        """
-        self.__checkForM523(node)
-
-        self.generic_visit(node)
-
-    def visit_DictComp(self, node):
-        """
-        Public method to handle dictionary comprehensions.
-
-        @param node reference to the node to be processed
-        @type ast.DictComp
-        """
-        self.__checkForM523(node)
-        self.__checkForM535(node)
-
-        self.generic_visit(node)
-
-    def visit_GeneratorExp(self, node):
-        """
-        Public method to handle generator expressions.
-
-        @param node reference to the node to be processed
-        @type ast.GeneratorExp
-        """
-        self.__checkForM523(node)
-
-        self.generic_visit(node)
-
-    def visit_Assert(self, node):
-        """
-        Public method to handle 'assert' statements.
-
-        @param node reference to the node to be processed
-        @type ast.Assert
-        """
-        if (
-            AstUtilities.isNameConstant(node.test)
-            and AstUtilities.getValue(node.test) is False
-        ):
-            self.violations.append((node, "M511"))
-
-        self.generic_visit(node)
-
-    def visit_AsyncFunctionDef(self, node):
-        """
-        Public method to handle async function definitions.
-
-        @param node reference to the node to be processed
-        @type ast.AsyncFunctionDef
-        """
-        self.__checkForM506_M508(node)
-
-        self.generic_visit(node)
-
-    def visit_FunctionDef(self, node):
-        """
-        Public method to handle function definitions.
-
-        @param node reference to the node to be processed
-        @type ast.FunctionDef
-        """
-        self.__checkForM506_M508(node)
-        self.__checkForM519(node)
-        self.__checkForM521(node)
-
-        self.generic_visit(node)
-
-    def visit_ClassDef(self, node):
-        """
-        Public method to handle class definitions.
-
-        @param node reference to the node to be processed
-        @type ast.ClassDef
-        """
-        self.__checkForM521(node)
-        self.__checkForM524_M527(node)
-
-        self.generic_visit(node)
-
-    def visit_Try(self, node):
-        """
-        Public method to handle 'try' statements'.
-
-        @param node reference to the node to be processed
-        @type ast.Try
-        """
-        self.__checkForM512(node)
-        self.__checkForM525(node)
-
-        self.generic_visit(node)
-
-    def visit_Compare(self, node):
-        """
-        Public method to handle comparison statements.
-
-        @param node reference to the node to be processed
-        @type ast.Compare
-        """
-        self.__checkForM515(node)
-
-        self.generic_visit(node)
-
-    def visit_Raise(self, node):
-        """
-        Public method to handle 'raise' statements.
-
-        @param node reference to the node to be processed
-        @type ast.Raise
-        """
-        if node.exc is None:
-            self.__M540CaughtException = None
-        else:
-            self.__checkForM540Usage(node.exc)
-            self.__checkForM540Usage(node.cause)
-        self.__checkForM516(node)
-
-        self.generic_visit(node)
-
-    def visit_With(self, node):
-        """
-        Public method to handle 'with' statements.
-
-        @param node reference to the node to be processed
-        @type ast.With
-        """
-        self.__checkForM517(node)
-        self.__checkForM522(node)
-
-        self.generic_visit(node)
-
-    def visit_JoinedStr(self, node):
-        """
-        Public method to handle f-string arguments.
-
-        @param node reference to the node to be processed
-        @type ast.JoinedStr
-        """
-        for value in node.values:
-            if isinstance(value, ast.FormattedValue):
-                return
-
-        self.violations.append((node, "M581"))
-
-    def visit_AnnAssign(self, node):
-        """
-        Public method to check annotated assign statements.
-
-        @param node reference to the node to be processed
-        @type ast.AnnAssign
-        """
-        self.__checkForM532(node)
-        self.__checkForM540Usage(node.value)
-
-        self.generic_visit(node)
-
-    def visit_Import(self, node):
-        """
-        Public method to check imports.
-
-        @param node reference to the node to be processed
-        @type ast.Import
-        """
-        self.__checkForM505(node)
-
-        self.generic_visit(node)
-
-    def visit_ImportFrom(self, node):
-        """
-        Public method to check from imports.
-
-        @param node reference to the node to be processed
-        @type ast.Import
-        """
-        self.visit_Import(node)
-
-    def visit_Set(self, node):
-        """
-        Public method to check a set.
-
-        @param node reference to the node to be processed
-        @type ast.Set
-        """
-        self.__checkForM533(node)
-
-        self.generic_visit(node)
-
-    def __checkForM505(self, node):
-        """
-        Private method to check the use of *strip().
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        if isinstance(node, ast.Import):
-            for name in node.names:
-                self.__M505Imports.add(name.asname or name.name)
-        elif isinstance(node, ast.ImportFrom):
-            for name in node.names:
-                self.__M505Imports.add(f"{node.module}.{name.name or name.asname}")
-        elif isinstance(node, ast.Call) and isinstance(node.func, ast.Attribute):
-            if node.func.attr not in ("lstrip", "rstrip", "strip"):
-                return  # method name doesn't match
-
-            if (
-                isinstance(node.func.value, ast.Name)
-                and node.func.value.id in self.__M505Imports
-            ):
-                return  # method is being run on an imported module
-
-            if len(node.args) != 1 or not AstUtilities.isString(node.args[0]):
-                return  # used arguments don't match the builtin strip
-
-            value = AstUtilities.getValue(node.args[0])
-            if len(value) == 1:
-                return  # stripping just one character
-
-            if len(value) == len(set(value)):
-                return  # no characters appear more than once
-
-            self.violations.append((node, "M505"))
-
-    def __checkForM506_M508(self, node):
-        """
-        Private method to check the use of mutable literals, comprehensions and calls.
-
-        @param node reference to the node to be processed
-        @type ast.AsyncFunctionDef or ast.FunctionDef
-        """
-        visitor = FunctionDefDefaultsVisitor("M506", "M508")
-        visitor.visit(node.args.defaults + node.args.kw_defaults)
-        self.violations.extend(visitor.errors)
-
-    def __checkForM507(self, node):
-        """
-        Private method to check for unused loop variables.
-
-        @param node reference to the node to be processed
-        @type ast.For or ast.AsyncFor
-        """
-        targets = NameFinder()
-        targets.visit(node.target)
-        ctrlNames = set(filter(lambda s: not s.startswith("_"), targets.getNames()))
-        body = NameFinder()
-        for expr in node.body:
-            body.visit(expr)
-        usedNames = set(body.getNames())
-        for name in sorted(ctrlNames - usedNames):
-            n = targets.getNames()[name][0]
-            self.violations.append((n, "M507", name))
-
-    def __checkForM512(self, node):
-        """
-        Private method to check for return/continue/break inside finally blocks.
-
-        @param node reference to the node to be processed
-        @type ast.Try
-        """
-
-        def _loop(node, badNodeTypes):
-            if isinstance(node, (ast.AsyncFunctionDef, ast.FunctionDef)):
-                return
-
-            if isinstance(node, (ast.While, ast.For)):
-                badNodeTypes = (ast.Return,)
-
-            elif isinstance(node, badNodeTypes):
-                self.violations.append((node, "M512"))
-
-            for child in ast.iter_child_nodes(node):
-                _loop(child, badNodeTypes)
-
-        for child in node.finalbody:
-            _loop(child, (ast.Return, ast.Continue, ast.Break))
-
-    def __checkForM513_M529_M530(self, node):
-        """
-        Private method to check various exception handler situations.
-
-        @param node reference to the node to be processed
-        @type ast.ExceptHandler
-        @return list of exception handler names
-        @rtype list of str
-        """
-        handlers = self.__flattenExcepthandler(node.type)
-        names = []
-        badHandlers = []
-        ignoredHandlers = []
-
-        for handler in handlers:
-            if isinstance(handler, (ast.Name, ast.Attribute)):
-                name = self.toNameStr(handler)
-                if name is None:
-                    ignoredHandlers.append(handler)
-                else:
-                    names.append(name)
-            elif isinstance(handler, (ast.Call, ast.Starred)):
-                ignoredHandlers.append(handler)
-            else:
-                badHandlers.append(handler)
-        if badHandlers:
-            self.violations.append((node, "M530"))
-        if len(names) == 0 and not badHandlers and not ignoredHandlers:
-            self.violations.append((node, "M529"))
-        elif (
-            len(names) == 1
-            and not badHandlers
-            and not ignoredHandlers
-            and isinstance(node.type, ast.Tuple)
-        ):
-            self.violations.append((node, "M513", *names))
-        else:
-            maybeError = self.__checkRedundantExcepthandlers(names, node)
-            if maybeError is not None:
-                self.violations.append(maybeError)
-        return names
-
-    def __checkForM515(self, node):
-        """
-        Private method to check for pointless comparisons.
-
-        @param node reference to the node to be processed
-        @type ast.Compare
-        """
-        if isinstance(self.nodeStack[-2], ast.Expr):
-            self.violations.append((node, "M515"))
-
-    def __checkForM516(self, node):
-        """
-        Private method to check for raising a literal instead of an exception.
-
-        @param node reference to the node to be processed
-        @type ast.Raise
-        """
-        if (
-            AstUtilities.isNameConstant(node.exc)
-            or AstUtilities.isNumber(node.exc)
-            or AstUtilities.isString(node.exc)
-        ):
-            self.violations.append((node, "M516"))
-
-    def __checkForM517(self, node):
-        """
-        Private method to check for use of the evil syntax
-        'with assertRaises(Exception): or 'with pytest.raises(Exception):'.
-
-        @param node reference to the node to be processed
-        @type ast.With
-        """
-        item = node.items[0]
-        itemContext = item.context_expr
-        if (
-            hasattr(itemContext, "func")
-            and (
-                (
-                    isinstance(itemContext.func, ast.Attribute)
-                    and (
-                        itemContext.func.attr == "assertRaises"
-                        or (
-                            itemContext.func.attr == "raises"
-                            and isinstance(itemContext.func.value, ast.Name)
-                            and itemContext.func.value.id == "pytest"
-                            and "match" not in (kwd.arg for kwd in itemContext.keywords)
-                        )
-                    )
-                )
-                or (
-                    isinstance(itemContext.func, ast.Name)
-                    and itemContext.func.id == "raises"
-                    and isinstance(itemContext.func.ctx, ast.Load)
-                    and "pytest.raises" in self.__M505Imports
-                    and "match" not in (kwd.arg for kwd in itemContext.keywords)
-                )
-            )
-            and len(itemContext.args) == 1
-            and isinstance(itemContext.args[0], ast.Name)
-            and itemContext.args[0].id in ("Exception", "BaseException")
-            and not item.optional_vars
-        ):
-            self.violations.append((node, "M517"))
-
-    def __checkForM518(self, node):
-        """
-        Private method to check for useless expressions.
-
-        @param node reference to the node to be processed
-        @type ast.FunctionDef
-        """
-        if not isinstance(node, ast.Expr):
-            return
-
-        if isinstance(
-            node.value,
-            (ast.List, ast.Set, ast.Dict, ast.Tuple),
-        ) or (
-            isinstance(node.value, ast.Constant)
-            and (
-                isinstance(
-                    node.value.value,
-                    (int, float, complex, bytes, bool),
-                )
-                or node.value.value is None
-            )
-        ):
-            self.violations.append((node, "M518", node.value.__class__.__name__))
-
-    def __checkForM519(self, node):
-        """
-        Private method to check for use of 'functools.lru_cache' or 'functools.cache'.
-
-        @param node reference to the node to be processed
-        @type ast.FunctionDef
-        """
-        caches = {
-            "functools.cache",
-            "functools.lru_cache",
-            "cache",
-            "lru_cache",
-        }
-
-        if (
-            len(node.decorator_list) == 0
-            or len(self.contexts) < 2
-            or not isinstance(self.contexts[-2].node, ast.ClassDef)
-        ):
-            return
-
-        # Preserve decorator order so we can get the lineno from the decorator node
-        # rather than the function node (this location definition changes in Python 3.8)
-        resolvedDecorators = (
-            ".".join(composeCallPath(decorator)) for decorator in node.decorator_list
-        )
-        for idx, decorator in enumerate(resolvedDecorators):
-            if decorator in {"classmethod", "staticmethod"}:
-                return
-
-            if decorator in caches:
-                self.violations.append((node.decorator_list[idx], "M519"))
-                return
-
-    def __checkForM520(self, node):
-        """
-        Private method to check for a loop that modifies its iterable.
-
-        @param node reference to the node to be processed
-        @type ast.For or ast.AsyncFor
-        """
-        targets = NameFinder()
-        targets.visit(node.target)
-        ctrlNames = set(targets.getNames())
-
-        iterset = M520NameFinder()
-        iterset.visit(node.iter)
-        itersetNames = set(iterset.getNames())
-
-        for name in sorted(ctrlNames):
-            if name in itersetNames:
-                n = targets.getNames()[name][0]
-                self.violations.append((n, "M520"))
-
-    def __checkForM521(self, node):
-        """
-        Private method to check for use of an f-string as docstring.
-
-        @param node reference to the node to be processed
-        @type ast.FunctionDef or ast.ClassDef
-        """
-        if (
-            node.body
-            and isinstance(node.body[0], ast.Expr)
-            and isinstance(node.body[0].value, ast.JoinedStr)
-        ):
-            self.violations.append((node.body[0].value, "M521"))
-
-    def __checkForM522(self, node):
-        """
-        Private method to check for use of an f-string as docstring.
-
-        @param node reference to the node to be processed
-        @type ast.With
-        """
-        item = node.items[0]
-        itemContext = item.context_expr
-        if (
-            hasattr(itemContext, "func")
-            and hasattr(itemContext.func, "value")
-            and hasattr(itemContext.func.value, "id")
-            and itemContext.func.value.id == "contextlib"
-            and hasattr(itemContext.func, "attr")
-            and itemContext.func.attr == "suppress"
-            and len(itemContext.args) == 0
-        ):
-            self.violations.append((node, "M522"))
-
-    def __checkForM523(self, loopNode):
-        """
-        Private method to check that functions (including lambdas) do not use loop
-        variables.
-
-        @param loopNode reference to the node to be processed
-        @type ast.For, ast.AsyncFor, ast.While, ast.ListComp, ast.SetComp,ast.DictComp,
-            or ast.GeneratorExp
-        """
-        safe_functions = []
-        suspiciousVariables = []
-        for node in ast.walk(loopNode):
-            # check if function is immediately consumed to avoid false alarm
-            if isinstance(node, ast.Call):
-                # check for filter&reduce
-                if (
-                    isinstance(node.func, ast.Name)
-                    and node.func.id in ("filter", "reduce", "map")
-                ) or (
-                    isinstance(node.func, ast.Attribute)
-                    and node.func.attr == "reduce"
-                    and isinstance(node.func.value, ast.Name)
-                    and node.func.value.id == "functools"
-                ):
-                    for arg in node.args:
-                        if isinstance(arg, BugBearVisitor.FUNCTION_NODES):
-                            safe_functions.append(arg)
-
-                # check for key=
-                for keyword in node.keywords:
-                    if keyword.arg == "key" and isinstance(
-                        keyword.value, BugBearVisitor.FUNCTION_NODES
-                    ):
-                        safe_functions.append(keyword.value)
-
-            # mark `return lambda: x` as safe
-            # does not (currently) check inner lambdas in a returned expression
-            # e.g. `return (lambda: x, )
-            if isinstance(node, ast.Return) and isinstance(
-                node.value, BugBearVisitor.FUNCTION_NODES
-            ):
-                safe_functions.append(node.value)
-
-            # find unsafe functions
-            if (
-                isinstance(node, BugBearVisitor.FUNCTION_NODES)
-                and node not in safe_functions
-            ):
-                argnames = {
-                    arg.arg for arg in ast.walk(node.args) if isinstance(arg, ast.arg)
-                }
-                if isinstance(node, ast.Lambda):
-                    bodyNodes = ast.walk(node.body)
-                else:
-                    bodyNodes = itertools.chain.from_iterable(map(ast.walk, node.body))
-                errors = []
-                for name in bodyNodes:
-                    if isinstance(name, ast.Name) and name.id not in argnames:
-                        if isinstance(name.ctx, ast.Load):
-                            errors.append((name.lineno, name.col_offset, name.id, name))
-                        elif isinstance(name.ctx, ast.Store):
-                            argnames.add(name.id)
-                for err in errors:
-                    if err[2] not in argnames and err not in self.__M523Seen:
-                        self.__M523Seen.add(err)  # dedupe across nested loops
-                        suspiciousVariables.append(err)
-
-        if suspiciousVariables:
-            reassignedInLoop = set(self.__getAssignedNames(loopNode))
-
-        for err in sorted(suspiciousVariables):
-            if reassignedInLoop.issuperset(err[2]):
-                self.violations.append((err[3], "M523", err[2]))
-
-    def __checkForM524_M527(self, node):
-        """
-        Private method to check for inheritance from abstract classes in abc and lack of
-        any methods decorated with abstract*.
-
-        @param node reference to the node to be processed
-        @type ast.ClassDef
-        """  # __IGNORE_WARNING_D234r__
-
-        def isAbcClass(value, name="ABC"):
-            if isinstance(value, ast.keyword):
-                return value.arg == "metaclass" and isAbcClass(value.value, "ABCMeta")
-
-            # class foo(ABC)
-            # class foo(abc.ABC)
-            return (isinstance(value, ast.Name) and value.id == name) or (
-                isinstance(value, ast.Attribute)
-                and value.attr == name
-                and isinstance(value.value, ast.Name)
-                and value.value.id == "abc"
-            )
-
-        def isAbstractDecorator(expr):
-            return (isinstance(expr, ast.Name) and expr.id[:8] == "abstract") or (
-                isinstance(expr, ast.Attribute) and expr.attr[:8] == "abstract"
-            )
-
-        def isOverload(expr):
-            return (isinstance(expr, ast.Name) and expr.id == "overload") or (
-                isinstance(expr, ast.Attribute) and expr.attr == "overload"
-            )
-
-        def emptyBody(body):
-            def isStrOrEllipsis(node):
-                return isinstance(node, ast.Constant) and (
-                    node.value is Ellipsis or isinstance(node.value, str)
-                )
-
-            # Function body consist solely of `pass`, `...`, and/or (doc)string literals
-            return all(
-                isinstance(stmt, ast.Pass)
-                or (isinstance(stmt, ast.Expr) and isStrOrEllipsis(stmt.value))
-                for stmt in body
-            )
-
-        # don't check multiple inheritance
-        if len(node.bases) + len(node.keywords) > 1:
-            return
-
-        # only check abstract classes
-        if not any(map(isAbcClass, (*node.bases, *node.keywords))):
-            return
-
-        hasMethod = False
-        hasAbstractMethod = False
-
-        if not any(map(isAbcClass, (*node.bases, *node.keywords))):
-            return
-
-        for stmt in node.body:
-            # Ignore abc's that declares a class attribute that must be set
-            if isinstance(stmt, (ast.AnnAssign, ast.Assign)):
-                hasAbstractMethod = True
-                continue
-
-            # only check function defs
-            if not isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef)):
-                continue
-            hasMethod = True
-
-            hasAbstractDecorator = any(map(isAbstractDecorator, stmt.decorator_list))
-
-            hasAbstractMethod |= hasAbstractDecorator
-
-            if (
-                not hasAbstractDecorator
-                and emptyBody(stmt.body)
-                and not any(map(isOverload, stmt.decorator_list))
-            ):
-                self.violations.append((stmt, "M527", stmt.name))
-
-        if hasMethod and not hasAbstractMethod:
-            self.violations.append((node, "M524", node.name))
-
-    def __checkForM525(self, node):
-        """
-        Private method to check for exceptions being handled multiple times.
-
-        @param node reference to the node to be processed
-        @type ast.Try
-        """
-        seen = []
-
-        for handler in node.handlers:
-            if isinstance(handler.type, (ast.Name, ast.Attribute)):
-                name = ".".join(composeCallPath(handler.type))
-                seen.append(name)
-            elif isinstance(handler.type, ast.Tuple):
-                # to avoid checking the same as M514, remove duplicates per except
-                uniques = set()
-                for entry in handler.type.elts:
-                    name = ".".join(composeCallPath(entry))
-                    uniques.add(name)
-                seen.extend(uniques)
-
-        # sort to have a deterministic output
-        duplicates = sorted({x for x in seen if seen.count(x) > 1})
-        for duplicate in duplicates:
-            self.violations.append((node, "M525", duplicate))
-
-    def __checkForM526(self, node):
-        """
-        Private method to check for Star-arg unpacking after keyword argument.
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        if not node.keywords:
-            return
-
-        starreds = [arg for arg in node.args if isinstance(arg, ast.Starred)]
-        if not starreds:
-            return
+    #################################################################################
+    ## The following method checks default match cases.
+    #################################################################################
 
-        firstKeyword = node.keywords[0].value
-        for starred in starreds:
-            if (starred.lineno, starred.col_offset) > (
-                firstKeyword.lineno,
-                firstKeyword.col_offset,
-            ):
-                self.violations.append((node, "M526"))
-
-    def __checkForM528(self, node):
-        """
-        Private method to check for warn without stacklevel.
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        if (
-            isinstance(node.func, ast.Attribute)
-            and node.func.attr == "warn"
-            and isinstance(node.func.value, ast.Name)
-            and node.func.value.id == "warnings"
-            and not any(kw.arg == "stacklevel" for kw in node.keywords)
-            and len(node.args) < 3
-        ):
-            self.violations.append((node, "M528"))
-
-    def __checkForM531(self, loopNode):
-        """
-        Private method to check that 'itertools.groupby' isn't iterated over more than
-        once.
-
-        A warning is emitted when the generator returned by 'groupby()' is used
-        more than once inside a loop body or when it's used in a nested loop.
-
-        @param loopNode reference to the node to be processed
-        @type ast.For or ast.AsyncFor
-        """
-        # for <loop_node.target> in <loop_node.iter>: ...
-        if isinstance(loopNode.iter, ast.Call):
-            node = loopNode.iter
-            if (isinstance(node.func, ast.Name) and node.func.id in ("groupby",)) or (
-                isinstance(node.func, ast.Attribute)
-                and node.func.attr == "groupby"
-                and isinstance(node.func.value, ast.Name)
-                and node.func.value.id == "itertools"
-            ):
-                # We have an invocation of groupby which is a simple unpacking
-                if isinstance(loopNode.target, ast.Tuple) and isinstance(
-                    loopNode.target.elts[1], ast.Name
-                ):
-                    groupName = loopNode.target.elts[1].id
-                else:
-                    # Ignore any 'groupby()' invocation that isn't unpacked
-                    return
-
-                numUsages = 0
-                for node in self.__walkList(loopNode.body):
-                    # Handled nested loops
-                    if isinstance(node, ast.For):
-                        for nestedNode in self.__walkList(node.body):
-                            if (
-                                isinstance(nestedNode, ast.Name)
-                                and nestedNode.id == groupName
-                            ):
-                                self.violations.append((nestedNode, "M531"))
-
-                    # Handle multiple uses
-                    if isinstance(node, ast.Name) and node.id == groupName:
-                        numUsages += 1
-                        if numUsages > 1:
-                            self.violations.append((nestedNode, "M531"))
-
-    def __checkForM532(self, node):
-        """
-        Private method to check for possible unintentional typing annotation.
-
-        @param node reference to the node to be processed
-        @type ast.AnnAssign
-        """
-        if (
-            node.value is None
-            and hasattr(node.target, "value")
-            and isinstance(node.target.value, ast.Name)
-            and (
-                isinstance(node.target, ast.Subscript)
-                or (
-                    isinstance(node.target, ast.Attribute)
-                    and node.target.value.id != "self"
-                )
-            )
-        ):
-            self.violations.append((node, "M532"))
-
-    def __checkForM533(self, node):
-        """
-        Private method to check a set for duplicate items.
-
-        @param node reference to the node to be processed
-        @type ast.Set
-        """
-        seen = set()
-        for elt in node.elts:
-            if not isinstance(elt, ast.Constant):
-                continue
-            if elt.value in seen:
-                self.violations.append((node, "M533", repr(elt.value)))
-            else:
-                seen.add(elt.value)
-
-    def __checkForM534(self, node):
-        """
-        Private method to check that re.sub/subn/split arguments flags/count/maxsplit
-        are passed as keyword arguments.
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        if not isinstance(node.func, ast.Attribute):
-            return
-        func = node.func
-        if not isinstance(func.value, ast.Name) or func.value.id != "re":
-            return
-
-        def check(numArgs, paramName):
-            if len(node.args) > numArgs:
-                arg = node.args[numArgs]
-                self.violations.append((arg, "M534", func.attr, paramName))
-
-        if func.attr in ("sub", "subn"):
-            check(3, "count")
-        elif func.attr == "split":
-            check(2, "maxsplit")
-
-    def __checkForM535(self, node):
-        """
-        Private method to check that a static key isn't used in a dict comprehension.
-
-        Record a warning if a likely unchanging key is used - either a constant,
-        or a variable that isn't coming from the generator expression.
-
-        @param node reference to the node to be processed
-        @type ast.DictComp
-        """
-        if isinstance(node.key, ast.Constant):
-            self.violations.append((node, "M535", node.key.value))
-        elif isinstance(
-            node.key, ast.Name
-        ) and node.key.id not in self.__getDictCompLoopAndNamedExprVarNames(node):
-            self.violations.append((node, "M535", node.key.id))
-
-    def __checkForM539(self, node):
-        """
-        Private method to check for correct ContextVar usage.
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        if not (
-            (isinstance(node.func, ast.Name) and node.func.id == "ContextVar")
-            or (
-                isinstance(node.func, ast.Attribute)
-                and node.func.attr == "ContextVar"
-                and isinstance(node.func.value, ast.Name)
-                and node.func.value.id == "contextvars"
-            )
-        ):
-            return
-
-        # ContextVar only takes one kw currently, but better safe than sorry
-        for kw in node.keywords:
-            if kw.arg == "default":
-                break
-        else:
-            return
-
-        visitor = FunctionDefDefaultsVisitor("M539", "M539")
-        visitor.visit(kw.value)
-        self.violations.extend(visitor.errors)
-
-    def __checkForM540AddNote(self, node):
-        """
-        Private method to check add_note usage.
-
-        @param node reference to the node to be processed
-        @type ast.Attribute
-        @return flag
-        @rtype bool
-        """
-        if (
-            node.attr == "add_note"
-            and isinstance(node.value, ast.Name)
-            and self.__M540CaughtException
-            and node.value.id == self.__M540CaughtException.name
-        ):
-            self.__M540CaughtException.hasNote = True
-            return True
-
-        return False
-
-    def __checkForM540Usage(self, node):
-        """
-        Private method to check the usage of exceptions with added note.
-
-        @param node reference to the node to be processed
-        @type ast.expr or None
-        """  # noqa: D234y
-
-        def superwalk(node: ast.AST | list[ast.AST]):
-            """
-            Function to walk an AST node or a list of AST nodes.
-
-            @param node reference to the node or a list of nodes to be processed
-            @type ast.AST or list[ast.AST]
-            @yield next node to be processed
-            @ytype ast.AST
-            """
-            if isinstance(node, list):
-                for n in node:
-                    yield from ast.walk(n)
-            else:
-                yield from ast.walk(node)
-
-        if not self.__M540CaughtException or node is None:
-            return
-
-        for n in superwalk(node):
-            if isinstance(n, ast.Name) and n.id == self.__M540CaughtException.name:
-                self.__M540CaughtException = None
-                break
-
-    def __checkForM569(self, node):
-        """
-        Private method to check for changes to a loop's mutable iterable.
-
-        @param node loop node to be checked
-        @type ast.For
-        """
-        if isinstance(node.iter, ast.Name):
-            name = self.toNameStr(node.iter)
-        elif isinstance(node.iter, ast.Attribute):
-            name = self.toNameStr(node.iter)
-        else:
-            return
-        checker = M569Checker(name, self)
-        checker.visit(node.body)
-        for mutation in checker.mutations:
-            self.violations.append((mutation, "M569"))
-
-
-class M569Checker(ast.NodeVisitor):
-    """
-    Class traversing a 'for' loop body to check for modifications to a loop's
-    mutable iterable.
-    """
-
-    # https://docs.python.org/3/library/stdtypes.html#mutable-sequence-types
-    MUTATING_FUNCTIONS = (
-        "append",
-        "sort",
-        "reverse",
-        "remove",
-        "clear",
-        "extend",
-        "insert",
-        "pop",
-        "popitem",
-    )
-
-    def __init__(self, name, bugbear):
-        """
-        Constructor
-
-        @param name name of the iterator
-        @type str
-        @param bugbear reference to the bugbear visitor
-        @type BugBearVisitor
-        """
-        self.__name = name
-        self.__bb = bugbear
-        self.mutations = []
-
-    def visit_Delete(self, node):
-        """
-        Public method handling 'Delete' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.Delete
-        """
-        for target in node.targets:
-            if isinstance(target, ast.Subscript):
-                name = self.__bb.toNameStr(target.value)
-            elif isinstance(target, (ast.Attribute, ast.Name)):
-                name = self.__bb.toNameStr(target)
-            else:
-                name = ""  # fallback
-                self.generic_visit(target)
-
-            if name == self.__name:
-                self.mutations.append(node)
-
-    def visit_Call(self, node):
-        """
-        Public method handling 'Call' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        if isinstance(node.func, ast.Attribute):
-            name = self.__bb.toNameStr(node.func.value)
-            functionObject = name
-            functionName = node.func.attr
-
-            if (
-                functionObject == self.__name
-                and functionName in self.MUTATING_FUNCTIONS
-            ):
-                self.mutations.append(node)
-
-        self.generic_visit(node)
-
-    def visit(self, node):
-        """
-        Public method to inspect an ast node.
-
-        Like super-visit but supports iteration over lists.
-
-        @param node AST node to be traversed
-        @type TYPE
-        @return reference to the last processed node
-        @rtype ast.Node
-        """
-        if not isinstance(node, list):
-            return super().visit(node)
-
-        for elem in node:
-            super().visit(elem)
-        return node
-
-
-class ExceptBaseExceptionVisitor(ast.NodeVisitor):
-    """
-    Class to determine, if a 'BaseException' is re-raised.
-    """
-
-    def __init__(self, exceptNode):
-        """
-        Constructor
-
-        @param exceptNode exception node to be inspected
-        @type ast.ExceptHandler
+    def __checkDefaultMatchCase(self):
         """
-        super().__init__()
-        self.__root = exceptNode
-        self.__reRaised = False
-
-    def reRaised(self) -> bool:
-        """
-        Public method to check, if the exception is re-raised.
-
-        @return flag indicating a re-raised exception
-        @rtype bool
-        """
-        self.visit(self.__root)
-        return self.__reRaised
-
-    def visit_Raise(self, node):
-        """
-        Public method to handle 'Raise' nodes.
-
-        If we find a corresponding `raise` or `raise e` where e was from
-        `except BaseException as e:` then we mark re_raised as True and can
-        stop scanning.
-
-        @param node reference to the node to be processed
-        @type ast.Raise
-        """
-        if node.exc is None or (
-            isinstance(node.exc, ast.Name) and node.exc.id == self.__root.name
-        ):
-            self.__reRaised = True
-            return
-
-        super().generic_visit(node)
-
-    def visit_ExceptHandler(self, node: ast.ExceptHandler):
-        """
-        Public method to handle 'ExceptHandler' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.ExceptHandler
-        """
-        if node is not self.__root:
-            return  # entered a nested except - stop searching
-
-        super().generic_visit(node)
-
-
-class NameFinder(ast.NodeVisitor):
-    """
-    Class to extract a name out of a tree of nodes.
-    """
-
-    def __init__(self):
-        """
-        Constructor
-        """
-        super().__init__()
-
-        self.__names = {}
-
-    def visit_Name(self, node):
-        """
-        Public method to handle 'Name' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.Name
-        """
-        self.__names.setdefault(node.id, []).append(node)
-
-    def visit(self, node):
-        """
-        Public method to traverse a given AST node.
-
-        @param node AST node to be traversed
-        @type ast.Node
-        @return reference to the last processed node
-        @rtype ast.Node
-        """
-        if isinstance(node, list):
-            for elem in node:
-                super().visit(elem)
-            return node
-        else:
-            return super().visit(node)
-
-    def getNames(self):
-        """
-        Public method to return the extracted names and Name nodes.
-
-        @return dictionary containing the names as keys and the list of nodes
-        @rtype dict
-        """
-        return self.__names
-
-
-class NamedExprFinder(ast.NodeVisitor):
-    """
-    Class to extract names defined through an ast.NamedExpr.
-    """
-
-    def __init__(self):
-        """
-        Constructor
-        """
-        super().__init__()
-
-        self.__names = {}
-
-    def visit_NamedExpr(self, node: ast.NamedExpr):
-        """
-        Public method handling 'NamedExpr' nodes.
-
-        @param node reference to the node to be processed
-        @type ast.NamedExpr
-        """
-        self.__names.setdefault(node.target.id, []).append(node.target)
-
-        self.generic_visit(node)
-
-    def visit(self, node):
-        """
-        Public method to traverse a given AST node.
-
-        Like super-visit but supports iteration over lists.
-
-        @param node AST node to be traversed
-        @type TYPE
-        @return reference to the last processed node
-        @rtype ast.Node
-        """
-        if not isinstance(node, list):
-            super().visit(node)
-
-        for elem in node:
-            super().visit(elem)
-
-        return node
-
-    def getNames(self):
-        """
-        Public method to return the extracted names and Name nodes.
-
-        @return dictionary containing the names as keys and the list of nodes
-        @rtype dict
-        """
-        return self.__names
-
-
-class FunctionDefDefaultsVisitor(ast.NodeVisitor):
-    """
-    Class used by M506, M508 and M539.
-    """
-
-    def __init__(
-        self,
-        errorCodeCalls,  # M506 or M539
-        errorCodeLiterals,  # M508 or M539
-    ):
-        """
-        Constructor
-
-        @param errorCodeCalls error code for ast.Call nodes
-        @type str
-        @param errorCodeLiterals error code for literal nodes
-        @type str
-        """
-        self.__errorCodeCalls = errorCodeCalls
-        self.__errorCodeLiterals = errorCodeLiterals
-        for nodeType in BugbearMutableLiterals + BugbearMutableComprehensions:
-            setattr(
-                self, f"visit_{nodeType}", self.__visitMutableLiteralOrComprehension
-            )
-        self.errors = []
-        self.__argDepth = 0
-
-        super().__init__()
-
-    def __visitMutableLiteralOrComprehension(self, node):
-        """
-        Private method to flag mutable literals and comprehensions.
-
-        @param node AST node to be processed
-        @type ast.Dict, ast.List, ast.Set, ast.ListComp, ast.DictComp or ast.SetComp
-        """
-        # Flag M506 if mutable literal/comprehension is not nested.
-        # We only flag these at the top level of the expression as we
-        # cannot easily guarantee that nested mutable structures are not
-        # made immutable by outer operations, so we prefer no false positives.
-        # e.g.
-        # >>> def this_is_fine(a=frozenset({"a", "b", "c"})): ...
-        #
-        # >>> def this_is_not_fine_but_hard_to_detect(a=(lambda x: x)([1, 2, 3]))
-        #
-        # We do still search for cases of B008 within mutable structures though.
-        if self.__argDepth == 1:
-            self.errors.append((node, self.__errorCodeCalls))
-
-        # Check for nested functions.
-        self.generic_visit(node)
-
-    def visit_Call(self, node):
-        """
-        Public method to process Call nodes.
-
-        @param node AST node to be processed
-        @type ast.Call
-        """
-        callPath = ".".join(composeCallPath(node.func))
-        if callPath in BugbearMutableCalls:
-            self.errors.append((node, self.__errorCodeCalls))
-            self.generic_visit(node)
-            return
-
-        if callPath in BugbearImmutableCalls:
-            self.generic_visit(node)
-            return
-
-        # Check if function call is actually a float infinity/NaN literal
-        if callPath == "float" and len(node.args) == 1:
-            try:
-                value = float(ast.literal_eval(node.args[0]))
-            except Exception:  # secok
-                pass
-            else:
-                if math.isfinite(value):
-                    self.errors.append((node, self.__errorCodeLiterals))
-        else:
-            self.errors.append((node, self.__errorCodeLiterals))
-
-        # Check for nested functions.
-        self.generic_visit(node)
-
-    def visit_Lambda(self, node):
-        """
-        Public method to process Lambda nodes.
-
-        @param node AST node to be processed
-        @type ast.Lambda
-        """
-        # Don't recurse into lambda expressions
-        # as they are evaluated at call time.
-        pass
-
-    def visit(self, node):
-        """
-        Public method to traverse an AST node or a list of AST nodes.
-
-        This is an extended method that can also handle a list of AST nodes.
-
-        @param node AST node or list of AST nodes to be processed
-        @type ast.AST or list of ast.AST
-        """
-        self.__argDepth += 1
-        if isinstance(node, list):
-            for elem in node:
-                if elem is not None:
-                    super().visit(elem)
-        else:
-            super().visit(node)
-        self.__argDepth -= 1
-
-
-class M520NameFinder(NameFinder):
-    """
-    Class to extract a name out of a tree of nodes ignoring names defined within the
-    local scope of a comprehension.
-    """
-
-    def visit_GeneratorExp(self, node):
-        """
-        Public method to handle a generator expressions.
-
-        @param node reference to the node to be processed
-        @type ast.GeneratorExp
-        """
-        self.visit(node.generators)
-
-    def visit_ListComp(self, node):
-        """
-        Public method  to handle a list comprehension.
-
-        @param node reference to the node to be processed
-        @type TYPE
-        """
-        self.visit(node.generators)
-
-    def visit_DictComp(self, node):
-        """
-        Public method  to handle a dictionary comprehension.
-
-        @param node reference to the node to be processed
-        @type TYPE
-        """
-        self.visit(node.generators)
-
-    def visit_comprehension(self, node):
-        """
-        Public method  to handle the 'for' of a comprehension.
-
-        @param node reference to the node to be processed
-        @type ast.comprehension
-        """
-        self.visit(node.iter)
-
-    def visit_Lambda(self, node):
-        """
-        Public method  to handle a Lambda function.
-
-        @param node reference to the node to be processed
-        @type ast.Lambda
-        """
-        self.visit(node.body)
-        for lambdaArg in node.args.args:
-            self.getNames().pop(lambdaArg.arg, None)
-
-
-class ReturnVisitor(ast.NodeVisitor):
-    """
-    Class implementing a node visitor to check return statements.
-    """
-
-    Assigns = "assigns"
-    Refs = "refs"
-    Returns = "returns"
-
-    def __init__(self):
-        """
-        Constructor
-        """
-        super().__init__()
-
-        self.__stack = []
-        self.violations = []
-        self.__loopCount = 0
-
-    @property
-    def assigns(self):
-        """
-        Public method to get the Assign nodes.
-
-        @return dictionary containing the node name as key and line number
-            as value
-        @rtype dict
-        """
-        return self.__stack[-1][ReturnVisitor.Assigns]
-
-    @property
-    def refs(self):
-        """
-        Public method to get the References nodes.
-
-        @return dictionary containing the node name as key and line number
-            as value
-        @rtype dict
+        Private method to check the default match case.
         """
-        return self.__stack[-1][ReturnVisitor.Refs]
-
-    @property
-    def returns(self):
-        """
-        Public method to get the Return nodes.
-
-        @return dictionary containing the node name as key and line number
-            as value
-        @rtype dict
-        """
-        return self.__stack[-1][ReturnVisitor.Returns]
-
-    def visit_For(self, node):
-        """
-        Public method to handle a for loop.
-
-        @param node reference to the for node to handle
-        @type ast.For
-        """
-        self.__visitLoop(node)
-
-    def visit_AsyncFor(self, node):
-        """
-        Public method to handle an async for loop.
-
-        @param node reference to the async for node to handle
-        @type ast.AsyncFor
-        """
-        self.__visitLoop(node)
-
-    def visit_While(self, node):
-        """
-        Public method to handle a while loop.
-
-        @param node reference to the while node to handle
-        @type ast.While
-        """
-        self.__visitLoop(node)
-
-    def __visitLoop(self, node):
-        """
-        Private method to handle loop nodes.
-
-        @param node reference to the loop node to handle
-        @type ast.For, ast.AsyncFor or ast.While
-        """
-        self.__loopCount += 1
-        self.generic_visit(node)
-        self.__loopCount -= 1
-
-    def __visitWithStack(self, node):
-        """
-        Private method to traverse a given function node using a stack.
-
-        @param node AST node to be traversed
-        @type ast.FunctionDef or ast.AsyncFunctionDef
-        """
-        self.__stack.append(
-            {
-                ReturnVisitor.Assigns: defaultdict(list),
-                ReturnVisitor.Refs: defaultdict(list),
-                ReturnVisitor.Returns: [],
-            }
-        )
-
-        self.generic_visit(node)
-        self.__checkFunction(node)
-        self.__stack.pop()
-
-    def visit_FunctionDef(self, node):
-        """
-        Public method to handle a function definition.
-
-        @param node reference to the node to handle
-        @type ast.FunctionDef
-        """
-        self.__visitWithStack(node)
-
-    def visit_AsyncFunctionDef(self, node):
-        """
-        Public method to handle a function definition.
-
-        @param node reference to the node to handle
-        @type ast.AsyncFunctionDef
-        """
-        self.__visitWithStack(node)
-
-    def visit_Return(self, node):
-        """
-        Public method to handle a return node.
-
-        @param node reference to the node to handle
-        @type ast.Return
-        """
-        self.returns.append(node)
-        self.generic_visit(node)
-
-    def visit_Assign(self, node):
-        """
-        Public method to handle an assign node.
-
-        @param node reference to the node to handle
-        @type ast.Assign
-        """
-        if not self.__stack:
-            return
-
-        self.generic_visit(node.value)
-
-        target = node.targets[0]
-        if isinstance(target, ast.Tuple) and not isinstance(node.value, ast.Tuple):
-            # skip unpacking assign
-            return
-
-        self.__visitAssignTarget(target)
-
-    def visit_Name(self, node):
-        """
-        Public method to handle a name node.
-
-        @param node reference to the node to handle
-        @type ast.Name
-        """
-        if self.__stack:
-            self.refs[node.id].append(node.lineno)
-
-    def __visitAssignTarget(self, node):
-        """
-        Private method to handle an assign target node.
-
-        @param node reference to the node to handle
-        @type ast.AST
-        """
-        if isinstance(node, ast.Tuple):
-            for elt in node.elts:
-                self.__visitAssignTarget(elt)
-            return
-
-        if not self.__loopCount and isinstance(node, ast.Name):
-            self.assigns[node.id].append(node.lineno)
-            return
-
-        self.generic_visit(node)
-
-    def __checkFunction(self, node):
-        """
-        Private method to check a function definition node.
-
-        @param node reference to the node to check
-        @type ast.AsyncFunctionDef or ast.FunctionDef
-        """
-        if not self.returns or not node.body:
-            return
-
-        if len(node.body) == 1 and isinstance(node.body[-1], ast.Return):
-            # skip functions that consist of `return None` only
-            return
-
-        if not self.__resultExists():
-            self.__checkUnnecessaryReturnNone()
-            return
-
-        self.__checkImplicitReturnValue()
-        self.__checkImplicitReturn(node.body[-1])
-
-        for n in self.returns:
-            if n.value:
-                self.__checkUnnecessaryAssign(n.value)
-
-    def __isNone(self, node):
-        """
-        Private method to check, if a node value is None.
-
-        @param node reference to the node to check
-        @type ast.AST
-        @return flag indicating the node contains a None value
-        @rtype bool
-        """
-        return AstUtilities.isNameConstant(node) and AstUtilities.getValue(node) is None
-
-    def __isFalse(self, node):
-        """
-        Private method to check, if a node value is False.
-
-        @param node reference to the node to check
-        @type ast.AST
-        @return flag indicating the node contains a False value
-        @rtype bool
-        """
-        return (
-            AstUtilities.isNameConstant(node) and AstUtilities.getValue(node) is False
-        )
-
-    def __resultExists(self):
-        """
-        Private method to check the existance of a return result.
-
-        @return flag indicating the existence of a return result
-        @rtype bool
-        """
-        for node in self.returns:
-            value = node.value
-            if value and not self.__isNone(value):
-                return True
-
-        return False
-
-    def __checkImplicitReturnValue(self):
-        """
-        Private method to check for implicit return values.
-        """
-        for node in self.returns:
-            if not node.value:
-                self.violations.append((node, "M832"))
-
-    def __checkUnnecessaryReturnNone(self):
-        """
-        Private method to check for an unnecessary 'return None' statement.
-        """
-        for node in self.returns:
-            if self.__isNone(node.value):
-                self.violations.append((node, "M831"))
-
-    def __checkImplicitReturn(self, node):
-        """
-        Private method to check for an implicit return statement.
-
-        @param node reference to the node to check
-        @type ast.AST
-        """
-        if isinstance(node, ast.If):
-            if not node.body or not node.orelse:
-                self.violations.append((node, "M833"))
-                return
-
-            self.__checkImplicitReturn(node.body[-1])
-            self.__checkImplicitReturn(node.orelse[-1])
-            return
-
-        if isinstance(node, (ast.For, ast.AsyncFor)) and node.orelse:
-            self.__checkImplicitReturn(node.orelse[-1])
-            return
-
-        if isinstance(node, (ast.With, ast.AsyncWith)):
-            self.__checkImplicitReturn(node.body[-1])
-            return
-
-        if isinstance(node, ast.Assert) and self.__isFalse(node.test):
-            return
-
-        try:
-            okNodes = (ast.Return, ast.Raise, ast.While, ast.Try)
-        except AttributeError:
-            okNodes = (ast.Return, ast.Raise, ast.While)
-        if not isinstance(node, okNodes):
-            self.violations.append((node, "M833"))
-
-    def __checkUnnecessaryAssign(self, node):
-        """
-        Private method to check for an unnecessary assign statement.
-
-        @param node reference to the node to check
-        @type ast.AST
-        """
-        if not isinstance(node, ast.Name):
-            return
-
-        varname = node.id
-        returnLineno = node.lineno
-
-        if varname not in self.assigns:
-            return
-
-        if varname not in self.refs:
-            self.violations.append((node, "M834"))
-            return
-
-        if self.__hasRefsBeforeNextAssign(varname, returnLineno):
-            return
-
-        self.violations.append((node, "M834"))
-
-    def __hasRefsBeforeNextAssign(self, varname, returnLineno):
-        """
-        Private method to check for references before a following assign
-        statement.
-
-        @param varname variable name to check for
-        @type str
-        @param returnLineno line number of the return statement
-        @type int
-        @return flag indicating the existence of references
-        @rtype bool
-        """
-        beforeAssign = 0
-        afterAssign = None
-
-        for lineno in sorted(self.assigns[varname]):
-            if lineno > returnLineno:
-                afterAssign = lineno
-                break
-
-            if lineno <= returnLineno:
-                beforeAssign = lineno
-
-        for lineno in self.refs[varname]:
-            if lineno == returnLineno:
-                continue
-
-            if afterAssign:
-                if beforeAssign < lineno <= afterAssign:
-                    return True
-
-            elif beforeAssign < lineno:
-                return True
-
-        return False
-
-
-class DateTimeVisitor(ast.NodeVisitor):
-    """
-    Class implementing a node visitor to check datetime function calls.
-
-    Note: This class is modeled after flake8_datetimez checker.
-    """
-
-    def __init__(self):
-        """
-        Constructor
-        """
-        super().__init__()
-
-        self.violations = []
-
-    def __getFromKeywords(self, keywords, name):
-        """
-        Private method to get a keyword node given its name.
-
-        @param keywords list of keyword argument nodes
-        @type list of ast.AST
-        @param name name of the keyword node
-        @type str
-        @return keyword node
-        @rtype ast.AST
-        """
-        for keyword in keywords:
-            if keyword.arg == name:
-                return keyword
-
-        return None
-
-    def visit_Call(self, node):
-        """
-        Public method to handle a function call.
-
-        Every datetime related function call is check for use of the naive
-        variant (i.e. use without TZ info).
-
-        @param node reference to the node to be processed
-        @type ast.Call
-        """
-        # datetime.something()
-        isDateTimeClass = (
-            isinstance(node.func, ast.Attribute)
-            and isinstance(node.func.value, ast.Name)
-            and node.func.value.id == "datetime"
-        )
-
-        # datetime.datetime.something()
-        isDateTimeModuleAndClass = (
-            isinstance(node.func, ast.Attribute)
-            and isinstance(node.func.value, ast.Attribute)
-            and node.func.value.attr == "datetime"
-            and isinstance(node.func.value.value, ast.Name)
-            and node.func.value.value.id == "datetime"
-        )
-
-        if isDateTimeClass:
-            if node.func.attr == "datetime":
-                # datetime.datetime(2000, 1, 1, 0, 0, 0, 0,
-                #                   datetime.timezone.utc)
-                isCase1 = len(node.args) >= 8 and not (
-                    AstUtilities.isNameConstant(node.args[7])
-                    and AstUtilities.getValue(node.args[7]) is None
-                )
-
-                # datetime.datetime(2000, 1, 1, tzinfo=datetime.timezone.utc)
-                tzinfoKeyword = self.__getFromKeywords(node.keywords, "tzinfo")
-                isCase2 = tzinfoKeyword is not None and not (
-                    AstUtilities.isNameConstant(tzinfoKeyword.value)
-                    and AstUtilities.getValue(tzinfoKeyword.value) is None
-                )
-
-                if not (isCase1 or isCase2):
-                    self.violations.append((node, "M301"))
-
-            elif node.func.attr == "time":
-                # time(12, 10, 45, 0, datetime.timezone.utc)
-                isCase1 = len(node.args) >= 5 and not (
-                    AstUtilities.isNameConstant(node.args[4])
-                    and AstUtilities.getValue(node.args[4]) is None
-                )
-
-                # datetime.time(12, 10, 45, tzinfo=datetime.timezone.utc)
-                tzinfoKeyword = self.__getFromKeywords(node.keywords, "tzinfo")
-                isCase2 = tzinfoKeyword is not None and not (
-                    AstUtilities.isNameConstant(tzinfoKeyword.value)
-                    and AstUtilities.getValue(tzinfoKeyword.value) is None
-                )
-
-                if not (isCase1 or isCase2):
-                    self.violations.append((node, "M321"))
-
-            elif node.func.attr == "date":
-                self.violations.append((node, "M311"))
-
-        if isDateTimeClass or isDateTimeModuleAndClass:
-            if node.func.attr == "today":
-                self.violations.append((node, "M302"))
-
-            elif node.func.attr == "utcnow":
-                self.violations.append((node, "M303"))
-
-            elif node.func.attr == "utcfromtimestamp":
-                self.violations.append((node, "M304"))
-
-            elif node.func.attr in "now":
-                # datetime.now(UTC)
-                isCase1 = (
-                    len(node.args) == 1
-                    and len(node.keywords) == 0
-                    and not (
-                        AstUtilities.isNameConstant(node.args[0])
-                        and AstUtilities.getValue(node.args[0]) is None
-                    )
-                )
-
-                # datetime.now(tz=UTC)
-                tzKeyword = self.__getFromKeywords(node.keywords, "tz")
-                isCase2 = tzKeyword is not None and not (
-                    AstUtilities.isNameConstant(tzKeyword.value)
-                    and AstUtilities.getValue(tzKeyword.value) is None
-                )
-
-                if not (isCase1 or isCase2):
-                    self.violations.append((node, "M305"))
-
-            elif node.func.attr == "fromtimestamp":
-                # datetime.fromtimestamp(1234, UTC)
-                isCase1 = (
-                    len(node.args) == 2
-                    and len(node.keywords) == 0
-                    and not (
-                        AstUtilities.isNameConstant(node.args[1])
-                        and AstUtilities.getValue(node.args[1]) is None
-                    )
-                )
-
-                # datetime.fromtimestamp(1234, tz=UTC)
-                tzKeyword = self.__getFromKeywords(node.keywords, "tz")
-                isCase2 = tzKeyword is not None and not (
-                    AstUtilities.isNameConstant(tzKeyword.value)
-                    and AstUtilities.getValue(tzKeyword.value) is None
-                )
-
-                if not (isCase1 or isCase2):
-                    self.violations.append((node, "M306"))
-
-            elif node.func.attr == "strptime":
-                # datetime.strptime(...).replace(tzinfo=UTC)
-                parent = getattr(node, "_dtCheckerParent", None)
-                pparent = getattr(parent, "_dtCheckerParent", None)
-                if not (
-                    isinstance(parent, ast.Attribute) and parent.attr == "replace"
-                ) or not isinstance(pparent, ast.Call):
-                    isCase1 = False
-                else:
-                    tzinfoKeyword = self.__getFromKeywords(pparent.keywords, "tzinfo")
-                    isCase1 = tzinfoKeyword is not None and not (
-                        AstUtilities.isNameConstant(tzinfoKeyword.value)
-                        and AstUtilities.getValue(tzinfoKeyword.value) is None
-                    )
-
-                if not isCase1:
-                    self.violations.append((node, "M307"))
-
-            elif node.func.attr == "fromordinal":
-                self.violations.append((node, "M308"))
-
-        # date.something()
-        isDateClass = (
-            isinstance(node.func, ast.Attribute)
-            and isinstance(node.func.value, ast.Name)
-            and node.func.value.id == "date"
-        )
-
-        # datetime.date.something()
-        isDateModuleAndClass = (
-            isinstance(node.func, ast.Attribute)
-            and isinstance(node.func.value, ast.Attribute)
-            and node.func.value.attr == "date"
-            and isinstance(node.func.value.value, ast.Name)
-            and node.func.value.value.id == "datetime"
-        )
-
-        if isDateClass or isDateModuleAndClass:
-            if node.func.attr == "today":
-                self.violations.append((node, "M312"))
-
-            elif node.func.attr == "fromtimestamp":
-                self.violations.append((node, "M313"))
-
-            elif node.func.attr == "fromordinal":
-                self.violations.append((node, "M314"))
-
-            elif node.func.attr == "fromisoformat":
-                self.violations.append((node, "M315"))
-
-        self.generic_visit(node)
-
-
-class SysVersionVisitor(ast.NodeVisitor):
-    """
-    Class implementing a node visitor to check the use of sys.version and
-    sys.version_info.
-
-    Note: This class is modeled after flake8-2020 checker.
-    """
-
-    def __init__(self):
-        """
-        Constructor
-        """
-        super().__init__()
-
-        self.violations = []
-        self.__fromImports = {}
-
-    def visit_ImportFrom(self, node):
-        """
-        Public method to handle a from ... import ... statement.
-
-        @param node reference to the node to be processed
-        @type ast.ImportFrom
-        """
-        for alias in node.names:
-            if node.module is not None and not alias.asname:
-                self.__fromImports[alias.name] = node.module
-
-        self.generic_visit(node)
-
-    def __isSys(self, attr, node):
-        """
-        Private method to check for a reference to sys attribute.
-
-        @param attr attribute name
-        @type str
-        @param node reference to the node to be checked
-        @type ast.Node
-        @return flag indicating a match
-        @rtype bool
-        """
-        match = False
-        if (
-            isinstance(node, ast.Attribute)
-            and isinstance(node.value, ast.Name)
-            and node.value.id == "sys"
-            and node.attr == attr
-        ) or (
-            isinstance(node, ast.Name)
-            and node.id == attr
-            and self.__fromImports.get(node.id) == "sys"
-        ):
-            match = True
-
-        return match
-
-    def __isSysVersionUpperSlice(self, node, n):
-        """
-        Private method to check the upper slice of sys.version.
-
-        @param node reference to the node to be checked
-        @type ast.Node
-        @param n slice value to check against
-        @type int
-        @return flag indicating a match
-        @rtype bool
-        """
-        return (
-            self.__isSys("version", node.value)
-            and isinstance(node.slice, ast.Slice)
-            and node.slice.lower is None
-            and AstUtilities.isNumber(node.slice.upper)
-            and AstUtilities.getValue(node.slice.upper) == n
-            and node.slice.step is None
-        )
-
-    def visit_Subscript(self, node):
-        """
-        Public method to handle a subscript.
-
-        @param node reference to the node to be processed
-        @type ast.Subscript
-        """
-        if self.__isSysVersionUpperSlice(node, 1):
-            self.violations.append((node.value, "M423"))
-        elif self.__isSysVersionUpperSlice(node, 3):
-            self.violations.append((node.value, "M401"))
-        elif (
-            self.__isSys("version", node.value)
-            and isinstance(node.slice, ast.Index)
-            and AstUtilities.isNumber(node.slice.value)
-            and AstUtilities.getValue(node.slice.value) == 2
-        ):
-            self.violations.append((node.value, "M402"))
-        elif (
-            self.__isSys("version", node.value)
-            and isinstance(node.slice, ast.Index)
-            and AstUtilities.isNumber(node.slice.value)
-            and AstUtilities.getValue(node.slice.value) == 0
-        ):
-            self.violations.append((node.value, "M421"))
-
-        self.generic_visit(node)
-
-    def visit_Compare(self, node):
-        """
-        Public method to handle a comparison.
-
-        @param node reference to the node to be processed
-        @type ast.Compare
-        """
-        if (
-            isinstance(node.left, ast.Subscript)
-            and self.__isSys("version_info", node.left.value)
-            and isinstance(node.left.slice, ast.Index)
-            and AstUtilities.isNumber(node.left.slice.value)
-            and AstUtilities.getValue(node.left.slice.value) == 0
-            and len(node.ops) == 1
-            and isinstance(node.ops[0], ast.Eq)
-            and AstUtilities.isNumber(node.comparators[0])
-            and AstUtilities.getValue(node.comparators[0]) == 3
-        ):
-            self.violations.append((node.left, "M411"))
-        elif (
-            self.__isSys("version", node.left)
-            and len(node.ops) == 1
-            and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
-            and AstUtilities.isString(node.comparators[0])
-        ):
-            if len(AstUtilities.getValue(node.comparators[0])) == 1:
-                errorCode = "M422"
-            else:
-                errorCode = "M403"
-            self.violations.append((node.left, errorCode))
-        elif (
-            isinstance(node.left, ast.Subscript)
-            and self.__isSys("version_info", node.left.value)
-            and isinstance(node.left.slice, ast.Index)
-            and AstUtilities.isNumber(node.left.slice.value)
-            and AstUtilities.getValue(node.left.slice.value) == 1
-            and len(node.ops) == 1
-            and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
-            and AstUtilities.isNumber(node.comparators[0])
-        ):
-            self.violations.append((node, "M413"))
-        elif (
-            isinstance(node.left, ast.Attribute)
-            and self.__isSys("version_info", node.left.value)
-            and node.left.attr == "minor"
-            and len(node.ops) == 1
-            and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
-            and AstUtilities.isNumber(node.comparators[0])
-        ):
-            self.violations.append((node, "M414"))
-
-        self.generic_visit(node)
-
-    def visit_Attribute(self, node):
-        """
-        Public method to handle an attribute.
-
-        @param node reference to the node to be processed
-        @type ast.Attribute
-        """
-        if (
-            isinstance(node.value, ast.Name)
-            and node.value.id == "six"
-            and node.attr == "PY3"
-        ):
-            self.violations.append((node, "M412"))
-
-        self.generic_visit(node)
-
-    def visit_Name(self, node):
-        """
-        Public method to handle an name.
-
-        @param node reference to the node to be processed
-        @type ast.Name
-        """
-        if node.id == "PY3" and self.__fromImports.get(node.id) == "six":
-            self.violations.append((node, "M412"))
-
-        self.generic_visit(node)
-
-
-#
-# eflag: noqa = M891
+        visitor = DefaultMatchCaseVisitor()
+        visitor.visit(self.tree)
+        for violation in visitor.violations:
+            self.addErrorFromNode(*violation)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/ReturnVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,444 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a node visitor to check return statements.
+"""
+
+import ast
+
+from collections import defaultdict
+
+import AstUtilities
+
+
+class ReturnVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check return statements.
+
+    Note 1: This class is modeled after flake8-return v1.2.0 checker without
+    checking for superfluous return.
+    Note 2: This class is a combination of the main visitor class and the various
+    mixin classes of of the above checker.
+    """
+
+    Assigns = "assigns"
+    Loops = "loops"
+    Refs = "refs"
+    Returns = "returns"
+    Tries = "tries"
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.violations = []
+
+        self.__stack = []
+
+    @property
+    def assigns(self):
+        """
+        Public method to get the Assign nodes.
+
+        @return dictionary containing the node name as key and line number
+            as value
+        @rtype dict
+        """
+        return self.__stack[-1][ReturnVisitor.Assigns]
+
+    @property
+    def refs(self):
+        """
+        Public method to get the References nodes.
+
+        @return dictionary containing the node name as key and line number
+            as value
+        @rtype dict
+        """
+        return self.__stack[-1][ReturnVisitor.Refs]
+
+    @property
+    def tries(self):
+        """
+        Public method to get the Try nodes.
+
+        @return dictionary containing the node name as key and line number
+            as value
+        @rtype dict
+        """
+        return self.__stack[-1][ReturnVisitor.Tries]
+
+    @property
+    def loops(self):
+        """
+        Public method to get the Loop nodes.
+
+        @return dictionary containing the node name as key and line number
+            as value
+        @rtype dict
+        """
+        return self.__stack[-1][ReturnVisitor.Loops]
+
+    @property
+    def returns(self):
+        """
+        Public method to get the Return nodes.
+
+        @return dictionary containing the node name as key and line number
+            as value
+        @rtype dict
+        """
+        return self.__stack[-1][ReturnVisitor.Returns]
+
+    def visit_For(self, node):
+        """
+        Public method to handle a for loop.
+
+        @param node reference to the for node to handle
+        @type ast.For
+        """
+        self.__visitLoop(node)
+
+    def visit_AsyncFor(self, node):
+        """
+        Public method to handle an async for loop.
+
+        @param node reference to the async for node to handle
+        @type ast.AsyncFor
+        """
+        self.__visitLoop(node)
+
+    def visit_While(self, node):
+        """
+        Public method to handle a while loop.
+
+        @param node reference to the while node to handle
+        @type ast.While
+        """
+        self.__visitLoop(node)
+
+    def __visitLoop(self, node):
+        """
+        Private method to handle loop nodes.
+
+        @param node reference to the loop node to handle
+        @type ast.For, ast.AsyncFor or ast.While
+        """
+        if self.__stack and hasattr(node, "end_lineno") and node.end_lineno is not None:
+            self.loops[node.lineno] = node.end_lineno
+
+        self.generic_visit(node)
+
+    def __visitWithStack(self, node):
+        """
+        Private method to traverse a given function node using a stack.
+
+        @param node AST node to be traversed
+        @type ast.FunctionDef or ast.AsyncFunctionDef
+        """
+        self.__stack.append(
+            {
+                ReturnVisitor.Assigns: defaultdict(list),
+                ReturnVisitor.Refs: defaultdict(list),
+                ReturnVisitor.Loops: defaultdict(int),
+                ReturnVisitor.Tries: defaultdict(int),
+                ReturnVisitor.Returns: [],
+            }
+        )
+
+        self.generic_visit(node)
+        self.__checkFunction(node)
+        self.__stack.pop()
+
+    def visit_FunctionDef(self, node):
+        """
+        Public method to handle a function definition.
+
+        @param node reference to the node to handle
+        @type ast.FunctionDef
+        """
+        self.__visitWithStack(node)
+
+    def visit_AsyncFunctionDef(self, node):
+        """
+        Public method to handle a function definition.
+
+        @param node reference to the node to handle
+        @type ast.AsyncFunctionDef
+        """
+        self.__visitWithStack(node)
+
+    def visit_Return(self, node):
+        """
+        Public method to handle a return node.
+
+        @param node reference to the node to handle
+        @type ast.Return
+        """
+        self.returns.append(node)
+        self.generic_visit(node)
+
+    def visit_Assign(self, node):
+        """
+        Public method to handle an assign node.
+
+        @param node reference to the node to handle
+        @type ast.Assign
+        """
+        if not self.__stack:
+            return
+
+        if isinstance(node.value, ast.Name):
+            self.refs[node.value.id].append(node.value.lineno)
+
+        self.generic_visit(node.value)
+
+        target = node.targets[0]
+        if isinstance(target, ast.Tuple) and not isinstance(node.value, ast.Tuple):
+            # skip unpacking assign
+            return
+
+        self.__visitAssignTarget(target)
+
+    def visit_Name(self, node):
+        """
+        Public method to handle a name node.
+
+        @param node reference to the node to handle
+        @type ast.Name
+        """
+        if self.__stack:
+            self.refs[node.id].append(node.lineno)
+
+    def visit_Try(self, node):
+        """
+        Public method to handle a try/except node.
+
+        @param node reference to the node to handle
+        @type ast.Try
+        """
+        if self.__stack and hasattr(node, "end_lineno") and node.end_lineno is not None:
+            self.tries[node.lineno] = node.end_lineno
+
+        self.generic_visit(node)
+
+    def __visitAssignTarget(self, node):
+        """
+        Private method to handle an assign target node.
+
+        @param node reference to the node to handle
+        @type ast.AST
+        """
+        if isinstance(node, ast.Tuple):
+            for elt in node.elts:
+                self.__visitAssignTarget(elt)
+            return
+
+        if isinstance(node, ast.Name):
+            self.assigns[node.id].append(node.lineno)
+            return
+
+        self.generic_visit(node)
+
+    def __checkFunction(self, node):
+        """
+        Private method to check a function definition node.
+
+        @param node reference to the node to check
+        @type ast.AsyncFunctionDef or ast.FunctionDef
+        """
+        if not self.returns or not node.body:
+            return
+
+        if len(node.body) == 1 and isinstance(node.body[-1], ast.Return):
+            # skip functions that consist of `return None` only
+            return
+
+        if not self.__resultExists():
+            self.__checkUnnecessaryReturnNone()
+            return
+
+        self.__checkImplicitReturnValue()
+        self.__checkImplicitReturn(node.body[-1])
+
+        for n in self.returns:
+            if n.value:
+                self.__checkUnnecessaryAssign(n.value)
+
+    def __isNone(self, node):
+        """
+        Private method to check, if a node value is None.
+
+        @param node reference to the node to check
+        @type ast.AST
+        @return flag indicating the node contains a None value
+        @rtype bool
+        """
+        return AstUtilities.isNameConstant(node) and AstUtilities.getValue(node) is None
+
+    def __isFalse(self, node):
+        """
+        Private method to check, if a node value is False.
+
+        @param node reference to the node to check
+        @type ast.AST
+        @return flag indicating the node contains a False value
+        @rtype bool
+        """
+        return (
+            AstUtilities.isNameConstant(node) and AstUtilities.getValue(node) is False
+        )
+
+    def __resultExists(self):
+        """
+        Private method to check the existance of a return result.
+
+        @return flag indicating the existence of a return result
+        @rtype bool
+        """
+        for node in self.returns:
+            value = node.value
+            if value and not self.__isNone(value):
+                return True
+
+        return False
+
+    def __checkImplicitReturnValue(self):
+        """
+        Private method to check for implicit return values.
+        """
+        for node in self.returns:
+            if not node.value:
+                self.violations.append((node, "M-832"))
+
+    def __checkUnnecessaryReturnNone(self):
+        """
+        Private method to check for an unnecessary 'return None' statement.
+        """
+        for node in self.returns:
+            if self.__isNone(node.value):
+                self.violations.append((node, "M-831"))
+
+    def __checkImplicitReturn(self, node):
+        """
+        Private method to check for an implicit return statement.
+
+        @param node reference to the node to check
+        @type ast.AST
+        """
+        if isinstance(node, ast.If):
+            if not node.body or not node.orelse:
+                self.violations.append((node, "M-833"))
+                return
+
+            self.__checkImplicitReturn(node.body[-1])
+            self.__checkImplicitReturn(node.orelse[-1])
+            return
+
+        if isinstance(node, (ast.For, ast.AsyncFor)) and node.orelse:
+            self.__checkImplicitReturn(node.orelse[-1])
+            return
+
+        if isinstance(node, (ast.With, ast.AsyncWith, ast.For)):
+            self.__checkImplicitReturn(node.body[-1])
+            return
+
+        if isinstance(node, ast.Assert) and self.__isFalse(node.test):
+            return
+
+        try:
+            okNodes = (ast.Return, ast.Raise, ast.While, ast.Try)
+        except AttributeError:
+            okNodes = (ast.Return, ast.Raise, ast.While)
+        if not isinstance(node, okNodes):
+            self.violations.append((node, "M-833"))
+
+    def __checkUnnecessaryAssign(self, node):
+        """
+        Private method to check for an unnecessary assign statement.
+
+        @param node reference to the node to check
+        @type ast.AST
+        """
+        if not isinstance(node, ast.Name):
+            return
+
+        varname = node.id
+        returnLineno = node.lineno
+
+        if varname not in self.assigns:
+            return
+
+        if varname not in self.refs:
+            self.violations.append((node, "M-834"))
+            return
+
+        if self.__hasRefsBeforeNextAssign(varname, returnLineno):
+            return
+
+        if self.__hasRefsOrAssignsWithinTryOrLoop(varname):
+            return
+
+        self.violations.append((node, "M-834"))
+
+    def __hasRefsOrAssignsWithinTryOrLoop(self, varname: str) -> bool:
+        """
+        Private method to check for references or assignments in exception handlers
+        or loops.
+
+        @param varname name of the variable to check for
+        @type str
+        @return flag indicating a reference or assignment
+        @rtype bool
+        """
+        for item in [*self.refs[varname], *self.assigns[varname]]:
+            for tryStart, tryEnd in self.tries.items():
+                if tryStart < item <= tryEnd:
+                    return True
+
+            for loopStart, loopEnd in self.loops.items():
+                if loopStart < item <= loopEnd:
+                    return True
+
+        return False
+
+    def __hasRefsBeforeNextAssign(self, varname, returnLineno):
+        """
+        Private method to check for references before a following assign
+        statement.
+
+        @param varname variable name to check for
+        @type str
+        @param returnLineno line number of the return statement
+        @type int
+        @return flag indicating the existence of references
+        @rtype bool
+        """
+        beforeAssign = 0
+        afterAssign = None
+
+        for lineno in sorted(self.assigns[varname]):
+            if lineno > returnLineno:
+                afterAssign = lineno
+                break
+
+            if lineno <= returnLineno:
+                beforeAssign = lineno
+
+        for lineno in self.refs[varname]:
+            if lineno == returnLineno:
+                continue
+
+            if afterAssign:
+                if beforeAssign < lineno <= afterAssign:
+                    return True
+
+            elif beforeAssign < lineno:
+                return True
+
+        return False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/SysVersionVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,198 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a node visitor to check the use of sys.version and sys.version_info.
+"""
+
+import ast
+
+import AstUtilities
+
+
+class SysVersionVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check the use of sys.version and
+    sys.version_info.
+
+    Note: This class is modeled after flake8-2020 v1.8.1.
+    """
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+
+        self.violations = []
+        self.__fromImports = {}
+
+    def visit_ImportFrom(self, node):
+        """
+        Public method to handle a from ... import ... statement.
+
+        @param node reference to the node to be processed
+        @type ast.ImportFrom
+        """
+        for alias in node.names:
+            if node.module is not None and not alias.asname:
+                self.__fromImports[alias.name] = node.module
+
+        self.generic_visit(node)
+
+    def __isSys(self, attr, node):
+        """
+        Private method to check for a reference to sys attribute.
+
+        @param attr attribute name
+        @type str
+        @param node reference to the node to be checked
+        @type ast.Node
+        @return flag indicating a match
+        @rtype bool
+        """
+        match = False
+        if (
+            isinstance(node, ast.Attribute)
+            and isinstance(node.value, ast.Name)
+            and node.value.id == "sys"
+            and node.attr == attr
+        ) or (
+            isinstance(node, ast.Name)
+            and node.id == attr
+            and self.__fromImports.get(node.id) == "sys"
+        ):
+            match = True
+
+        return match
+
+    def __isSysVersionUpperSlice(self, node, n):
+        """
+        Private method to check the upper slice of sys.version.
+
+        @param node reference to the node to be checked
+        @type ast.Node
+        @param n slice value to check against
+        @type int
+        @return flag indicating a match
+        @rtype bool
+        """
+        return (
+            self.__isSys("version", node.value)
+            and isinstance(node.slice, ast.Slice)
+            and node.slice.lower is None
+            and AstUtilities.isNumber(node.slice.upper)
+            and AstUtilities.getValue(node.slice.upper) == n
+            and node.slice.step is None
+        )
+
+    def visit_Subscript(self, node):
+        """
+        Public method to handle a subscript.
+
+        @param node reference to the node to be processed
+        @type ast.Subscript
+        """
+        if self.__isSysVersionUpperSlice(node, 1):
+            self.violations.append((node.value, "M-423"))
+        elif self.__isSysVersionUpperSlice(node, 3):
+            self.violations.append((node.value, "M-401"))
+        elif (
+            self.__isSys("version", node.value)
+            and isinstance(node.slice, ast.Index)
+            and AstUtilities.isNumber(node.slice.value)
+            and AstUtilities.getValue(node.slice.value) == 2
+        ):
+            self.violations.append((node.value, "M-402"))
+        elif (
+            self.__isSys("version", node.value)
+            and isinstance(node.slice, ast.Index)
+            and AstUtilities.isNumber(node.slice.value)
+            and AstUtilities.getValue(node.slice.value) == 0
+        ):
+            self.violations.append((node.value, "M-421"))
+
+        self.generic_visit(node)
+
+    def visit_Compare(self, node):
+        """
+        Public method to handle a comparison.
+
+        @param node reference to the node to be processed
+        @type ast.Compare
+        """
+        if (
+            isinstance(node.left, ast.Subscript)
+            and self.__isSys("version_info", node.left.value)
+            and isinstance(node.left.slice, ast.Index)
+            and AstUtilities.isNumber(node.left.slice.value)
+            and AstUtilities.getValue(node.left.slice.value) == 0
+            and len(node.ops) == 1
+            and isinstance(node.ops[0], ast.Eq)
+            and AstUtilities.isNumber(node.comparators[0])
+            and AstUtilities.getValue(node.comparators[0]) == 3
+        ):
+            self.violations.append((node.left, "M-411"))
+        elif (
+            self.__isSys("version", node.left)
+            and len(node.ops) == 1
+            and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
+            and AstUtilities.isString(node.comparators[0])
+        ):
+            if len(AstUtilities.getValue(node.comparators[0])) == 1:
+                errorCode = "M-422"
+            else:
+                errorCode = "M-403"
+            self.violations.append((node.left, errorCode))
+        elif (
+            isinstance(node.left, ast.Subscript)
+            and self.__isSys("version_info", node.left.value)
+            and isinstance(node.left.slice, ast.Index)
+            and AstUtilities.isNumber(node.left.slice.value)
+            and AstUtilities.getValue(node.left.slice.value) == 1
+            and len(node.ops) == 1
+            and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
+            and AstUtilities.isNumber(node.comparators[0])
+        ):
+            self.violations.append((node, "M-413"))
+        elif (
+            isinstance(node.left, ast.Attribute)
+            and self.__isSys("version_info", node.left.value)
+            and node.left.attr == "minor"
+            and len(node.ops) == 1
+            and isinstance(node.ops[0], (ast.Lt, ast.LtE, ast.Gt, ast.GtE))
+            and AstUtilities.isNumber(node.comparators[0])
+        ):
+            self.violations.append((node, "M-414"))
+
+        self.generic_visit(node)
+
+    def visit_Attribute(self, node):
+        """
+        Public method to handle an attribute.
+
+        @param node reference to the node to be processed
+        @type ast.Attribute
+        """
+        if (
+            isinstance(node.value, ast.Name)
+            and node.value.id == "six"
+            and node.attr == "PY3"
+        ):
+            self.violations.append((node, "M-412"))
+
+        self.generic_visit(node)
+
+    def visit_Name(self, node):
+        """
+        Public method to handle an name.
+
+        @param node reference to the node to be processed
+        @type ast.Name
+        """
+        if node.id == "PY3" and self.__fromImports.get(node.id) == "six":
+            self.violations.append((node, "M-412"))
+
+        self.generic_visit(node)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/TextVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a node visitor for bytes and str instances.
+"""
+
+import ast
+
+import AstUtilities
+
+
+class TextVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor for bytes and str instances.
+
+    It tries to detect docstrings as string of the first expression of each
+    module, class or function.
+    """
+
+    # modeled after the string format flake8 extension
+
+    def __init__(self):
+        """
+        Constructor
+        """
+        super().__init__()
+        self.nodes = []
+        self.calls = {}
+
+    def __addNode(self, node):
+        """
+        Private method to add a node to our list of nodes.
+
+        @param node reference to the node to add
+        @type ast.AST
+        """
+        if not hasattr(node, "is_docstring"):
+            node.is_docstring = False
+        self.nodes.append(node)
+
+    def visit_Constant(self, node):
+        """
+        Public method to handle constant nodes.
+
+        @param node reference to the bytes node
+        @type ast.Constant
+        """
+        if AstUtilities.isBaseString(node):
+            self.__addNode(node)
+        else:
+            super().generic_visit(node)
+
+    def __visitDefinition(self, node):
+        """
+        Private method handling class and function definitions.
+
+        @param node reference to the node to handle
+        @type ast.FunctionDef, ast.AsyncFunctionDef or ast.ClassDef
+        """
+        # Manually traverse class or function definition
+        # * Handle decorators normally
+        # * Use special check for body content
+        # * Don't handle the rest (e.g. bases)
+        for decorator in node.decorator_list:
+            self.visit(decorator)
+        self.__visitBody(node)
+
+    def __visitBody(self, node):
+        """
+        Private method to traverse the body of the node manually.
+
+        If the first node is an expression which contains a string or bytes it
+        marks that as a docstring.
+
+        @param node reference to the node to traverse
+        @type ast.AST
+        """
+        if (
+            node.body
+            and isinstance(node.body[0], ast.Expr)
+            and AstUtilities.isBaseString(node.body[0].value)
+        ):
+            node.body[0].value.is_docstring = True
+
+        for subnode in node.body:
+            self.visit(subnode)
+
+    def visit_Module(self, node):
+        """
+        Public method to handle a module.
+
+        @param node reference to the node to handle
+        @type ast.Module
+        """
+        self.__visitBody(node)
+
+    def visit_ClassDef(self, node):
+        """
+        Public method to handle a class definition.
+
+        @param node reference to the node to handle
+        @type ast.ClassDef
+        """
+        # Skipped nodes: ('name', 'bases', 'keywords', 'starargs', 'kwargs')
+        self.__visitDefinition(node)
+
+    def visit_FunctionDef(self, node):
+        """
+        Public method to handle a function definition.
+
+        @param node reference to the node to handle
+        @type ast.FunctionDef
+        """
+        # Skipped nodes: ('name', 'args', 'returns')
+        self.__visitDefinition(node)
+
+    def visit_AsyncFunctionDef(self, node):
+        """
+        Public method to handle an asynchronous function definition.
+
+        @param node reference to the node to handle
+        @type ast.AsyncFunctionDef
+        """
+        # Skipped nodes: ('name', 'args', 'returns')
+        self.__visitDefinition(node)
+
+    def visit_Call(self, node):
+        """
+        Public method to handle a function call.
+
+        @param node reference to the node to handle
+        @type ast.Call
+        """
+        if isinstance(node.func, ast.Attribute) and node.func.attr == "format":
+            if AstUtilities.isBaseString(node.func.value):
+                self.calls[node.func.value] = (node, False)
+            elif (
+                isinstance(node.func.value, ast.Name)
+                and node.func.value.id == "str"
+                and node.args
+                and AstUtilities.isBaseString(node.args[0])
+            ):
+                self.calls[node.args[0]] = (node, True)
+        super().generic_visit(node)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -13,317 +13,317 @@
 
 _miscellaneousMessages = {
     ## Coding line
-    "M101": QCoreApplication.translate(
+    "M-101": QCoreApplication.translate(
         "MiscellaneousChecker",
         "coding magic comment not found",
     ),
-    "M102": QCoreApplication.translate(
+    "M-102": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unknown encoding ({0}) found in coding magic comment",
     ),
     ## Copyright
-    "M111": QCoreApplication.translate(
+    "M-111": QCoreApplication.translate(
         "MiscellaneousChecker",
         "copyright notice not present",
     ),
-    "M112": QCoreApplication.translate(
+    "M-112": QCoreApplication.translate(
         "MiscellaneousChecker",
         "copyright notice contains invalid author",
     ),
     ## Shadowed Builtins
-    "M131": QCoreApplication.translate(
+    "M-131": QCoreApplication.translate(
         "MiscellaneousChecker",
         '"{0}" is a Python builtin and is being shadowed; '
         "consider renaming the variable",
     ),
-    "M132": QCoreApplication.translate(
+    "M-132": QCoreApplication.translate(
         "MiscellaneousChecker",
         '"{0}" is used as an argument and thus shadows a '
         "Python builtin; consider renaming the argument",
     ),
     ## Comprehensions
-    "M180": QCoreApplication.translate(
+    "M-180": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary generator - rewrite as a list comprehension",
     ),
-    "M181": QCoreApplication.translate(
+    "M-181": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary generator - rewrite as a set comprehension",
     ),
-    "M182": QCoreApplication.translate(
+    "M-182": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary generator - rewrite as a dict comprehension",
     ),
-    "M183": QCoreApplication.translate(
+    "M-183": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary list comprehension - rewrite as a set comprehension",
     ),
-    "M184": QCoreApplication.translate(
+    "M-184": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary list comprehension - rewrite as a dict comprehension",
     ),
-    "M185": QCoreApplication.translate(
+    "M-185": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} literal - rewrite as a {1} literal",
     ),
-    "M186": QCoreApplication.translate(
+    "M-186": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} literal - rewrite as a {1} literal",
     ),
-    "M188": QCoreApplication.translate(
+    "M-188": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} call - rewrite as a literal",
     ),
-    "M189a": QCoreApplication.translate(
+    "M-189a": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} passed to tuple() - remove the outer call to {1}()",
     ),
-    "M189b": QCoreApplication.translate(
+    "M-189b": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} passed to tuple() - rewrite as a {1} literal",
     ),
-    "M190a": QCoreApplication.translate(
+    "M-190a": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} passed to list() - remove the outer call to {1}()",
     ),
-    "M190b": QCoreApplication.translate(
+    "M-190b": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} passed to list() - rewrite as a {1} literal",
     ),
-    "M191": QCoreApplication.translate(
+    "M-191": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary list call - remove the outer call to list()",
     ),
-    "M193a": QCoreApplication.translate(
+    "M-193a": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} call around {1}() - toggle reverse argument to sorted()",
     ),
-    "M193b": QCoreApplication.translate(
+    "M-193b": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} call around {1}() - use sorted(..., reverse={2!r})",
     ),
-    "M193c": QCoreApplication.translate(
+    "M-193c": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} call around {1}()",
     ),
-    "M194": QCoreApplication.translate(
+    "M-194": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} call within {1}()",
     ),
-    "M195": QCoreApplication.translate(
+    "M-195": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary subscript reversal of iterable within {0}()",
     ),
-    "M196": QCoreApplication.translate(
+    "M-196": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} comprehension - rewrite using {0}()",
     ),
-    "M197": QCoreApplication.translate(
+    "M-197": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary use of map - use a {0} instead",
     ),
-    "M198": QCoreApplication.translate(
+    "M-198": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} passed to dict() - remove the outer call to dict()",
     ),
-    "M199": QCoreApplication.translate(
+    "M-199": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary list comprehension passed to {0}() prevents short-circuiting"
         " - rewrite as a generator",
     ),
-    "M200": QCoreApplication.translate(
+    "M-200": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unnecessary {0} comprehension - rewrite using dict.fromkeys()",
     ),
     ## Dictionaries with sorted keys
-    "M251": QCoreApplication.translate(
+    "M-251": QCoreApplication.translate(
         "MiscellaneousChecker",
         "sort keys - '{0}' should be before '{1}'",
     ),
     ## Property
-    "M260": QCoreApplication.translate(
+    "M-260": QCoreApplication.translate(
         "MiscellaneousChecker",
         "the number of arguments for property getter method is wrong"
         " (should be 1 instead of {0})",
     ),
-    "M261": QCoreApplication.translate(
+    "M-261": QCoreApplication.translate(
         "MiscellaneousChecker",
         "the number of arguments for property setter method is wrong"
         " (should be 2 instead of {0})",
     ),
-    "M262": QCoreApplication.translate(
+    "M-262": QCoreApplication.translate(
         "MiscellaneousChecker",
         "the number of arguments for property deleter method is wrong"
         " (should be 1 instead of {0})",
     ),
-    "M263": QCoreApplication.translate(
+    "M-263": QCoreApplication.translate(
         "MiscellaneousChecker",
         "the name of the setter method is wrong (should be '{0}' instead of '{1}')",
     ),
-    "M264": QCoreApplication.translate(
+    "M-264": QCoreApplication.translate(
         "MiscellaneousChecker",
         "the name of the deleter method is wrong (should be '{0}' instead of '{1}')",
     ),
-    "M265": QCoreApplication.translate(
+    "M-265": QCoreApplication.translate(
         "MiscellaneousChecker",
         "the name of the setter decorator is wrong (should be '{0}' instead of '{1}')",
     ),
-    "M266": QCoreApplication.translate(
+    "M-266": QCoreApplication.translate(
         "MiscellaneousChecker",
         "the name of the deleter decorator is wrong (should be '{0}' instead of '{1}')",
     ),
-    "M267": QCoreApplication.translate(
+    "M-267": QCoreApplication.translate(
         "MiscellaneousChecker",
         "multiple decorators were used to declare property '{0}'",
     ),
     ## Naive datetime usage
-    "M301": QCoreApplication.translate(
+    "M-301": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime()' without 'tzinfo' argument should be avoided",
     ),
-    "M302": QCoreApplication.translate(
+    "M-302": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime.today()' should be avoided.\n"
         "Use 'datetime.datetime.now(tz=)' instead.",
     ),
-    "M303": QCoreApplication.translate(
+    "M-303": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime.utcnow()' should be avoided.\n"
         "Use 'datetime.datetime.now(tz=datetime.timezone.utc)' instead.",
     ),
-    "M304": QCoreApplication.translate(
+    "M-304": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime.utcfromtimestamp()' should be avoided.\n"
         "Use 'datetime.datetime.fromtimestamp(..., tz=datetime.timezone.utc)' instead.",
     ),
-    "M305": QCoreApplication.translate(
+    "M-305": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime.now()' without 'tz' argument should be avoided",
     ),
-    "M306": QCoreApplication.translate(
+    "M-306": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime.fromtimestamp()' without 'tz' argument"
         " should be avoided",
     ),
-    "M307": QCoreApplication.translate(
+    "M-307": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime.strptime()' should be followed by"
         " '.replace(tzinfo=)'",
     ),
-    "M308": QCoreApplication.translate(
+    "M-308": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.datetime.fromordinal()' should be avoided",
     ),
-    "M311": QCoreApplication.translate(
+    "M-311": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.date()' should be avoided.\n"
         "Use 'datetime.datetime(, tzinfo=).date()' instead.",
     ),
-    "M312": QCoreApplication.translate(
+    "M-312": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.date.today()' should be avoided.\n"
         "Use 'datetime.datetime.now(tz=).date()' instead.",
     ),
-    "M313": QCoreApplication.translate(
+    "M-313": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.date.fromtimestamp()' should be avoided.\n"
         "Use 'datetime.datetime.fromtimestamp(tz=).date()' instead.",
     ),
-    "M314": QCoreApplication.translate(
+    "M-314": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.date.fromordinal()' should be avoided",
     ),
-    "M315": QCoreApplication.translate(
+    "M-315": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.date.fromisoformat()' should be avoided",
     ),
-    "M321": QCoreApplication.translate(
+    "M-321": QCoreApplication.translate(
         "MiscellaneousChecker",
         "use of 'datetime.time()' without 'tzinfo' argument should be avoided",
     ),
     ## sys.version and sys.version_info usage
-    "M401": QCoreApplication.translate(
+    "M-401": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version[:3]' referenced (Python 3.10), use 'sys.version_info'",
     ),
-    "M402": QCoreApplication.translate(
+    "M-402": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version[2]' referenced (Python 3.10), use 'sys.version_info'",
     ),
-    "M403": QCoreApplication.translate(
+    "M-403": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version' compared to string (Python 3.10), use 'sys.version_info'",
     ),
-    "M411": QCoreApplication.translate(
+    "M-411": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version_info[0] == 3' referenced (Python 4), use '>='",
     ),
-    "M412": QCoreApplication.translate(
+    "M-412": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'six.PY3' referenced (Python 4), use 'not six.PY2'",
     ),
-    "M413": QCoreApplication.translate(
+    "M-413": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version_info[1]' compared to integer (Python 4),"
         " compare 'sys.version_info' to tuple",
     ),
-    "M414": QCoreApplication.translate(
+    "M-414": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version_info.minor' compared to integer (Python 4),"
         " compare 'sys.version_info' to tuple",
     ),
-    "M421": QCoreApplication.translate(
+    "M-421": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version[0]' referenced (Python 10), use 'sys.version_info'",
     ),
-    "M422": QCoreApplication.translate(
+    "M-422": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version' compared to string (Python 10), use 'sys.version_info'",
     ),
-    "M423": QCoreApplication.translate(
+    "M-423": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'sys.version[:1]' referenced (Python 10), use 'sys.version_info'",
     ),
     ## Bugbear
-    "M501": QCoreApplication.translate(
+    "M-501": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Do not use bare 'except:', it also catches unexpected events like memory"
         " errors, interrupts, system exit, and so on. Prefer excepting specific"
         " exceptions. If you're sure what you're doing, be explicit and write"
         " 'except BaseException:'.",
     ),
-    "M502": QCoreApplication.translate(
+    "M-502": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Python does not support the unary prefix increment",
     ),
-    "M503": QCoreApplication.translate(
+    "M-503": QCoreApplication.translate(
         "MiscellaneousChecker",
         "assigning to 'os.environ' does not clear the environment -"
         " use 'os.environ.clear()'",
     ),
-    "M504": QCoreApplication.translate(
+    "M-504": QCoreApplication.translate(
         "MiscellaneousChecker",
         """using 'hasattr(x, "__call__")' to test if 'x' is callable is"""
         """ unreliable. Use 'callable(x)' for consistent results.""",
     ),
-    "M505": QCoreApplication.translate(
+    "M-505": QCoreApplication.translate(
         "MiscellaneousChecker",
         "using .strip() with multi-character strings is misleading. Use .replace(),"
         " .removeprefix(), .removesuffix(), or regular expressions to remove string"
         " fragments.",
     ),
-    "M506": QCoreApplication.translate(
+    "M-506": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Do not use mutable data structures for argument defaults. They are created"
         " during function definition time. All calls to the function reuse this one"
         " instance of that data structure, persisting changes between them.",
     ),
-    "M507": QCoreApplication.translate(
+    "M-507": QCoreApplication.translate(
         "MiscellaneousChecker",
         "loop control variable {0} not used within the loop body -"
         " start the name with an underscore",
     ),
-    "M508": QCoreApplication.translate(
+    "M-508": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Do not perform function calls in argument defaults. The call is performed"
         " only once at function definition time. All calls to your function will reuse"
@@ -331,44 +331,44 @@
         " assign the function call to a module-level variable and use that variable as"
         " a default value.",
     ),
-    "M509": QCoreApplication.translate(
+    "M-509": QCoreApplication.translate(
         "MiscellaneousChecker",
         "do not call getattr with a constant attribute value",
     ),
-    "M510": QCoreApplication.translate(
+    "M-510": QCoreApplication.translate(
         "MiscellaneousChecker",
         "do not call setattr with a constant attribute value",
     ),
-    "M511": QCoreApplication.translate(
+    "M-511": QCoreApplication.translate(
         "MiscellaneousChecker",
         "do not call assert False since python -O removes these calls",
     ),
-    "M512": QCoreApplication.translate(
+    "M-512": QCoreApplication.translate(
         "MiscellaneousChecker",
         "return/continue/break inside finally blocks cause exceptions to be silenced."
-        " Exceptions should be silenced in except blocks. Control statements can be"
+        " Exceptions should be silenced in except{0} blocks. Control statements can be"
         " moved outside the finally block.",
     ),
-    "M513": QCoreApplication.translate(
+    "M-513": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "A length-one tuple literal is redundant. Write 'except {0}:' instead of"
-        " 'except ({0},):'.",
+        "A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of"
+        " 'except{1} ({0},):'.",
     ),
-    "M514": QCoreApplication.translate(
+    "M-514": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:',"
+        "Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:',"
         " which catches exactly the same exceptions.",
     ),
-    "M515": QCoreApplication.translate(
+    "M-515": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Result of comparison is not used. This line doesn't do anything. Did you"
         " intend to prepend it with assert?",
     ),
-    "M516": QCoreApplication.translate(
+    "M-516": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Cannot raise a literal. Did you intend to return it or raise an Exception?",
     ),
-    "M517": QCoreApplication.translate(
+    "M-517": QCoreApplication.translate(
         "MiscellaneousChecker",
         "'assertRaises(Exception)' and 'pytest.raises(Exception)' should "
         "be considered evil. They can lead to your test passing even if the "
@@ -377,61 +377,61 @@
         "(if using 'assertRaises'), or add the 'match' keyword argument (if "
         "using 'pytest.raises'), or use the context manager form with a target.",
     ),
-    "M518": QCoreApplication.translate(
+    "M-518": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Found useless {0} expression. Consider either assigning it to a variable or"
         " removing it.",
     ),
-    "M519": QCoreApplication.translate(
+    "M-519": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to"
         " memory leaks. The cache may retain instance references, preventing garbage"
         " collection.",
     ),
-    "M520": QCoreApplication.translate(
+    "M-520": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Found for loop that reassigns the iterable it is iterating with each"
         " iterable value.",
     ),
-    "M521": QCoreApplication.translate(
+    "M-521": QCoreApplication.translate(
         "MiscellaneousChecker",
         "f-string used as docstring. This will be interpreted by python as a joined"
         " string rather than a docstring.",
     ),
-    "M522": QCoreApplication.translate(
+    "M-522": QCoreApplication.translate(
         "MiscellaneousChecker",
         "No arguments passed to 'contextlib.suppress'. No exceptions will be"
         " suppressed and therefore this context manager is redundant.",
     ),
-    "M523": QCoreApplication.translate(
+    "M-523": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Function definition does not bind loop variable '{0}'.",
     ),
-    "M524": QCoreApplication.translate(
+    "M-524": QCoreApplication.translate(
         "MiscellaneousChecker",
         "{0} is an abstract base class, but none of the methods it defines are"
         " abstract. This is not necessarily an error, but you might have forgotten to"
         " add the @abstractmethod decorator, potentially in conjunction with"
         " @classmethod, @property and/or @staticmethod.",
     ),
-    "M525": QCoreApplication.translate(
+    "M-525": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "Exception '{0}' has been caught multiple times. Only the first except will be"
-        " considered and all other except catches can be safely removed.",
+        "Exception '{0}' has been caught multiple times. Only the first except{1} will"
+        " be considered and all other except{1} catches can be safely removed.",
     ),
-    "M526": QCoreApplication.translate(
+    "M-526": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Star-arg unpacking after a keyword argument is strongly discouraged,"
         " because it only works when the keyword parameter is declared after all"
         " parameters supplied by the unpacked sequence, and this change of ordering can"
         " surprise and mislead readers.",
     ),
-    "M527": QCoreApplication.translate(
+    "M-527": QCoreApplication.translate(
         "MiscellaneousChecker",
         "{0} is an empty method in an abstract base class, but has no abstract"
         " decorator. Consider adding @abstractmethod.",
     ),
-    "M528": QCoreApplication.translate(
+    "M-528": QCoreApplication.translate(
         "MiscellaneousChecker",
         "No explicit stacklevel argument found. The warn method from the"
         " warnings module uses a stacklevel of 1 by default. This will only show a"
@@ -439,261 +439,277 @@
         " It is therefore recommended to use a stacklevel of 2 or"
         " greater to provide more information to the user.",
     ),
-    "M529": QCoreApplication.translate(
+    "M-529": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "Using 'except ():' with an empty tuple does not handle/catch "
+        "Using 'except{0} ():' with an empty tuple does not handle/catch "
         "anything. Add exceptions to handle.",
     ),
-    "M530": QCoreApplication.translate(
+    "M-530": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Except handlers should only be names of exception classes",
     ),
-    "M531": QCoreApplication.translate(
+    "M-531": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Using the generator returned from 'itertools.groupby()' more than once"
         " will do nothing on the second usage. Save the result to a list, if the"
         " result is needed multiple times.",
     ),
-    "M532": QCoreApplication.translate(
+    "M-532": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Possible unintentional type annotation (using ':'). Did you mean to"
         " assign (using '=')?",
     ),
-    "M533": QCoreApplication.translate(
+    "M-533": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Set should not contain duplicate item '{0}'. Duplicate items will be replaced"
         " with a single item at runtime.",
     ),
-    "M534": QCoreApplication.translate(
+    "M-534": QCoreApplication.translate(
         "MiscellaneousChecker",
         "re.{0} should get '{1}' and 'flags' passed as keyword arguments to avoid"
         " confusion due to unintuitive argument positions.",
     ),
-    "M535": QCoreApplication.translate(
+    "M-535": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Static key in dict comprehension: {0!r}.",
     ),
-    "M536": QCoreApplication.translate(
+    "M-536": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Don't except 'BaseException' unless you plan to re-raise it.",
     ),
-    "M537": QCoreApplication.translate(
+    "M-537": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "Class '__init__' methods must not return or yield and any values.",
+        "Class '__init__' methods must not return or yield any values.",
     ),
-    "M539": QCoreApplication.translate(
+    "M-539": QCoreApplication.translate(
         "MiscellaneousChecker",
         "ContextVar with mutable literal or function call as default. This is only"
         " evaluated once, and all subsequent calls to `.get()` will return the same"
         " instance of the default.",
     ),
-    "M540": QCoreApplication.translate(
+    "M-540": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Exception with added note not used. Did you forget to raise it?",
     ),
+    "M-541": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Repeated key-value pair in dictionary literal.",
+    ),
     ## Bugbear, opininonated
-    "M569": QCoreApplication.translate(
+    "M-569": QCoreApplication.translate(
         "MiscellaneousChecker",
         "Editing a loop's mutable iterable often leads to unexpected results/bugs.",
     ),
     ## Bugbear++
-    "M581": QCoreApplication.translate(
+    "M-581": QCoreApplication.translate(
         "MiscellaneousChecker",
         "unncessary f-string",
     ),
-    "M582": QCoreApplication.translate(
+    "M-582": QCoreApplication.translate(
         "MiscellaneousChecker",
         "cannot use 'self.__class__' as first argument of 'super()' call",
     ),
     ## Format Strings
-    "M601": QCoreApplication.translate(
+    "M-601": QCoreApplication.translate(
         "MiscellaneousChecker",
         "found {0} formatter",
     ),
-    "M611": QCoreApplication.translate(
+    "M-611": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format string does contain unindexed parameters",
     ),
-    "M612": QCoreApplication.translate(
+    "M-612": QCoreApplication.translate(
         "MiscellaneousChecker",
         "docstring does contain unindexed parameters",
     ),
-    "M613": QCoreApplication.translate(
+    "M-613": QCoreApplication.translate(
         "MiscellaneousChecker",
         "other string does contain unindexed parameters",
     ),
-    "M621": QCoreApplication.translate(
+    "M-621": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call uses too large index ({0})",
     ),
-    "M622": QCoreApplication.translate(
+    "M-622": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call uses missing keyword ({0})",
     ),
-    "M623": QCoreApplication.translate(
+    "M-623": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call uses keyword arguments but no named entries",
     ),
-    "M624": QCoreApplication.translate(
+    "M-624": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call uses variable arguments but no numbered entries",
     ),
-    "M625": QCoreApplication.translate(
+    "M-625": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call uses implicit and explicit indexes together",
     ),
-    "M631": QCoreApplication.translate(
+    "M-631": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call provides unused index ({0})",
     ),
-    "M632": QCoreApplication.translate(
+    "M-632": QCoreApplication.translate(
         "MiscellaneousChecker",
         "format call provides unused keyword ({0})",
     ),
     ## Future statements
-    "M701": QCoreApplication.translate(
+    "M-701": QCoreApplication.translate(
         "MiscellaneousChecker",
         "expected these __future__ imports: {0}; but only got: {1}",
     ),
-    "M702": QCoreApplication.translate(
+    "M-702": QCoreApplication.translate(
         "MiscellaneousChecker",
         "expected these __future__ imports: {0}; but got none",
     ),
     ## Gettext
-    "M711": QCoreApplication.translate(
+    "M-711": QCoreApplication.translate(
         "MiscellaneousChecker",
         "gettext import with alias _ found: {0}",
     ),
     ##~ print() statements
-    "M801": QCoreApplication.translate(
+    "M-801": QCoreApplication.translate(
         "MiscellaneousChecker",
         "print statement found",
     ),
     ## one element tuple
-    "M811": QCoreApplication.translate(
+    "M-811": QCoreApplication.translate(
         "MiscellaneousChecker",
         "one element tuple found",
     ),
     ## Mutable Defaults
-    "M821": QCoreApplication.translate(
+    "M-821": QCoreApplication.translate(
         "MiscellaneousChecker",
         "mutable default argument of type {0}",
     ),
-    "M822": QCoreApplication.translate(
+    "M-822": QCoreApplication.translate(
         "MiscellaneousChecker",
         "mutable default argument of type {0}",
     ),
-    "M823": QCoreApplication.translate(
+    "M-823": QCoreApplication.translate(
         "MiscellaneousChecker",
         "mutable default argument of function call '{0}'",
     ),
     ##~ return statements
-    "M831": QCoreApplication.translate(
+    "M-831": QCoreApplication.translate(
         "MiscellaneousChecker",
         "None should not be added at any return if function has no return"
         " value except None",
     ),
-    "M832": QCoreApplication.translate(
+    "M-832": QCoreApplication.translate(
         "MiscellaneousChecker",
         "an explicit value at every return should be added if function has"
         " a return value except None",
     ),
-    "M833": QCoreApplication.translate(
+    "M-833": QCoreApplication.translate(
         "MiscellaneousChecker",
         "an explicit return at the end of the function should be added if"
         " it has a return value except None",
     ),
-    "M834": QCoreApplication.translate(
+    "M-834": QCoreApplication.translate(
         "MiscellaneousChecker",
         "a value should not be assigned to a variable if it will be used as a"
         " return value only",
     ),
     ## line continuation
-    "M841": QCoreApplication.translate(
+    "M-841": QCoreApplication.translate(
         "MiscellaneousChecker",
         "prefer implied line continuation inside parentheses, "
         "brackets and braces as opposed to a backslash",
     ),
     ## implicitly concatenated strings
-    "M851": QCoreApplication.translate(
+    "M-851": QCoreApplication.translate(
         "MiscellaneousChecker",
         "implicitly concatenated string or bytes literals on one line",
     ),
-    "M852": QCoreApplication.translate(
+    "M-852": QCoreApplication.translate(
         "MiscellaneousChecker",
         "implicitly concatenated string or bytes literals over continuation line",
     ),
-    "M853": QCoreApplication.translate(
+    "M-853": QCoreApplication.translate(
         "MiscellaneousChecker",
         "explicitly concatenated string or bytes should be implicitly concatenated",
     ),
     ## commented code
-    "M891": QCoreApplication.translate(
+    "M-891": QCoreApplication.translate(
         "MiscellaneousChecker",
         "commented code lines should be removed",
     ),
+    ## structural pattern matching
+    "M-901": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "matching a default value should raise a `ValueError` exception",
+    ),
+    "M-902": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "matching a default value should not contain a `return` statement before "
+        "raising a `ValueError` exception",
+    ),
 }
 
 _miscellaneousMessagesSampleArgs = {
     ## Coding line
-    "M102": ["enc42"],
+    "M-102": ["enc42"],
     ## Shadowed Builtins
-    "M131": ["list"],
-    "M132": ["list"],
+    "M-131": ["list"],
+    "M-132": ["list"],
     ## Comprehensions
-    "M185": ["list", "set"],
-    "M186": ["list", "dict"],
-    "M188": ["list"],
-    "M189a": ["tuple", "tuple"],
-    "M189b": ["list", "tuple"],
-    "M190a": ["list", "list"],
-    "M190b": ["tuple", "list"],
-    "M193a": ["reversed", "sorted"],
-    "M193b": ["reversed", "sorted", "True"],
-    "M193c": ["list", "sorted"],
-    "M194": ["list", "sorted"],
-    "M195": ["sorted"],
-    "M196": ["list"],
-    "M197": ["list"],
-    "M198": ["dict comprehension"],
-    "M199": ["any"],
-    "M200": ["dict"],
+    "M-185": ["list", "set"],
+    "M-186": ["list", "dict"],
+    "M-188": ["list"],
+    "M-189a": ["tuple", "tuple"],
+    "M-189b": ["list", "tuple"],
+    "M-190a": ["list", "list"],
+    "M-190b": ["tuple", "list"],
+    "M-193a": ["reversed", "sorted"],
+    "M-193b": ["reversed", "sorted", "True"],
+    "M-193c": ["list", "sorted"],
+    "M-194": ["list", "sorted"],
+    "M-195": ["sorted"],
+    "M-196": ["list"],
+    "M-197": ["list"],
+    "M-198": ["dict comprehension"],
+    "M-199": ["any"],
+    "M-200": ["dict"],
     ## Dictionaries with sorted keys
-    "M251": ["bar", "foo"],
+    "M-251": ["bar", "foo"],
     ## Property
-    "M260": [2],
-    "M261": [1],
-    "M262": [2],
-    "M263": ["foo", "bar"],
-    "M264": ["foo", "bar"],
-    "M265": ["foo", "bar"],
-    "M266": ["foo", "bar"],
-    "M267": ["foo"],
+    "M-260": [2],
+    "M-261": [1],
+    "M-262": [2],
+    "M-263": ["foo", "bar"],
+    "M-264": ["foo", "bar"],
+    "M-265": ["foo", "bar"],
+    "M-266": ["foo", "bar"],
+    "M-267": ["foo"],
     ## Bugbear
-    "M507": ["x"],
-    "M513": ["Exception"],
-    "M514": ["OSError, IOError", " as err", "OSError"],
-    "M518": ["List"],
-    "M523": ["x"],
-    "M524": ["foobar"],
-    "M525": ["OSError"],
-    "M527": ["foo"],
-    "M533": ["foo"],
-    "M534": ["split", "maxsplit"],
-    "M535": ["foo"],
+    "M-507": ["x"],
+    "M-512": [""],
+    "M-513": ["Exception", ""],
+    "M-514": ["OSError, IOError", " as err", "OSError", ""],
+    "M-518": ["List"],
+    "M-523": ["x"],
+    "M-524": ["foobar"],
+    "M-525": ["OSError", ""],
+    "M-527": ["foo"],
+    "M-529": [""],
+    "M-533": ["foo"],
+    "M-534": ["split", "maxsplit"],
+    "M-535": ["foo"],
     ## Format Strings
-    "M601": ["%s"],
-    "M621": [5],
-    "M622": ["foo"],
-    "M631": [5],
-    "M632": ["foo"],
+    "M-601": ["%s"],
+    "M-621": [5],
+    "M-622": ["foo"],
+    "M-631": [5],
+    "M-632": ["foo"],
     ## Future statements
-    "M701": ["print_function, unicode_literals", "print_function"],
-    "M702": ["print_function, unicode_literals"],
+    "M-701": ["print_function, unicode_literals", "print_function"],
+    "M-702": ["print_function, unicode_literals"],
     ## Gettext
-    "M711": ["lgettext"],
+    "M-711": ["lgettext"],
     ## Mutable Defaults
-    "M821": ["Dict"],
-    "M822": ["Call"],
-    "M823": ["dict"],
+    "M-821": ["Dict"],
+    "M-822": ["Call"],
+    "M-823": ["dict"],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/NameOrder/ImportNode.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/NameOrder/ImportNode.py	Sat Mar 01 15:52:40 2025 +0100
@@ -78,7 +78,7 @@
                 key=lambda k: checker.moduleKey(k, subImports=True),
             )
             if names != expectedNames:
-                self.error = (self.node, "NO102", ", ".join(expectedNames))
+                self.error = (self.node, "NO-102", ", ".join(expectedNames))
             level = astNode.level
 
             self.asImport = any(n.asname for n in astNode.names)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/NameOrder/NameOrderChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/NameOrder/NameOrderChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -8,11 +8,12 @@
 """
 
 import ast
-import copy
 import re
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
-class NameOrderChecker:
+
+class NameOrderChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for name ordering.
 
@@ -22,12 +23,13 @@
 
     Codes = [
         ## Imports order
-        "NO101",
-        "NO102",
-        "NO103",
-        "NO104",
-        "NO105",
+        "NO-101",
+        "NO-102",
+        "NO-103",
+        "NO-104",
+        "NO-105",
     ]
+    Category = "NO"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -50,14 +52,17 @@
         @param args dictionary of arguments for the various checks
         @type dict
         """
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
+        super().__init__(
+            NameOrderChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
         # parameters for import sorting
         if args["SortOrder"] == "native":
@@ -67,84 +72,10 @@
             self.__sortingFunction = self.__naturally
         self.__sortCaseSensitive = args["SortCaseSensitive"]
 
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
-
         checkersWithCodes = [
-            (self.__checkNameOrder, ("NO101", "NO102", "NO103", "NO104", "NO105")),
+            (self.__checkNameOrder, ("NO-101", "NO-102", "NO-103", "NO-104", "NO-105")),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against miscellaneous
-        conditions.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     #######################################################################
     ## Name Order
@@ -160,7 +91,7 @@
 
         errors = []
         imports = []
-        importNodes, aListNode, eListNodes = self.__findNodes(self.__tree)
+        importNodes, aListNode, eListNodes = self.__findNodes(self.tree)
 
         # check for an error in '__all__'
         allError = self.__findErrorInAll(aListNode)
@@ -176,11 +107,11 @@
 
             imports.append(
                 ImportNode(
-                    self.__args.get("ApplicationPackageNames", []),
+                    self.args.get("ApplicationPackageNames", []),
                     importNode,
                     self,
-                    self.__args.get("SortIgnoringStyle", False),
-                    self.__args.get("SortFromFirst", False),
+                    self.args.get("SortIgnoringStyle", False),
+                    self.args.get("SortFromFirst", False),
                 )
             )
 
@@ -196,21 +127,17 @@
                         errors.append(n.error)
 
                     if n == p:
-                        if self.__args.get("CombinedAsImports", False) or (
+                        if self.args.get("CombinedAsImports", False) or (
                             not n.asImport and not p.asImport
                         ):
-                            errors.append((n.node, "NO103", str(p), str(n)))
+                            errors.append((n.node, "NO-103", str(p), str(n)))
                     elif n < p:
-                        errors.append((n.node, "NO101", str(n), str(p)))
+                        errors.append((n.node, "NO-101", str(n), str(p)))
 
                     p = n
 
         for error in errors:
-            if not self.__ignoreCode(error[1]):
-                node = error[0]
-                reason = error[1]
-                args = error[2:]
-                self.__error(node.lineno - 1, node.col_offset, reason, *args)
+            self.addErrorFromNode(error[0], error[1], *error[2:])
 
     def __findExceptionListNodes(self, tree):
         """
@@ -270,7 +197,7 @@
 
         @param node reference to the '__all__' node
         @type ast.List or ast.Tuple
-        @return tuple containing a reference to the node an error code and the error
+        @return tuple containing a reference to the node, an error code and the error
             arguments
         @rtype tuple of (ast.List | ast.Tuple, str, str)
         """
@@ -288,7 +215,7 @@
                 key=lambda k: self.moduleKey(k, subImports=True),
             )
             if expectedList != actualList:
-                return (node, "NO104", ", ".join(expectedList))
+                return (node, "NO-104", ", ".join(expectedList))
 
         return None
 
@@ -324,7 +251,7 @@
 
             expectedList = self.sorted(actualList)
             if expectedList != actualList:
-                errors.append((node, "NO105", ", ".join(expectedList)))
+                errors.append((node, "NO-105", ", ".join(expectedList)))
 
         return errors
 
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/NameOrder/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/NameOrder/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -11,22 +11,22 @@
 from PyQt6.QtCore import QCoreApplication
 
 _nameOrderMessages = {
-    "NO101": QCoreApplication.translate(
+    "NO-101": QCoreApplication.translate(
         "NameOrderChecker",
         "Import statements are in the wrong order. '{0}' should be before '{1}'",
     ),
-    "NO102": QCoreApplication.translate(
+    "NO-102": QCoreApplication.translate(
         "NameOrderChecker", "Imported names are in the wrong order. Should be '{0}'"
     ),
-    "NO103": QCoreApplication.translate(
+    "NO-103": QCoreApplication.translate(
         "NameOrderChecker",
         "Import statements should be combined. '{0}' should be combined with '{1}'",
     ),
-    "NO104": QCoreApplication.translate(
+    "NO-104": QCoreApplication.translate(
         "NameOrderChecker",
         "The names in __all__ are in the wrong order. The order should be '{0}'",
     ),
-    "NO105": QCoreApplication.translate(
+    "NO-105": QCoreApplication.translate(
         "NameOrderChecker",
         "The names in the exception handler list are in the wrong order. The order"
         " should be '{0}'",
@@ -34,9 +34,9 @@
 }
 
 _nameOrderMessagesSampleArgs = {
-    "NO101": ["import bar", "import foo"],
-    "NO102": ["bar, baz, foo"],
-    "NO103": ["from foo import bar", "from foo import baz"],
-    "NO104": ["bar, baz, foo"],
-    "NO105": ["BarError, BazError, FooError"],
+    "NO-101": ["import bar", "import foo"],
+    "NO-102": ["bar, baz, foo"],
+    "NO-103": ["from foo import bar", "from foo import baz"],
+    "NO-104": ["bar, baz, foo"],
+    "NO-105": ["BarError, BazError, FooError"],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Naming/NamingStyleChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Naming/NamingStyleChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -17,68 +17,94 @@
 except AttributeError:
     ast.AsyncFunctionDef = ast.FunctionDef
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
-class NamingStyleChecker:
+
+class NamingStyleChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for naming conventions.
     """
 
     Codes = [
-        "N801",
-        "N802",
-        "N803",
-        "N804",
-        "N805",
-        "N806",
-        "N807",
-        "N808",
-        "N809",
-        "N811",
-        "N812",
-        "N813",
-        "N814",
-        "N815",
-        "N818",
-        "N821",
-        "N822",
-        "N823",
-        "N831",
+        "N-801",
+        "N-802",
+        "N-803",
+        "N-804",
+        "N-805",
+        "N-806",
+        "N-807",
+        "N-808",
+        "N-809",
+        "N-811",
+        "N-812",
+        "N-813",
+        "N-814",
+        "N-815",
+        "N-818",
+        "N-821",
+        "N-822",
+        "N-823",
+        "N-831",
     ]
+    Category = "N"
 
-    def __init__(self, tree, filename, options):
+    def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
-        Constructor (according to 'extended' pycodestyle.py API)
+        Constructor
 
-        @param tree AST tree of the source file
-        @type ast.AST
+        @param source source code to be checked
+        @type list of str
         @param filename name of the source file
         @type str
-        @param options options as parsed by pycodestyle.StyleGuide
-        @type optparse.Option
+        @param tree AST tree of the source code
+        @type ast.Module
+        @param select list of selected codes
+        @type list of str
+        @param ignore list of codes to be ignored
+        @type list of str
+        @param expected list of expected codes
+        @type list of str
+        @param repeat flag indicating to report each occurrence of a code
+        @type bool
+        @param args dictionary of arguments for the various checks
+        @type dict
         """
+        super().__init__(
+            NamingStyleChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
+
         self.__parents = collections.deque()
-        self.__tree = tree
-        self.__filename = filename
 
         self.__checkersWithCodes = {
             "classdef": [
-                (self.__checkClassName, ("N801", "N818")),
-                (self.__checkNameToBeAvoided, ("N831",)),
+                (self.__checkClassName, ("N-801", "N-818")),
+                (self.__checkNameToBeAvoided, ("N-831",)),
             ],
             "module": [
-                (self.__checkModule, ("N807", "N808")),
+                (self.__checkModule, ("N-807", "N-808")),
             ],
         }
         for name in ("functiondef", "asyncfunctiondef"):
             self.__checkersWithCodes[name] = [
-                (self.__checkFunctionName, ("N802", "N809")),
-                (self.__checkFunctionArgumentNames, ("N803", "N804", "N805", "N806")),
-                (self.__checkNameToBeAvoided, ("N831",)),
+                (self.__checkFunctionName, ("N-802", "N-809")),
+                (
+                    self.__checkFunctionArgumentNames,
+                    ("N-803", "N-804", "N-805", "N-806"),
+                ),
+                (self.__checkNameToBeAvoided, ("N-831",)),
             ]
         for name in ("assign", "namedexpr", "annassign"):
             self.__checkersWithCodes[name] = [
-                (self.__checkVariableNames, ("N821",)),
-                (self.__checkNameToBeAvoided, ("N831",)),
+                (self.__checkVariableNames, ("N-821",)),
+                (self.__checkNameToBeAvoided, ("N-831",)),
             ]
         for name in (
             "with",
@@ -92,33 +118,59 @@
             "setcomp",
         ):
             self.__checkersWithCodes[name] = [
-                (self.__checkVariableNames, ("N821",)),
+                (self.__checkVariableNames, ("N-821",)),
             ]
         for name in ("import", "importfrom"):
             self.__checkersWithCodes[name] = [
-                (self.__checkImportAs, ("N811", "N812", "N813", "N814", "N815")),
+                (self.__checkImportAs, ("N-811", "N-812", "N-813", "N-814", "N-815")),
             ]
 
-        self.__checkers = {}
+        self.__checkers = collections.defaultdict(list)
         for key, checkers in self.__checkersWithCodes.items():
             for checker, codes in checkers:
-                if any(not (code and options.ignore_code(code)) for code in codes):
-                    if key not in self.__checkers:
-                        self.__checkers[key] = []
+                if any(not (code and self._ignoreCode(code)) for code in codes):
                     self.__checkers[key].append(checker)
 
+    def addErrorFromNode(self, node, msgCode):
+        """
+        Public method to build the error information.
+
+        @param node AST node to report an error for
+        @type ast.AST
+        @param msgCode message code
+        @type str
+        """
+        if self._ignoreCode(msgCode):
+            return
+
+        if isinstance(node, ast.Module):
+            lineno = 0
+            offset = 0
+        else:
+            lineno = node.lineno
+            offset = node.col_offset
+            if isinstance(node, ast.ClassDef):
+                lineno += len(node.decorator_list)
+                offset += 6
+            elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
+                lineno += len(node.decorator_list)
+                offset += 4
+
+        self.addError(lineno, offset, msgCode, [])
+
     def run(self):
         """
-        Public method run by the pycodestyle.py checker.
+        Public method to execute the relevant checks.
+        """
+        if not self.filename:
+            # don't do anything, if essential data is missing
+            return
 
-        @return tuple giving line number, offset within line, code and
-            checker function
-        @rtype tuple of (int, int, str, function)
-        """
-        if self.__tree and self.__checkers:
-            return self.__visitTree(self.__tree)
-        else:
-            return ()
+        if not self.__checkers:
+            # don't do anything, if no codes were selected
+            return
+
+        self.__visitTree(self.tree)
 
     def __visitTree(self, node):
         """
@@ -126,13 +178,11 @@
 
         @param node AST tree node to scan
         @type ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
-        yield from self.__visitNode(node)
+        self.__visitNode(node)
         self.__parents.append(node)
         for child in ast.iter_child_nodes(node):
-            yield from self.__visitTree(child)
+            self.__visitTree(child)
         self.__parents.pop()
 
     def __visitNode(self, node):
@@ -141,8 +191,6 @@
 
         @param node AST tree node to inspect
         @type ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         if isinstance(node, ast.ClassDef):
             self.__tagClassFunctions(node)
@@ -152,8 +200,7 @@
         checkerName = node.__class__.__name__.lower()
         if checkerName in self.__checkers:
             for checker in self.__checkers[checkerName]:
-                for error in checker(node, self.__parents):
-                    yield error + (self.__checkers[checkerName],)
+                checker(node, self.__parents)
 
     def __tagClassFunctions(self, classNode):
         """
@@ -233,31 +280,6 @@
         kwOnly = [arg.arg for arg in node.args.kwonlyargs]
         return posArgs + kwOnly
 
-    def __error(self, node, code):
-        """
-        Private method to build the error information.
-
-        @param node AST node to report an error for
-        @type ast.AST
-        @param code error code to report
-        @type str
-        @return tuple giving line number, offset within line and error code
-        @rtype tuple of (int, int, str)
-        """
-        if isinstance(node, ast.Module):
-            lineno = 0
-            offset = 0
-        else:
-            lineno = node.lineno
-            offset = node.col_offset
-            if isinstance(node, ast.ClassDef):
-                lineno += len(node.decorator_list)
-                offset += 6
-            elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
-                lineno += len(node.decorator_list)
-                offset += 4
-        return (lineno, offset, code)
-
     def __isNameToBeAvoided(self, name):
         """
         Private method to check, if the given name should be avoided.
@@ -277,19 +299,17 @@
         @type ast.Ast
         @param _parents list of parent nodes (unused)
         @type list of ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         if isinstance(node, (ast.ClassDef, ast.FunctionDef, ast.AsyncFunctionDef)):
             name = node.name
             if self.__isNameToBeAvoided(name):
-                yield self.__error(node, "N831")
+                self.addErrorFromNode(node, "N-831")
 
         elif isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef)):
             argNames = self.__getArgNames(node)
             for arg in argNames:
                 if self.__isNameToBeAvoided(arg):
-                    yield self.__error(node, "N831")
+                    self.addErrorFromNode(node, "N-831")
 
         elif isinstance(node, (ast.Assign, ast.NamedExpr, ast.AnnAssign)):
             if isinstance(node, ast.Assign):
@@ -300,14 +320,14 @@
                 if isinstance(target, ast.Name):
                     name = target.id
                     if bool(name) and self.__isNameToBeAvoided(name):
-                        yield self.__error(node, "N831")
+                        self.addErrorFromNode(node, "N-831")
 
                 elif isinstance(target, (ast.Tuple, ast.List)):
                     for element in target.elts:
                         if isinstance(element, ast.Name):
                             name = element.id
                             if bool(name) and self.__isNameToBeAvoided(name):
-                                yield self.__error(node, "N831")
+                                self.addErrorFromNode(node, "N-831")
 
     def __getClassdef(self, name, parents):
         """
@@ -366,17 +386,15 @@
         @type ast.ClassDef
         @param parents list of parent nodes
         @type list of ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         name = node.name
         strippedName = name.strip("_")
         if not strippedName[:1].isupper() or "_" in strippedName:
-            yield self.__error(node, "N801")
+            self.addErrorFromNode(node, "N-801")
 
         superClasses = self.__superClassNames(name, parents)
         if "Exception" in superClasses and not name.endswith("Error"):
-            yield self.__error(node, "N818")
+            self.addErrorFromNode(node, "N-818")
 
     def __checkFunctionName(self, node, _parents):
         """
@@ -393,8 +411,6 @@
         @type ast.FunctionDef or ast.AsynFunctionDef
         @param _parents list of parent nodes (unused)
         @type list of ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         functionType = getattr(node, "function_type", "function")
         name = node.name
@@ -403,9 +419,9 @@
             return
 
         if name.lower() != name:
-            yield self.__error(node, "N802")
+            self.addErrorFromNode(node, "N-802")
         if functionType == "function" and name[:2] == "__" and name[-2:] == "__":
-            yield self.__error(node, "N809")
+            self.addErrorFromNode(node, "N-809")
 
     def __checkFunctionArgumentNames(self, node, _parents):
         """
@@ -420,18 +436,16 @@
         @type ast.FunctionDef or ast.AsynFunctionDef
         @param _parents list of parent nodes (unused)
         @type list of ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         if node.args.kwarg is not None:
             kwarg = node.args.kwarg.arg
             if kwarg.lower() != kwarg:
-                yield self.__error(node, "N803")
+                self.addErrorFromNode(node, "N-803")
 
         elif node.args.vararg is not None:
             vararg = node.args.vararg.arg
             if vararg.lower() != vararg:
-                yield self.__error(node, "N803")
+                self.addErrorFromNode(node, "N-803")
 
         else:
             argNames = self.__getArgNames(node)
@@ -439,19 +453,19 @@
 
             if not argNames:
                 if functionType == "method":
-                    yield self.__error(node, "N805")
+                    self.addErrorFromNode(node, "N-805")
                 elif functionType == "classmethod":
-                    yield self.__error(node, "N804")
+                    self.addErrorFromNode(node, "N-804")
 
             elif functionType == "method" and argNames[0] != "self":
-                yield self.__error(node, "N805")
+                self.addErrorFromNode(node, "N-805")
             elif functionType == "classmethod" and argNames[0] != "cls":
-                yield self.__error(node, "N804")
+                self.addErrorFromNode(node, "N-804")
             elif functionType == "staticmethod" and argNames[0] in ("cls", "self"):
-                yield self.__error(node, "N806")
+                self.addErrorFromNode(node, "N-806")
             for arg in argNames:
                 if arg.lower() != arg:
-                    yield self.__error(node, "N803")
+                    self.addErrorFromNode(node, "N-803")
                     break
 
     def __checkVariableNames(self, node, parents):
@@ -465,35 +479,33 @@
         @type ast.AST
         @param parents list of parent nodes
         @type list of ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         nodeType = type(node)
         if nodeType is ast.Assign:
             if self.__isNamedTupel(node.value):
                 return
             for target in node.targets:
-                yield from self.__findVariableNameErrors(target, parents)
+                self.__findVariableNameErrors(target, parents)
 
         elif nodeType in (ast.NamedExpr, ast.AnnAssign):
             if self.__isNamedTupel(node.value):
                 return
-            yield from self.__findVariableNameErrors(node.target, parents)
+            self.__findVariableNameErrors(node.target, parents)
 
         elif nodeType in (ast.With, ast.AsyncWith):
             for item in node.items:
-                yield from self.__findVariableNameErrors(item.optional_vars, parents)
+                self.__findVariableNameErrors(item.optional_vars, parents)
 
         elif nodeType in (ast.For, ast.AsyncFor):
-            yield from self.__findVariableNameErrors(node.target, parents)
+            self.__findVariableNameErrors(node.target, parents)
 
         elif nodeType is ast.ExceptHandler:
             if node.name:
-                yield from self.__findVariableNameErrors(node, parents)
+                self.__findVariableNameErrors(node, parents)
 
         elif nodeType in (ast.GeneratorExp, ast.ListComp, ast.DictComp, ast.SetComp):
             for gen in node.generators:
-                yield from self.__findVariableNameErrors(gen.target, parents)
+                self.__findVariableNameErrors(gen.target, parents)
 
     def __findVariableNameErrors(self, assignmentTarget, parents):
         """
@@ -503,8 +515,6 @@
         @type ast.Name, ast.Tuple, ast.List or ast.ExceptHandler
         @param parents list of parent nodes
         @type ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         for parentFunc in reversed(parents):
             if isinstance(parentFunc, ast.ClassDef):
@@ -518,7 +528,7 @@
         for name in self.__extractNames(assignmentTarget):
             errorCode = checker(name)
             if errorCode:
-                yield self.__error(assignmentTarget, errorCode)
+                self.addErrorFromNode(assignmentTarget, errorCode)
 
     def __extractNames(self, assignmentTarget):
         """
@@ -565,7 +575,7 @@
         @rtype str or None
         """
         if self.__isMixedCase(name):
-            return "N823"
+            return "N-823"
 
         return None
 
@@ -579,7 +589,7 @@
         @rtype str or None
         """
         if self.__isMixedCase(name):
-            return "N822"
+            return "N-822"
 
         return None
 
@@ -595,7 +605,7 @@
         @rtype str or None
         """
         if varName not in func.global_names and varName.lower() != varName:
-            return "N821"
+            return "N-821"
 
         return None
 
@@ -629,19 +639,17 @@
         @type ast.AST
         @param _parents list of parent nodes (unused)
         @type list of ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         if self.__filename:
             moduleName = os.path.splitext(os.path.basename(self.__filename))[0]
             if moduleName.lower() != moduleName:
-                yield self.__error(node, "N807")
+                self.addErrorFromNode(node, "N-807")
 
             if moduleName == "__init__":
                 # we got a package
                 packageName = os.path.split(os.path.dirname(self.__filename))[1]
                 if packageName.lower() != packageName:
-                    yield self.__error(node, "N808")
+                    self.addErrorFromNode(node, "N-808")
 
     def __checkImportAs(self, node, _parents):
         """
@@ -652,8 +660,6 @@
         @type ast.Import
         @param _parents list of parent nodes (unused)
         @type list of ast.AST
-        @yield tuple giving line number, offset within line and error code
-        @ytype tuple of (int, int, str)
         """
         for name in node.names:
             asname = name.asname
@@ -663,14 +669,14 @@
             originalName = name.name
             if originalName.isupper():
                 if not asname.isupper():
-                    yield self.__error(node, "N811")
+                    self.addErrorFromNode(node, "N-811")
             elif originalName.islower():
                 if asname.lower() != asname:
-                    yield self.__error(node, "N812")
+                    self.addErrorFromNode(node, "N-812")
             elif asname.islower():
-                yield self.__error(node, "N813")
+                self.addErrorFromNode(node, "N-813")
             elif asname.isupper():
                 if "".join(filter(str.isupper, originalName)) == asname:
-                    yield self.__error(node, "N815")
+                    self.addErrorFromNode(node, "N-815")
                 else:
-                    yield self.__error(node, "N814")
+                    self.addErrorFromNode(node, "N-814")
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Naming/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Naming/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,62 +12,62 @@
 from PyQt6.QtCore import QCoreApplication
 
 _namingStyleMessages = {
-    "N801": QCoreApplication.translate(
+    "N-801": QCoreApplication.translate(
         "NamingStyleChecker", "class names should use CapWords convention"
     ),
-    "N802": QCoreApplication.translate(
+    "N-802": QCoreApplication.translate(
         "NamingStyleChecker", "function name should be lowercase"
     ),
-    "N803": QCoreApplication.translate(
+    "N-803": QCoreApplication.translate(
         "NamingStyleChecker", "argument name should be lowercase"
     ),
-    "N804": QCoreApplication.translate(
+    "N-804": QCoreApplication.translate(
         "NamingStyleChecker", "first argument of a class method should be named 'cls'"
     ),
-    "N805": QCoreApplication.translate(
+    "N-805": QCoreApplication.translate(
         "NamingStyleChecker", "first argument of a method should be named 'self'"
     ),
-    "N806": QCoreApplication.translate(
+    "N-806": QCoreApplication.translate(
         "NamingStyleChecker",
         "first argument of a static method should not be named 'self' or 'cls",
     ),
-    "N807": QCoreApplication.translate(
+    "N-807": QCoreApplication.translate(
         "NamingStyleChecker", "module names should be lowercase"
     ),
-    "N808": QCoreApplication.translate(
+    "N-808": QCoreApplication.translate(
         "NamingStyleChecker", "package names should be lowercase"
     ),
-    "N809": QCoreApplication.translate(
+    "N-809": QCoreApplication.translate(
         "NamingStyleChecker", "function name should not start and end with '__'"
     ),
-    "N811": QCoreApplication.translate(
+    "N-811": QCoreApplication.translate(
         "NamingStyleChecker", "constant imported as non constant"
     ),
-    "N812": QCoreApplication.translate(
+    "N-812": QCoreApplication.translate(
         "NamingStyleChecker", "lowercase imported as non lowercase"
     ),
-    "N813": QCoreApplication.translate(
+    "N-813": QCoreApplication.translate(
         "NamingStyleChecker", "camelcase imported as lowercase"
     ),
-    "N814": QCoreApplication.translate(
+    "N-814": QCoreApplication.translate(
         "NamingStyleChecker", "camelcase imported as constant"
     ),
-    "N815": QCoreApplication.translate(
+    "N-815": QCoreApplication.translate(
         "NamingStyleChecker", "camelcase imported as acronym"
     ),
-    "N818": QCoreApplication.translate(
+    "N-818": QCoreApplication.translate(
         "NamingStyleChecker", "exception name should be named with an 'Error' suffix"
     ),
-    "N821": QCoreApplication.translate(
+    "N-821": QCoreApplication.translate(
         "NamingStyleChecker", "variable in function should be lowercase"
     ),
-    "N822": QCoreApplication.translate(
+    "N-822": QCoreApplication.translate(
         "NamingStyleChecker", "variable in class scope should not be mixed case"
     ),
-    "N823": QCoreApplication.translate(
+    "N-823": QCoreApplication.translate(
         "NamingStyleChecker", "variable in global scope should not be mixed case"
     ),
-    "N831": QCoreApplication.translate(
+    "N-831": QCoreApplication.translate(
         "NamingStyleChecker", "names 'l', 'O' and 'I' should be avoided"
     ),
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/PathLib/PathlibChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/PathLib/PathlibChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,32 +12,15 @@
 ## adapted from: flake8-use-pathlib v0.3.0                                         ##
 ##                                                                                 ##
 ## Original: Copyright (c) 2021 Rodolphe Pelloux-Prayer                            ##
-##                                                                                 ##
-## License:                                                                        ##
-## Permission is hereby granted, free of charge, to any person obtaining a copy    ##
-## of this software and associated documentation files (the "Software"), to deal   ##
-## in the Software without restriction, including without limitation the rights    ##
-## to use, copy, modify, merge, publish, distribute, sublicense, and/or sell       ##
-## copies of the Software, and to permit persons to whom the Software is           ##
-## furnished to do so, subject to the following conditions:                        ##
-##                                                                                 ##
-## The above copyright notice and this permission notice shall be included in all  ##
-## copies or substantial portions of the Software.                                 ##
-##                                                                                 ##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR      ##
-## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,        ##
-## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE     ##
-## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER          ##
-## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,   ##
-## OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE   ##
 #####################################################################################
 
 import ast
 import contextlib
-import copy
+
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
 
-class PathlibChecker:
+class PathlibChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for functions that can be replaced by use of
     the pathlib module.
@@ -45,71 +28,72 @@
 
     Codes = [
         ## Replacements for the os module functions
-        "P101",
-        "P102",
-        "P103",
-        "P104",
-        "P105",
-        "P106",
-        "P107",
-        "P108",
-        "P109",
-        "P110",
-        "P111",
-        "P112",
-        "P113",
-        "P114",
+        "P-101",
+        "P-102",
+        "P-103",
+        "P-104",
+        "P-105",
+        "P-106",
+        "P-107",
+        "P-108",
+        "P-109",
+        "P-110",
+        "P-111",
+        "P-112",
+        "P-113",
+        "P-114",
         ## Replacements for the os.path module functions
-        "P201",
-        "P202",
-        "P203",
-        "P204",
-        "P205",
-        "P206",
-        "P207",
-        "P208",
-        "P209",
-        "P210",
-        "P211",
-        "P212",
-        "P213",
+        "P-201",
+        "P-202",
+        "P-203",
+        "P-204",
+        "P-205",
+        "P-206",
+        "P-207",
+        "P-208",
+        "P-209",
+        "P-210",
+        "P-211",
+        "P-212",
+        "P-213",
         ## Replacements for some Python standard library functions
-        "P301",
+        "P-301",
         ## Replacements for py.path.local
-        "P401",
+        "P-401",
     ]
+    Category = "P"
 
     # map functions to be replaced to error codes
     Function2Code = {
-        "os.chmod": "P101",
-        "os.mkdir": "P102",
-        "os.makedirs": "P103",
-        "os.rename": "P104",
-        "os.replace": "P105",
-        "os.rmdir": "P106",
-        "os.remove": "P107",
-        "os.unlink": "P108",
-        "os.getcwd": "P109",
-        "os.readlink": "P110",
-        "os.stat": "P111",
-        "os.listdir": "P112",
-        "os.link": "P113",
-        "os.symlink": "P114",
-        "os.path.abspath": "P201",
-        "os.path.exists": "P202",
-        "os.path.expanduser": "P203",
-        "os.path.isdir": "P204",
-        "os.path.isfile": "P205",
-        "os.path.islink": "P206",
-        "os.path.isabs": "P207",
-        "os.path.join": "P208",
-        "os.path.basename": "P209",
-        "os.path.dirname": "P210",
-        "os.path.samefile": "P211",
-        "os.path.splitext": "P212",
-        "os.path.relpath": "P213",
-        "open": "P301",
-        "py.path.local": "P401",
+        "os.chmod": "P-101",
+        "os.mkdir": "P-102",
+        "os.makedirs": "P-103",
+        "os.rename": "P-104",
+        "os.replace": "P-105",
+        "os.rmdir": "P-106",
+        "os.remove": "P-107",
+        "os.unlink": "P-108",
+        "os.getcwd": "P-109",
+        "os.readlink": "P-110",
+        "os.stat": "P-111",
+        "os.listdir": "P-112",
+        "os.link": "P-113",
+        "os.symlink": "P-114",
+        "os.path.abspath": "P-201",
+        "os.path.exists": "P-202",
+        "os.path.expanduser": "P-203",
+        "os.path.isdir": "P-204",
+        "os.path.isfile": "P-205",
+        "os.path.islink": "P-206",
+        "os.path.isabs": "P-207",
+        "os.path.join": "P-208",
+        "os.path.basename": "P-209",
+        "os.path.dirname": "P-210",
+        "os.path.samefile": "P-211",
+        "os.path.splitext": "P-212",
+        "os.path.relpath": "P-213",
+        "open": "P-301",
+        "py.path.local": "P-401",
     }
 
     def __init__(self, source, filename, tree, selected, ignored, expected, repeat):
@@ -131,85 +115,62 @@
         @param repeat flag indicating to report each occurrence of a code
         @type bool
         """
-        self.__select = tuple(selected)
-        self.__ignore = ("",) if selected else tuple(ignored)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
-
-        self.__checkCodes = (code for code in self.Codes if not self.__ignoreCode(code))
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
+        super().__init__(
+            PathlibChecker.Category,
+            source,
+            filename,
+            tree,
+            selected,
+            ignored,
+            expected,
+            repeat,
+            [],
+        )
 
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
+        checkersWithCodes = [
+            (
+                self.__checkPathlibReplacement,
+                (
+                    "P-101",
+                    "P-102",
+                    "P-103",
+                    "P-104",
+                    "P-105",
+                    "P-106",
+                    "P-107",
+                    "P-108",
+                    "P-109",
+                    "P-110",
+                    "P-111",
+                    "P-112",
+                    "P-113",
+                    "P-114",
+                    "P-201",
+                    "P-202",
+                    "P-203",
+                    "P-204",
+                    "P-205",
+                    "P-206",
+                    "P-207",
+                    "P-208",
+                    "P-209",
+                    "P-210",
+                    "P-211",
+                    "P-212",
+                    "P-213",
+                    "P-301",
+                    "P-401",
+                ),
+            ),
+        ]
+        self._initializeCheckers(checkersWithCodes)
 
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
+    def __checkPathlibReplacement(self):
         """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
+        Private method to check for pathlib replacements.
         """
-        Public method to check the given source against functions
-        to be replaced by 'pathlib' equivalents.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkCodes:
-            # don't do anything, if no codes were selected
-            return
-
         visitor = PathlibVisitor(self.__checkForReplacement)
-        visitor.visit(self.__tree)
+        visitor.visit(self.tree)
 
     def __checkForReplacement(self, node, name):
         """
@@ -223,7 +184,7 @@
         """
         with contextlib.suppress(KeyError):
             errorCode = self.Function2Code[name]
-            self.__error(node.lineno - 1, node.col_offset, errorCode)
+            self.addErrorFromNode(node, errorCode)
 
 
 class PathlibVisitor(ast.NodeVisitor):
@@ -280,6 +241,8 @@
 
         self.__checkCallback(node, nameResolver.name())
 
+        self.generic_visit(node)
+
 
 class NameResolver(ast.NodeVisitor):
     """
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -12,115 +12,116 @@
 from PyQt6.QtCore import QCoreApplication
 
 _pathlibMessages = {
-    "P101": QCoreApplication.translate(
+    "P-101": QCoreApplication.translate(
         "PathlibChecker",
         "os.chmod('foo', 0o444) should be replaced by foo_path.chmod(0o444)",
     ),
-    "P102": QCoreApplication.translate(
+    "P-102": QCoreApplication.translate(
         "PathlibChecker", "os.mkdir('foo') should be replaced by foo_path.mkdir()"
     ),
-    "P103": QCoreApplication.translate(
+    "P-103": QCoreApplication.translate(
         "PathlibChecker",
         "os.makedirs('foo/bar') should be replaced by bar_path.mkdir(parents=True)",
     ),
-    "P104": QCoreApplication.translate(
+    "P-104": QCoreApplication.translate(
         "PathlibChecker",
         "os.rename('foo', 'bar') should be replaced by foo_path.rename(Path('bar'))",
     ),
-    "P105": QCoreApplication.translate(
+    "P-105": QCoreApplication.translate(
         "PathlibChecker",
         "os.replace('foo', 'bar') should be replaced by "
         "foo_path.replace(Path('bar'))",
     ),
-    "P106": QCoreApplication.translate(
+    "P-106": QCoreApplication.translate(
         "PathlibChecker", "os.rmdir('foo') should be replaced by foo_path.rmdir()"
     ),
-    "P107": QCoreApplication.translate(
+    "P-107": QCoreApplication.translate(
         "PathlibChecker", "os.remove('foo') should be replaced by foo_path.unlink()"
     ),
-    "P108": QCoreApplication.translate(
+    "P-108": QCoreApplication.translate(
         "PathlibChecker", "os.unlink('foo'') should be replaced by foo_path.unlink()"
     ),
-    "P109": QCoreApplication.translate(
+    "P-109": QCoreApplication.translate(
         "PathlibChecker", "os.getcwd() should be replaced by Path.cwd()"
     ),
-    "P110": QCoreApplication.translate(
+    "P-110": QCoreApplication.translate(
         "PathlibChecker", "os.readlink('foo') should be replaced by foo_path.readlink()"
     ),
-    "P111": QCoreApplication.translate(
+    "P-111": QCoreApplication.translate(
         "PathlibChecker",
         "os.stat('foo') should be replaced by foo_path.stat() or "
         "foo_path.owner() or foo_path.group()",
     ),
-    "P112": QCoreApplication.translate(
+    "P-112": QCoreApplication.translate(
         "PathlibChecker",
         "os.listdir(path='foo') should be replaced by foo_path.iterdir()",
     ),
-    "P113": QCoreApplication.translate(
+    "P-113": QCoreApplication.translate(
         "PathlibChecker",
         "os.link('bar', 'foo') should be replaced by foo_path.hardlink_to('bar')",
     ),
-    "P114": QCoreApplication.translate(
+    "P-114": QCoreApplication.translate(
         "PathlibChecker",
         "os.symlink('bar', 'foo') should be replaced by foo_path.symlink_to('bar')",
     ),
-    "P201": QCoreApplication.translate(
+    "P-201": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.abspath('foo') should be replaced by foo_path.resolve()",
     ),
-    "P202": QCoreApplication.translate(
+    "P-202": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.exists('foo') should be replaced by foo_path.exists()",
     ),
-    "P203": QCoreApplication.translate(
+    "P-203": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.expanduser('~/foo') should be replaced by foo_path.expanduser()",
     ),
-    "P204": QCoreApplication.translate(
+    "P-204": QCoreApplication.translate(
         "PathlibChecker", "os.path.isdir('foo') should be replaced by foo_path.is_dir()"
     ),
-    "P205": QCoreApplication.translate(
+    "P-205": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.isfile('foo') should be replaced by foo_path.is_file()",
     ),
-    "P206": QCoreApplication.translate(
+    "P-206": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.islink('foo') should be replaced by foo_path.is_symlink()",
     ),
-    "P207": QCoreApplication.translate(
+    "P-207": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.isabs('foo') should be replaced by foo_path.is_absolute()",
     ),
-    "P208": QCoreApplication.translate(
+    "P-208": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.join('foo', 'bar') should be replaced by foo_path / 'bar'",
     ),
-    "P209": QCoreApplication.translate(
+    "P-209": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.basename('foo/bar') should be replaced by bar_path.name",
     ),
-    "P210": QCoreApplication.translate(
+    "P-210": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.dirname('foo/bar') should be replaced by bar_path.parent",
     ),
-    "P211": QCoreApplication.translate(
+    "P-211": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.samefile('foo', 'bar') should be replaced by "
         "foo_path.samefile(bar_path)",
     ),
-    "P212": QCoreApplication.translate(
+    "P-212": QCoreApplication.translate(
         "PathlibChecker",
-        "os.path.splitext('foo.bar') should be replaced by foo_path.suffix",
+        "os.path.splitext('foo.bar') should be replaced by foo_path.stem and"
+        " foo_path.suffix",
     ),
-    "P213": QCoreApplication.translate(
+    "P-213": QCoreApplication.translate(
         "PathlibChecker",
         "os.path.relpath('/bar/foo', start='bar') should be replaced by "
         "foo_path.relative_to('/bar')",
     ),
-    "P301": QCoreApplication.translate(
+    "P-301": QCoreApplication.translate(
         "PathlibChecker", "open('foo') should be replaced by Path('foo').open()"
     ),
-    "P401": QCoreApplication.translate(
+    "P-401": QCoreApplication.translate(
         "PathlibChecker", "py.path.local is in maintenance mode, use pathlib instead"
     ),
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,85 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a checker for pydantic related issues.
+"""
+
+from CodeStyleTopicChecker import CodeStyleTopicChecker
+
+
+class PydanticChecker(CodeStyleTopicChecker):
+    """
+    Class implementing a checker for pydantic related issues.
+    """
+
+    Codes = [
+        "PYD-001",
+        "PYD-002",
+        "PYD-003",
+        "PYD-004",
+        "PYD-005",
+        "PYD-006",
+        "PYD-010",
+    ]
+    Category = "PYD"
+
+    def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
+        """
+        Constructor
+
+        @param source source code to be checked
+        @type list of str
+        @param filename name of the source file
+        @type str
+        @param tree AST tree of the source code
+        @type ast.Module
+        @param select list of selected codes
+        @type list of str
+        @param ignore list of codes to be ignored
+        @type list of str
+        @param expected list of expected codes
+        @type list of str
+        @param repeat flag indicating to report each occurrence of a code
+        @type bool
+        @param args dictionary of arguments for the various checks
+        @type dict
+        """
+        super().__init__(
+            PydanticChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
+
+        checkersWithCodes = [
+            (
+                self.__checkPydantic,
+                (
+                    "PYD-001",
+                    "PYD-002",
+                    "PYD-003",
+                    "PYD-004",
+                    "PYD-005",
+                    "PYD-006",
+                    "PYD-010",
+                ),
+            ),
+        ]
+        self._initializeCheckers(checkersWithCodes)
+
+    def __checkPydantic(self):
+        """
+        Private method to check pydantic related topics.
+        """
+        from .PydanticVisitor import PydanticVisitor
+
+        visitor = PydanticVisitor(errorCallback=self.addErrorFromNode)
+        visitor.visit(self.tree)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticUtils.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,370 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing utility functions for the PydanticVisitor class.
+"""
+
+import ast
+
+#######################################################################
+## adapted from: flake8-pydantic v0.4.0
+##
+## Original: Copyright (c) 2023 Victorien
+#######################################################################
+
+
+def getDecoratorNames(decoratorList):
+    """
+    Function to extract the set of decorator names.
+
+    @param decoratorList list of decorators to be processed
+    @type list of ast.expr
+    @return set containing the decorator names
+    @rtype set of str
+    """
+    names = set()
+
+    for dec in decoratorList:
+        if isinstance(dec, ast.Call):
+            names.add(
+                dec.func.attr if isinstance(dec.func, ast.Attribute) else dec.func.id
+            )
+        elif isinstance(dec, ast.Name):
+            names.add(dec.id)
+        elif isinstance(dec, ast.Attribute):
+            names.add(dec.attr)
+
+    return names
+
+
+def _hasPydanticModelBase(node, *, includeRootModel):
+    """
+    Function to check, if a class definition inherits from Pydantic model classes.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @keyparam includeRootModel flag indicating to include the root model
+    @type bool
+    @return flag indicating that the class definition inherits from a Pydantic model
+        class
+    @rtype bool
+    """
+    modelClassNames = {"BaseModel"}
+    if includeRootModel:
+        modelClassNames.add("RootModel")
+
+    for base in node.bases:
+        if isinstance(base, ast.Name) and base.id in modelClassNames:
+            return True
+        if isinstance(base, ast.Attribute) and base.attr in modelClassNames:
+            return True
+    return False
+
+
+def _hasModelConfig(node):
+    """
+    Function to check, if the class has a `model_config` attribute set.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @return flag indicating that the class has a `model_config` attribute set
+    @rtype bool
+    """
+    for stmt in node.body:
+        if (
+            isinstance(stmt, ast.AnnAssign)
+            and isinstance(stmt.target, ast.Name)
+            and stmt.target.id == "model_config"
+        ):
+            ##~ model_config: ... = ...
+            return True
+
+        if isinstance(stmt, ast.Assign) and any(
+            t.id == "model_config" for t in stmt.targets if isinstance(t, ast.Name)
+        ):
+            ##~ model_config = ...
+            return True
+
+    return False
+
+
+PYDANTIC_FIELD_ARGUMENTS = {
+    "default",
+    "default_factory",
+    "alias",
+    "alias_priority",
+    "validation_alias",
+    "title",
+    "description",
+    "examples",
+    "exclude",
+    "discriminator",
+    "json_schema_extra",
+    "frozen",
+    "validate_default",
+    "repr",
+    "init",
+    "init_var",
+    "kw_only",
+    "pattern",
+    "strict",
+    "gt",
+    "ge",
+    "lt",
+    "le",
+    "multiple_of",
+    "allow_inf_nan",
+    "max_digits",
+    "decimal_places",
+    "min_length",
+    "max_length",
+    "union_mode",
+}
+
+
+def _hasFieldFunction(node):
+    """
+    Function to check, if the class has a field defined with the `Field` function.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @return flag indicating that the class has a field defined with the `Field` function
+    @rtype bool
+    """
+    if any(
+        isinstance(stmt, (ast.Assign, ast.AnnAssign))
+        and isinstance(stmt.value, ast.Call)
+        and (
+            (
+                isinstance(stmt.value.func, ast.Name) and stmt.value.func.id == "Field"
+            )  # f = Field(...)
+            or (
+                isinstance(stmt.value.func, ast.Attribute)
+                and stmt.value.func.attr == "Field"
+            )  # f = pydantic.Field(...)
+        )
+        and all(
+            kw.arg in PYDANTIC_FIELD_ARGUMENTS
+            for kw in stmt.value.keywords
+            if kw.arg is not None
+        )
+        for stmt in node.body
+    ):
+        return True
+
+    return False
+
+
+def _hasAnnotatedField(node):
+    """
+    Function to check if the class has a field making use of `Annotated`.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @return flag indicating that the class has a field making use of `Annotated`
+    @rtype bool
+    """
+    for stmt in node.body:
+        if isinstance(stmt, ast.AnnAssign) and isinstance(
+            stmt.annotation, ast.Subscript
+        ):
+            if (
+                isinstance(stmt.annotation.value, ast.Name)
+                and stmt.annotation.value.id == "Annotated"
+            ):
+                ##~ f: Annotated[...]
+                return True
+
+            if (
+                isinstance(stmt.annotation.value, ast.Attribute)
+                and stmt.annotation.value.attr == "Annotated"
+            ):
+                ##~ f: typing.Annotated[...]
+                return True
+
+    return False
+
+
+PYDANTIC_DECORATORS = {
+    "computed_field",
+    "field_serializer",
+    "model_serializer",
+    "field_validator",
+    "model_validator",
+}
+
+
+def _hasPydanticDecorator(node):
+    """
+    Function to check, if the class makes use of Pydantic decorators, such as
+    `computed_field` or `model_validator`.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @return flag indicating that the class makes use of Pydantic decorators, such as
+        `computed_field` or `model_validator`.
+    @rtype bool
+    """
+    for stmt in node.body:
+        if isinstance(stmt, ast.FunctionDef):
+            decoratorNames = getDecoratorNames(stmt.decorator_list)
+            if PYDANTIC_DECORATORS & decoratorNames:
+                return True
+    return False
+
+
+PYDANTIC_METHODS = {
+    "model_construct",
+    "model_copy",
+    "model_dump",
+    "model_dump_json",
+    "model_json_schema",
+    "model_parametrized_name",
+    "model_rebuild",
+    "model_validate",
+    "model_validate_json",
+    "model_validate_strings",
+}
+
+
+def _hasPydanticMethod(node: ast.ClassDef) -> bool:
+    """
+    Function to check, if the class overrides any of the Pydantic methods, such as
+    `model_dump`.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @return flag indicating that class overrides any of the Pydantic methods, such as
+        `model_dump`
+    @rtype bool
+    """
+    if any(
+        isinstance(stmt, ast.FunctionDef)
+        and (
+            stmt.name.startswith(("__pydantic_", "__get_pydantic_"))
+            or stmt.name in PYDANTIC_METHODS
+        )
+        for stmt in node.body
+    ):
+        return True
+
+    return False
+
+
+def isPydanticModel(node, *, includeRootModel=True):
+    """
+    Function to determine if a class definition is a Pydantic model.
+
+    Multiple heuristics are use to determine if this is the case:
+    - The class inherits from `BaseModel` (or `RootModel` if `includeRootModel` is
+      `True`).
+    - The class has a `model_config` attribute set.
+    - The class has a field defined with the `Field` function.
+    - The class has a field making use of `Annotated`.
+    - The class makes use of Pydantic decorators, such as `computed_field` or
+      `model_validator`.
+    - The class overrides any of the Pydantic methods, such as `model_dump`.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @keyparam includeRootModel flag indicating to include the root model
+        (defaults to True)
+    @type bool (optional)
+    @return flag indicating a Pydantic model class
+    @rtype bool
+    """
+    if not node.bases:
+        return False
+
+    return (
+        _hasPydanticModelBase(node, includeRootModel=includeRootModel)
+        or _hasModelConfig(node)
+        or _hasFieldFunction(node)
+        or _hasAnnotatedField(node)
+        or _hasPydanticDecorator(node)
+        or _hasPydanticMethod(node)
+    )
+
+
+def isDataclass(node):
+    """
+    Function to check, if a class is a dataclass.
+
+    @param node reference to the node to be be analyzed
+    @type ast.ClassDef
+    @return flag indicating that the class is a dataclass.
+    @rtype bool
+    """
+    """Determine if a class is a dataclass."""
+
+    return bool(
+        {"dataclass", "pydantic_dataclass"} & getDecoratorNames(node.decorator_list)
+    )
+
+
+def isFunction(node, functionName):
+    """
+    Function to check, if a function call is referencing a given function name.
+
+    @param node reference to the node to be be analyzed
+    @type ast.Call
+    @param functionName name of the function to check for
+    @type str
+    @return flag indicating that the function call is referencing the given function
+        name
+    @rtype bool
+    """
+    return (isinstance(node.func, ast.Name) and node.func.id == functionName) or (
+        isinstance(node.func, ast.Attribute) and node.func.attr == functionName
+    )
+
+
+def isName(node, name):
+    """
+    Function to check, if an expression is referencing a given name.
+
+    @param node reference to the node to be be analyzed
+    @type ast.expr
+    @param name name to check for
+    @type str
+    @return flag indicating that the expression is referencing teh given name
+    @rtype bool
+    """
+    return (isinstance(node, ast.Name) and node.id == name) or (
+        isinstance(node, ast.Attribute) and node.attr == name
+    )
+
+
+def extractAnnotations(node):
+    """
+    Function to extract the annotations of an expression.
+
+    @param node reference to the node to be be processed
+    @type ast.expr
+    @return set containing the annotation names
+    @rtype set[str]
+    """
+    annotations = set()
+
+    if isinstance(node, ast.Name):
+        ##~ foo: date = ...
+        annotations.add(node.id)
+
+    elif isinstance(node, ast.BinOp):
+        ##~ foo: date | None = ...
+        annotations |= extractAnnotations(node.left)
+        annotations |= extractAnnotations(node.right)
+
+    elif isinstance(node, ast.Subscript):
+        ##~ foo: dict[str, date]
+        ##~ foo: Annotated[list[date], ...]
+        if isinstance(node.slice, ast.Tuple):
+            for elt in node.slice.elts:
+                annotations |= extractAnnotations(elt)
+        if isinstance(node.slice, ast.Name):
+            annotations.add(node.slice.id)
+
+    return annotations
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/PydanticVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,251 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a node visitor to check for pydantic related issues.
+"""
+
+#######################################################################
+## PydanticVisitor
+##
+## adapted from: flake8-pydantic v0.4.0
+##
+## Original: Copyright (c) 2023 Victorien
+#######################################################################
+
+import ast
+
+from collections import deque
+
+from .PydanticUtils import (
+    extractAnnotations,
+    isDataclass,
+    isFunction,
+    isName,
+    isPydanticModel,
+)
+
+
+class PydanticVisitor(ast.NodeVisitor):
+    """
+    Class implementing a node visitor to check for pydantic related issues.
+    """
+
+    def __init__(self, errorCallback):
+        """
+        Constructor
+
+        @param errorCallback callback function to register an issue
+        @type func
+        """
+        super().__init__()
+
+        self.__error = errorCallback
+
+        self.__classStack = deque()
+
+    def __enterClass(self, node):
+        """
+        Private method to record class type when entering a class definition.
+
+        @param node reference to the node to be processed
+        @type ast.ClassDef
+        """
+        if isPydanticModel(node):
+            self.__classStack.append("pydantic_model")
+        elif isDataclass(node):
+            self.__classStack.append("dataclass")
+        else:
+            self.__classStack.append("other_class")
+
+    def __leaveClass(self):
+        """
+        Private method to remove the data recorded by the __enterClass method.
+        """
+        self.__classStack.pop()
+
+    @property
+    def __currentClass(self):
+        """
+        Private method returning the current class type as recorded by the __enterClass
+        method.
+
+        @return current class type (one of 'pydantic_model', 'dataclass' or
+            'other_class')
+        @rtype str
+        """
+        if not self.__classStack:
+            return None
+
+        return self.__classStack[-1]
+
+    def __checkForPyd001(self, node: ast.AnnAssign) -> None:
+        """
+        Private method to check positional argument for Field default argument.
+
+        @param node reference to the node to be processed
+        @type ast.AnnAssign
+        """
+        if (
+            self.__currentClass in {"pydantic_model", "dataclass"}
+            and isinstance(node.value, ast.Call)
+            and isFunction(node.value, "Field")
+            and len(node.value.args) >= 1
+        ):
+            self.__error(node, "PYD-001")
+
+    def __checkForPyd002(self, node):
+        """
+        Private method to check non-annotated attribute inside Pydantic model.
+
+        @param node reference to the node to be processed
+        @type ast.ClassDef
+        """
+        if self.__currentClass == "pydantic_model":
+            invalidAssignments = [
+                assign
+                for assign in node.body
+                if isinstance(assign, ast.Assign)
+                if isinstance(assign.targets[0], ast.Name)
+                if not assign.targets[0].id.startswith("_")
+                if assign.targets[0].id != "model_config"
+            ]
+            for assignment in invalidAssignments:
+                self.__error(assignment, "PYD-002")
+
+    def __checkForPyd003(self, node):
+        """
+        Private method to check unecessary Field call to specify a default value.
+
+        @param node reference to the node to be processed
+        @type ast.AnnAssign
+        """
+        if (
+            self.__currentClass in {"pydantic_model", "dataclass"}
+            and isinstance(node.value, ast.Call)
+            and isFunction(node.value, "Field")
+            and len(node.value.keywords) == 1
+            and node.value.keywords[0].arg == "default"
+        ):
+            self.__error(node, "PYD-003")
+
+    def __checkForPyd004(self, node):
+        """
+        Private method to check for a default argument specified in annotated.
+
+        @param node reference to the node to be processed
+        @type ast.AnnAssign
+        """
+        if (
+            self.__currentClass in {"pydantic_model", "dataclass"}
+            and isinstance(node.annotation, ast.Subscript)
+            and isName(node.annotation.value, "Annotated")
+            and isinstance(node.annotation.slice, ast.Tuple)
+        ):
+            fieldCall = next(
+                (
+                    elt
+                    for elt in node.annotation.slice.elts
+                    if isinstance(elt, ast.Call)
+                    and isFunction(elt, "Field")
+                    and any(k.arg == "default" for k in elt.keywords)
+                ),
+                None,
+            )
+            if fieldCall is not None:
+                self.__error(node, "PYD-004")
+
+    def __checkForPyd005(self, node):
+        """
+        Private method to check for a field name overriding the annotation.
+
+        @param node reference to the node to be processed
+        @type ast.ClassDef
+        """
+        if self.__currentClass in {"pydantic_model", "dataclass"}:
+            previousTargets = set()
+
+            for stmt in node.body:
+                if isinstance(stmt, ast.AnnAssign) and isinstance(
+                    stmt.target, ast.Name
+                ):
+                    previousTargets.add(stmt.target.id)
+                    if previousTargets & extractAnnotations(stmt.annotation):
+                        self.__error(stmt, "PYD-005")
+
+    def __checkForPyd006(self, node):
+        """
+        Private method to check for duplicate field names.
+
+        @param node reference to the node to be processed
+        @type ast.ClassDef
+        """
+        if self.__currentClass in {"pydantic_model", "dataclass"}:
+            previousTargets = set()
+
+            for stmt in node.body:
+                if isinstance(stmt, ast.AnnAssign) and isinstance(
+                    stmt.target, ast.Name
+                ):
+                    if stmt.target.id in previousTargets:
+                        self.__error(stmt, "PYD-006")
+
+                    previousTargets.add(stmt.target.id)
+
+    def __checkForPyd010(self, node: ast.ClassDef) -> None:
+        """
+        Private method to check for the use of `__pydantic_config__`.
+
+        @param node reference to the node to be processed
+        @type ast.ClassDef
+        """
+        if self.__currentClass == "other_class":
+            for stmt in node.body:
+                if (
+                    isinstance(stmt, ast.AnnAssign)
+                    and isinstance(stmt.target, ast.Name)
+                    and stmt.target.id == "__pydantic_config__"
+                ):
+                    ##~ __pydantic_config__: ... = ...
+                    self.__error(stmt, "PYD-010")
+
+                if isinstance(stmt, ast.Assign) and any(
+                    t.id == "__pydantic_config__"
+                    for t in stmt.targets
+                    if isinstance(t, ast.Name)
+                ):
+                    ##~ __pydantic_config__ = ...
+                    self.__error(stmt, "PYD-010")
+
+    def visit_ClassDef(self, node: ast.ClassDef) -> None:
+        """
+        Public method to process class definitions.
+
+        @param node reference to the node to be processed.
+        @type ast.ClassDef
+        """
+        self.__enterClass(node)
+
+        self.__checkForPyd002(node)
+        self.__checkForPyd005(node)
+        self.__checkForPyd006(node)
+        self.__checkForPyd010(node)
+
+        self.generic_visit(node)
+
+        self.__leaveClass()
+
+    def visit_AnnAssign(self, node: ast.AnnAssign) -> None:
+        """
+        Public method to process annotated assignment.
+
+        @param node reference to the node to be processed.
+        @type ast.AnnAssign
+        """
+        self.__checkForPyd001(node)
+        self.__checkForPyd003(node)
+        self.__checkForPyd004(node)
+
+        self.generic_visit(node)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Package implementing the pydantic topics checker.
+"""
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing message translations for the code style plugin messages
+(pydantic part).
+"""
+
+from PyQt6.QtCore import QCoreApplication
+
+_pydanticMessages = {
+    ## pydantic
+    "PYD-001": QCoreApplication.translate(
+        "PydanticChecker",
+        "positional argument for Field default argument",
+    ),
+    "PYD-002": QCoreApplication.translate(
+        "PydanticChecker",
+        "non-annotated attribute inside Pydantic model",
+    ),
+    "PYD-003": QCoreApplication.translate(
+        "PydanticChecker",
+        "unecessary Field call to specify a default value",
+    ),
+    "PYD-004": QCoreApplication.translate(
+        "PydanticChecker",
+        "default argument specified in annotated",
+    ),
+    "PYD-005": QCoreApplication.translate(
+        "PydanticChecker",
+        "field name overrides annotation",
+    ),
+    "PYD-006": QCoreApplication.translate(
+        "PydanticChecker",
+        "duplicate field name",
+    ),
+    "PYD-010": QCoreApplication.translate(
+        "PydanticChecker",
+        "usage of __pydantic_config__; consider using the `with_config` decorator",
+    ),
+}
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/assert.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/assert.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Assert": [
-            (checkAssertUsed, ("S101",)),
+            (checkAssertUsed, ("S-101",)),
         ],
     }
 
@@ -42,4 +42,4 @@
     @param _config dictionary with configuration data (unused)
     @type dict
     """
-    reportError(context.node.lineno - 1, context.node.col_offset, "S101", "L", "H")
+    reportError(context.node.lineno - 1, context.node.col_offset, "S-101", "L", "H")
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/awsHardcodedPassword.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/awsHardcodedPassword.py	Sat Mar 01 15:52:40 2025 +0100
@@ -33,7 +33,7 @@
     """
     return {
         "Str": [
-            (checkHardcodedAwsKey, ("S801", "S802")),
+            (checkHardcodedAwsKey, ("S-801", "S-802")),
         ],
     }
 
@@ -90,7 +90,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S801",
+                "S-801",
                 "L",
                 "M",
                 node.value,
@@ -102,7 +102,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S802",
+                "S-802",
                 "M",
                 "M",
                 node.value,
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/certificateValidation.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/certificateValidation.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkNoCertificateValidation, ("S501",)),
+            (checkNoCertificateValidation, ("S-501",)),
         ],
     }
 
@@ -52,7 +52,7 @@
         reportError(
             context.getLinenoForCallArg("verify") - 1,
             context.getOffsetForCallArg("verify"),
-            "S501",
+            "S-501",
             "H",
             "H",
         )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/djangoSqlInjection.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/djangoSqlInjection.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,8 +30,8 @@
     """
     return {
         "Call": [
-            (checkDjangoExtraUsed, ("S610",)),
-            (checkDjangoRawSqlUsed, ("S611",)),
+            (checkDjangoExtraUsed, ("S-610",)),
+            (checkDjangoRawSqlUsed, ("S-611",)),
         ],
     }
 
@@ -106,7 +106,7 @@
 
         if insecure:
             reportError(
-                context.node.lineno - 1, context.node.col_offset, "S610", "M", "M"
+                context.node.lineno - 1, context.node.col_offset, "S-610", "M", "M"
             )
 
 
@@ -132,5 +132,5 @@
             sql = kwargs["sql"]
         if not AstUtilities.isString(sql):
             reportError(
-                context.node.lineno - 1, context.node.col_offset, "S611", "M", "M"
+                context.node.lineno - 1, context.node.col_offset, "S-611", "M", "M"
             )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/djangoXssVulnerability.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/djangoXssVulnerability.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
     """
     return {
         "Call": [
-            (checkDjangoXssVulnerability, ("S703",)),
+            (checkDjangoXssVulnerability, ("S-703",)),
         ],
     }
 
@@ -104,7 +104,7 @@
             secure = evaluateCall(newCall, parent)
 
     if not secure:
-        reportError(node.lineno - 1, node.col_offset, "S703", "M", "H")
+        reportError(node.lineno - 1, node.col_offset, "S-703", "M", "H")
 
 
 class DeepAssignation:
@@ -313,7 +313,7 @@
             elif isinstance(arg, ast.Starred) and isinstance(
                 arg.value, (ast.List, ast.Tuple)
             ):
-                args.extend(arg.value.elts)  # noqa: M569
+                args.extend(arg.value.elts)  # noqa: M-569
                 numSecure += 1
             else:
                 break
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/exec.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/exec.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkExecUsed, ("S102",)),
+            (checkExecUsed, ("S-102",)),
         ],
     }
 
@@ -43,4 +43,4 @@
     @type dict
     """
     if context.callFunctionNameQual == "exec":
-        reportError(context.node.lineno - 1, context.node.col_offset, "S102", "M", "H")
+        reportError(context.node.lineno - 1, context.node.col_offset, "S-102", "M", "H")
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/flaskDebug.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/flaskDebug.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkFlaskDebug, ("S201",)),
+            (checkFlaskDebug, ("S-201",)),
         ],
     }
 
@@ -47,4 +47,4 @@
         and context.callFunctionNameQual.endswith(".run")
         and context.checkCallArgValue("debug", "True")
     ):
-        reportError(context.node.lineno - 1, context.node.col_offset, "S201", "L", "M")
+        reportError(context.node.lineno - 1, context.node.col_offset, "S-201", "L", "M")
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalBindAllInterfaces.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalBindAllInterfaces.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Str": [
-            (checkBindAllInterfaces, ("S104",)),
+            (checkBindAllInterfaces, ("S-104",)),
         ],
     }
 
@@ -46,7 +46,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S104",
+            "S-104",
             "M",
             "M",
         )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalFilePermissions.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalFilePermissions.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,7 +28,7 @@
     """
     return {
         "Call": [
-            (checkFilePermissions, ("S102",)),
+            (checkFilePermissions, ("S-102",)),
         ],
     }
 
@@ -78,7 +78,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S103",
+                "S-103",
                 severity,
                 "H",
                 oct(mode),
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedPassword.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedPassword.py	Sat Mar 01 15:52:40 2025 +0100
@@ -34,13 +34,13 @@
     """
     return {
         "Str": [
-            (checkHardcodedPasswordAsString, ("S105",)),
+            (checkHardcodedPasswordAsString, ("S-105",)),
         ],
         "Call": [
-            (checkHardcodedPasswordAsFunctionArg, ("S106",)),
+            (checkHardcodedPasswordAsFunctionArg, ("S-106",)),
         ],
         "FunctionDef": [
-            (checkHardcodedPasswordAsDefault, ("S107",)),
+            (checkHardcodedPasswordAsDefault, ("S-107",)),
         ],
     }
 
@@ -64,7 +64,7 @@
                 reportError(
                     context.node.lineno - 1,
                     context.node.col_offset,
-                    "S105",
+                    "S-105",
                     "L",
                     "M",
                     node.value,
@@ -80,7 +80,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S105",
+                "S-105",
                 "L",
                 "M",
                 assign.value.value,
@@ -97,7 +97,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S105",
+                "S-105",
                 "L",
                 "M",
                 comp.comparators[0].s,
@@ -121,7 +121,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S106",
+                "S-106",
                 "L",
                 "M",
                 kw.value.value,
@@ -155,7 +155,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S107",
+                "S-107",
                 "L",
                 "M",
                 val.value,
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedTmp.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/generalHardcodedTmp.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,7 +28,7 @@
     """
     return {
         "Str": [
-            (checkHardcodedTmpDirectory, ("S108",)),
+            (checkHardcodedTmpDirectory, ("S-108",)),
         ],
     }
 
@@ -54,7 +54,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S108",
+            "S-108",
             "M",
             "M",
         )
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/hashlibInsecureFunctions.py	Sat Mar 01 15:52:40 2025 +0100
@@ -0,0 +1,155 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2020 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a check for use of insecure md4, md5, or sha1 hash
+functions in hashlib.
+"""
+
+from Security.SecurityDefaults import SecurityDefaults
+
+#
+# This is a modified version of the one found in the bandit package.
+#
+# Original Copyright 2014 Hewlett-Packard Development Company, L.P.
+#
+# SPDX-License-Identifier: Apache-2.0
+#
+
+
+def getChecks():
+    """
+    Public method to get a dictionary with checks handled by this module.
+
+    @return dictionary containing checker lists containing checker function and
+        list of codes
+    @rtype dict
+    """
+    return {
+        "Call": [
+            (checkHashlib, ("S-331", "S-332")),
+        ],
+    }
+
+
+def _hashlibFunc(reportError, context, func, config):
+    """
+    Function to check for use of insecure md4, md5, or sha1 hash functions
+    in hashlib if 'usedforsecurity' is not set to 'False'.
+
+    @param reportError function to be used to report errors
+    @type func
+    @param context security context object
+    @type SecurityContext
+    @param func name of the hash function
+    @type str
+    @param config dictionary with configuration data
+    @type dict
+    """
+    insecureHashes = (
+        [h.lower() for h in config["insecure_hashes"]]
+        if config and "insecure_hashes" in config
+        else SecurityDefaults["insecure_hashes"]
+    )
+
+    if isinstance(context.callFunctionNameQual, str):
+        keywords = context.callKeywords
+
+        if func in insecureHashes:
+            if keywords.get("usedforsecurity", "True") == "True":
+                reportError(
+                    context.node.lineno - 1,
+                    context.node.col_offset,
+                    "S-332",
+                    "H",
+                    "H",
+                    func.upper(),
+                )
+        elif func == "new":
+            args = context.callArgs
+            name = args[0] if args else keywords.get("name")
+            if (
+                isinstance(name, str)
+                and name.lower() in insecureHashes
+                and keywords.get("usedforsecurity", "True") == "True"
+            ):
+                reportError(
+                    context.node.lineno - 1,
+                    context.node.col_offset,
+                    "S-332",
+                    "H",
+                    "H",
+                    name.upper(),
+                )
+
+
+def _cryptCrypt(reportError, context, func, config):
+    """
+    Function to check for use of insecure md4, md5, sha or sha1 hash functions
+    in crypt.crypt().
+
+    @param reportError function to be used to report errors
+    @type func
+    @param context security context object
+    @type SecurityContext
+    @param func name of the hash function
+    @type str
+    @param config dictionary with configuration data
+    @type dict
+    """
+    insecureHashes = (
+        [h.lower() for h in config["insecure_hashes"]]
+        if config and "insecure_hashes" in config
+        else SecurityDefaults["insecure_hashes"]
+    )
+
+    args = context.callArgs
+    keywords = context.callKeywords
+
+    if func == "crypt":
+        name = args[1] if len(args) > 1 else keywords.get("salt")
+        if isinstance(name, str) and name in insecureHashes:
+            reportError(
+                context.node.lineno - 1,
+                context.node.col_offset,
+                "S-331",
+                "M",
+                "H",
+                name.upper(),
+            )
+
+    elif func == "mksalt":
+        name = args[0] if args else keywords.get("method")
+        if isinstance(name, str) and name in insecureHashes:
+            reportError(
+                context.node.lineno - 1,
+                context.node.col_offset,
+                "S-331",
+                "M",
+                "H",
+                name.upper(),
+            )
+
+
+def checkHashlib(reportError, context, config):
+    """
+    Function to check for use of insecure md4, md5, sha or sha1 hash functions
+    in hashlib.new().
+
+    @param reportError function to be used to report errors
+    @type func
+    @param context security context object
+    @type SecurityContext
+    @param config dictionary with configuration data
+    @type dict
+    """
+    if isinstance(context.callFunctionNameQual, str):
+        qualnameList = context.callFunctionNameQual.split(".")
+        func = qualnameList[-1]
+
+        if "hashlib" in qualnameList:
+            _hashlibFunc(reportError, context, func, config)
+        elif "crypt" in qualnameList and func in ("crypt", "mksalt"):
+            _cryptCrypt(reportError, context, func, config)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionParamiko.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionParamiko.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkParamikoCalls, ("S601",)),
+            (checkParamikoCalls, ("S-601",)),
         ],
     }
 
@@ -49,7 +49,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S601",
+                "S-601",
                 "M",
                 "M",
             )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionShell.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionShell.py	Sat Mar 01 15:52:40 2025 +0100
@@ -37,12 +37,12 @@
     """
     return {
         "Call": [
-            (checkSubprocessPopenWithShell, ("S602",)),
-            (checkSubprocessPopenWithoutShell, ("S603",)),
-            (checkOtherFunctionWithShell, ("S604",)),
-            (checkStartProcessWithShell, ("S605",)),
-            (checkStartProcessWithNoShell, ("S606",)),
-            (checkStartProcessWithPartialPath, ("S607",)),
+            (checkSubprocessPopenWithShell, ("S-602",)),
+            (checkSubprocessPopenWithoutShell, ("S-603",)),
+            (checkOtherFunctionWithShell, ("S-604",)),
+            (checkStartProcessWithShell, ("S-605",)),
+            (checkStartProcessWithNoShell, ("S-606",)),
+            (checkStartProcessWithPartialPath, ("S-607",)),
         ],
     }
 
@@ -122,7 +122,7 @@
             reportError(
                 context.getLinenoForCallArg("shell") - 1,
                 context.getOffsetForCallArg("shell"),
-                "S602.L",
+                "S-602.L",
                 sev,
                 "H",
             )
@@ -130,7 +130,7 @@
             reportError(
                 context.getLinenoForCallArg("shell") - 1,
                 context.getOffsetForCallArg("shell"),
-                "S602.H",
+                "S-602.H",
                 sev,
                 "H",
             )
@@ -157,7 +157,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S603",
+            "S-603",
             "L",
             "H",
         )
@@ -184,7 +184,7 @@
         reportError(
             context.getLinenoForCallArg("shell") - 1,
             context.getOffsetForCallArg("shell"),
-            "S604",
+            "S-604",
             "M",
             "L",
         )
@@ -213,7 +213,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S605.L",
+                "S-605.L",
                 sev,
                 "H",
             )
@@ -221,7 +221,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S605.H",
+                "S-605.H",
                 sev,
                 "H",
             )
@@ -248,7 +248,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S606",
+            "S-606",
             "L",
             "M",
         )
@@ -293,7 +293,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S607",
+                "S-607",
                 "L",
                 "H",
             )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionSql.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionSql.py	Sat Mar 01 15:52:40 2025 +0100
@@ -31,7 +31,7 @@
     """
     return {
         "Str": [
-            (checkHardcodedSqlExpressions, ("S608",)),
+            (checkHardcodedSqlExpressions, ("S-608",)),
         ],
     }
 
@@ -121,7 +121,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S608",
+            "S-608",
             "M",
             "M" if executeCall and not strReplace else "L",
         )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionWildcard.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/injectionWildcard.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,7 +28,7 @@
     """
     return {
         "Call": [
-            (checkLinuxCommandsWildcardInjection, ("S609",)),
+            (checkLinuxCommandsWildcardInjection, ("S-609",)),
         ],
     }
 
@@ -84,7 +84,7 @@
                     reportError(
                         lineNo - 1,
                         offset,
-                        "S609",
+                        "S-609",
                         "H",
                         "M",
                         context.callFunctionNameQual,
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/insecureHashlibNew.py	Sun Feb 09 15:47:57 2025 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,195 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Copyright (c) 2020 - 2025 Detlev Offenbach <detlev@die-offenbachs.de>
-#
-
-"""
-Module implementing a check for use of insecure md4, md5, or sha1 hash
-functions in hashlib.new().
-"""
-
-import sys
-
-from Security.SecurityDefaults import SecurityDefaults
-
-#
-# This is a modified version of the one found in the bandit package.
-#
-# Original Copyright 2014 Hewlett-Packard Development Company, L.P.
-#
-# SPDX-License-Identifier: Apache-2.0
-#
-
-
-def getChecks():
-    """
-    Public method to get a dictionary with checks handled by this module.
-
-    @return dictionary containing checker lists containing checker function and
-        list of codes
-    @rtype dict
-    """
-    return {
-        "Call": [
-            (checkHashlib, ("S331",)),
-        ],
-    }
-
-
-def _hashlibFunc(reportError, context, func, config):
-    """
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in hashlib.new() if 'usedforsecurity' is not set to 'False'.
-
-    @param reportError function to be used to report errors
-    @type func
-    @param context security context object
-    @type SecurityContext
-    @param func name of the hash function
-    @type str
-    @param config dictionary with configuration data
-    @type dict
-    """
-    insecureHashes = (
-        [h.lower() for h in config["insecure_hashes"]]
-        if config and "insecure_hashes" in config
-        else SecurityDefaults["insecure_hashes"]
-    )
-
-    if isinstance(context.callFunctionNameQual, str):
-        keywords = context.callKeywords
-
-        if func in insecureHashes:
-            if keywords.get("usedforsecurity", "True") == "True":
-                reportError(
-                    context.node.lineno - 1,
-                    context.node.col_offset,
-                    "S332",
-                    "H",
-                    "H",
-                    func.upper(),
-                )
-        elif func == "new":
-            args = context.callArgs
-            name = args[0] if args else keywords.get("name")
-            if (
-                isinstance(name, str)
-                and name.lower() in insecureHashes
-                and keywords.get("usedforsecurity", "True") == "True"
-            ):
-                reportError(
-                    context.node.lineno - 1,
-                    context.node.col_offset,
-                    "S332",
-                    "H",
-                    "H",
-                    name.upper(),
-                )
-
-
-def _hashlibNew(reportError, context, func, config):
-    """
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in hashlib.new().
-
-    @param reportError function to be used to report errors
-    @type func
-    @param context security context object
-    @type SecurityContext
-    @param func name of the hash function
-    @type str
-    @param config dictionary with configuration data
-    @type dict
-    """
-    insecureHashes = (
-        [h.lower() for h in config["insecure_hashes"]]
-        if config and "insecure_hashes" in config
-        else SecurityDefaults["insecure_hashes"]
-    )
-
-    if func == "new":
-        args = context.callArgs
-        keywords = context.callKeywords
-        name = args[0] if args else keywords.get("name")
-        if isinstance(name, str) and name.lower() in insecureHashes:
-            reportError(
-                context.node.lineno - 1,
-                context.node.col_offset,
-                "S331",
-                "M",
-                "H",
-                name.upper(),
-            )
-
-
-def _cryptCrypt(reportError, context, func, config):
-    """
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in crypt.crypt().
-
-    @param reportError function to be used to report errors
-    @type func
-    @param context security context object
-    @type SecurityContext
-    @param func name of the hash function
-    @type str
-    @param config dictionary with configuration data
-    @type dict
-    """
-    insecureHashes = (
-        [h.lower() for h in config["insecure_hashes"]]
-        if config and "insecure_hashes" in config
-        else SecurityDefaults["insecure_hashes"]
-    )
-
-    args = context.callArgs
-    keywords = context.callKeywords
-
-    if func == "crypt":
-        name = args[1] if len(args) > 1 else keywords.get("salt")
-        if isinstance(name, str) and name in insecureHashes:
-            reportError(
-                context.node.lineno - 1,
-                context.node.col_offset,
-                "S331",
-                "M",
-                "H",
-                name.upper(),
-            )
-
-    elif func == "mksalt":
-        name = args[0] if args else keywords.get("method")
-        if isinstance(name, str) and name in insecureHashes:
-            reportError(
-                context.node.lineno - 1,
-                context.node.col_offset,
-                "S331",
-                "M",
-                "H",
-                name.upper(),
-            )
-
-
-def checkHashlib(reportError, context, config):
-    """
-    Function to check for use of insecure md4, md5, sha or sha1 hash functions
-    in hashlib.new().
-
-    @param reportError function to be used to report errors
-    @type func
-    @param context security context object
-    @type SecurityContext
-    @param config dictionary with configuration data
-    @type dict
-    """
-    if isinstance(context.callFunctionNameQual, str):
-        qualnameList = context.callFunctionNameQual.split(".")
-        func = qualnameList[-1]
-
-        if "hashlib" in qualnameList:
-            if sys.version_info >= (3, 9):
-                _hashlibFunc(reportError, context, func, config)
-            else:
-                _hashlibNew(reportError, context, func, config)
-        elif "crypt" in qualnameList and func in ("crypt", "mksalt"):
-            _cryptCrypt(reportError, context, func, config)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/insecureSslTls.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/insecureSslTls.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,11 +28,11 @@
     """
     return {
         "Call": [
-            (checkInsecureSslProtocolVersion, ("S502",)),
-            (checkSslWithoutVersion, ("S504",)),
+            (checkInsecureSslProtocolVersion, ("S-502",)),
+            (checkSslWithoutVersion, ("S-504",)),
         ],
         "FunctionDef": [
-            (checkInsecureSslDefaults, ("S503",)),
+            (checkInsecureSslDefaults, ("S-503",)),
         ],
     }
 
@@ -59,7 +59,7 @@
             reportError(
                 context.getLinenoForCallArg("ssl_version") - 1,
                 context.getOffsetForCallArg("ssl_version"),
-                "S502.1",
+                "S-502.1",
                 "H",
                 "H",
             )
@@ -69,7 +69,7 @@
             reportError(
                 context.getLinenoForCallArg("method") - 1,
                 context.getOffsetForCallArg("method"),
-                "S502.2",
+                "S-502.2",
                 "H",
                 "H",
             )
@@ -82,7 +82,7 @@
             reportError(
                 context.getLinenoForCallArg("method") - 1,
                 context.getOffsetForCallArg("method"),
-                "S502.3",
+                "S-502.3",
                 "H",
                 "H",
             )
@@ -91,7 +91,7 @@
             reportError(
                 context.getLinenoForCallArg("ssl_version") - 1,
                 context.getOffsetForCallArg("ssl_version"),
-                "S502.3",
+                "S-502.3",
                 "H",
                 "H",
             )
@@ -120,7 +120,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S503",
+                "S-503",
                 "M",
                 "M",
             )
@@ -148,7 +148,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S504",
+            "S-504",
             "L",
             "M",
         )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/jinja2Templates.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/jinja2Templates.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,7 +28,7 @@
     """
     return {
         "Call": [
-            (checkJinja2Autoescape, ("S701",)),
+            (checkJinja2Autoescape, ("S-701",)),
         ],
     }
 
@@ -58,7 +58,7 @@
                         reportError(
                             context.node.lineno - 1,
                             context.node.col_offset,
-                            "S701.1",
+                            "S-701.1",
                             "H",
                             "H",
                         )
@@ -86,7 +86,7 @@
                             reportError(
                                 context.node.lineno - 1,
                                 context.node.col_offset,
-                                "S701.1",
+                                "S-701.1",
                                 "H",
                                 "M",
                             )
@@ -97,7 +97,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S701.2",
+                "S-701.2",
                 "H",
                 "H",
             )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/loggingConfigInsecureListen.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/loggingConfigInsecureListen.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkLoggingConfigListen, ("S612",)),
+            (checkLoggingConfigListen, ("S-612",)),
         ],
     }
 
@@ -46,4 +46,4 @@
         context.callFunctionNameQual == "logging.config.listen"
         and "verify" not in context.callKeywords
     ):
-        reportError(context.node.lineno - 1, context.node.col_offset, "S612", "M", "H")
+        reportError(context.node.lineno - 1, context.node.col_offset, "S-612", "M", "H")
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/makoTemplates.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/makoTemplates.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkMakoTemplateUsage, ("S702",)),
+            (checkMakoTemplateUsage, ("S-702",)),
         ],
     }
 
@@ -51,7 +51,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S702",
+                "S-702",
                 "M",
                 "H",
             )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/prohibitedCalls.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/prohibitedCalls.py	Sat Mar 01 15:52:40 2025 +0100
@@ -17,19 +17,15 @@
 
 import ast
 import fnmatch
-import sys
 
 import AstUtilities
 
 _prohibitedCalls = {
-    "S301": (
+    "S-301": (
         [
             "pickle.loads",
             "pickle.load",
             "pickle.Unpickler",
-            "cPickle.loads",
-            "cPickle.load",
-            "cPickle.Unpickler",
             "dill.loads",
             "dill.load",
             "dill.Unpickler",
@@ -42,10 +38,8 @@
         ],
         "M",
     ),
-    "S302": (["marshal.load", "marshal.loads"], "M"),
-}
-if sys.version_info >= (3, 9):
-    _prohibitedCalls["S303"] = (
+    "S-302": (["marshal.load", "marshal.loads"], "M"),
+    "S-303": (
         [
             "Crypto.Hash.MD2.new",
             "Crypto.Hash.MD4.new",
@@ -59,122 +53,89 @@
             "cryptography.hazmat.primitives.hashes.SHA1",
         ],
         "M",
-    )
-else:
-    _prohibitedCalls["S303"] = (
+    ),
+    "S-304": (
+        [
+            "Crypto.Cipher.ARC2.new",
+            "Crypto.Cipher.ARC4.new",
+            "Crypto.Cipher.Blowfish.new",
+            "Crypto.Cipher.DES.new",
+            "Crypto.Cipher.XOR.new",
+            "Cryptodome.Cipher.ARC2.new",
+            "Cryptodome.Cipher.ARC4.new",
+            "Cryptodome.Cipher.Blowfish.new",
+            "Cryptodome.Cipher.DES.new",
+            "Cryptodome.Cipher.XOR.new",
+            "cryptography.hazmat.primitives.ciphers.algorithms.ARC4",
+            "cryptography.hazmat.primitives.ciphers.algorithms.Blowfish",
+            "cryptography.hazmat.primitives.ciphers.algorithms.CAST5",
+            "cryptography.hazmat.primitives.ciphers.algorithms.IDEA",
+            "cryptography.hazmat.primitives.ciphers.algorithms.SEED",
+            "cryptography.hazmat.primitives.ciphers.algorithms.TripleDES",
+        ],
+        "H",
+    ),
+    "S-305": (["cryptography.hazmat.primitives.ciphers.modes.ECB"], "M"),
+    "S-306": (["tempfile.mktemp"], "M"),
+    "S-307": (["eval"], "M"),
+    "S-308": (["django.utils.safestring.mark_safe"], "M"),
+    "S-310": (
         [
-            "hashlib.md4",
-            "hashlib.md5",
-            "hashlib.sha",
-            "hashlib.sha1",
-            "Crypto.Hash.MD2.new",
-            "Crypto.Hash.MD4.new",
-            "Crypto.Hash.MD5.new",
-            "Crypto.Hash.SHA.new",
-            "Cryptodome.Hash.MD2.new",
-            "Cryptodome.Hash.MD4.new",
-            "Cryptodome.Hash.MD5.new",
-            "Cryptodome.Hash.SHA.new",
-            "cryptography.hazmat.primitives.hashes.MD5",
-            "cryptography.hazmat.primitives.hashes.SHA1",
+            "urllib.request.urlopen",
+            "urllib.request.urlretrieve",
+            "urllib.request.URLopener",
+            "urllib.request.FancyURLopener",
+            "six.moves.urllib.request.urlopen",
+            "six.moves.urllib.request.urlretrieve",
+            "six.moves.urllib.request.URLopener",
+            "six.moves.urllib.request.FancyURLopener",
+        ],
+        "",
+    ),
+    "S-311": (
+        [
+            "random.Random",
+            "random.random",
+            "random.randrange",
+            "random.randint",
+            "random.choice",
+            "random.choices",
+            "random.uniform",
+            "random.triangular",
+            "random.randbytes",
+        ],
+        "L",
+    ),
+    "S-312": (["telnetlib.Telnet"], "H"),
+    "S-313": (
+        [
+            "xml.etree.cElementTree.parse",
+            "xml.etree.cElementTree.iterparse",
+            "xml.etree.cElementTree.fromstring",
+            "xml.etree.cElementTree.XMLParser",
         ],
         "M",
-    )
-
-_prohibitedCalls.update(
-    {
-        "S304": (
-            [
-                "Crypto.Cipher.ARC2.new",
-                "Crypto.Cipher.ARC4.new",
-                "Crypto.Cipher.Blowfish.new",
-                "Crypto.Cipher.DES.new",
-                "Crypto.Cipher.XOR.new",
-                "Cryptodome.Cipher.ARC2.new",
-                "Cryptodome.Cipher.ARC4.new",
-                "Cryptodome.Cipher.Blowfish.new",
-                "Cryptodome.Cipher.DES.new",
-                "Cryptodome.Cipher.XOR.new",
-                "cryptography.hazmat.primitives.ciphers.algorithms.ARC4",
-                "cryptography.hazmat.primitives.ciphers.algorithms.Blowfish",
-                "cryptography.hazmat.primitives.ciphers.algorithms.IDEA",
-            ],
-            "H",
-        ),
-        "S305": (["cryptography.hazmat.primitives.ciphers.modes.ECB"], "M"),
-        "S306": (["tempfile.mktemp"], "M"),
-        "S307": (["eval"], "M"),
-        "S308": (["django.utils.safestring.mark_safe"], "M"),
-        "S310": (
-            [
-                "urllib.request.urlopen",
-                "urllib.request.urlretrieve",
-                "urllib.request.URLopener",
-                "urllib.request.FancyURLopener",
-                "six.moves.urllib.request.urlopen",
-                "six.moves.urllib.request.urlretrieve",
-                "six.moves.urllib.request.URLopener",
-                "six.moves.urllib.request.FancyURLopener",
-            ],
-            "",
-        ),
-        "S311": (
-            [
-                "random.Random",
-                "random.random",
-                "random.randrange",
-                "random.randint",
-                "random.choice",
-                "random.choices",
-                "random.uniform",
-                "random.triangular",
-                "random.randbytes",
-            ],
-            "L",
-        ),
-        "S312": (["telnetlib.Telnet"], "H"),
-        "S313": (
-            [
-                "xml.etree.cElementTree.parse",
-                "xml.etree.cElementTree.iterparse",
-                "xml.etree.cElementTree.fromstring",
-                "xml.etree.cElementTree.XMLParser",
-            ],
-            "M",
-        ),
-        "S314": (
-            [
-                "xml.etree.ElementTree.parse",
-                "xml.etree.ElementTree.iterparse",
-                "xml.etree.ElementTree.fromstring",
-                "xml.etree.ElementTree.XMLParser",
-            ],
-            "M",
-        ),
-        "S315": (["xml.sax.expatreader.create_parser"], "M"),
-        "S316": (
-            ["xml.dom.expatbuilder.parse", "xml.dom.expatbuilder.parseString"],
-            "M",
-        ),
-        "S317": (["xml.sax.parse", "xml.sax.parseString", "xml.sax.make_parser"], "M"),
-        "S318": (["xml.dom.minidom.parse", "xml.dom.minidom.parseString"], "M"),
-        "S319": (["xml.dom.pulldom.parse", "xml.dom.pulldom.parseString"], "M"),
-        "S320": (
-            [
-                "lxml.etree.parse",
-                "lxml.etree.fromstring",
-                "lxml.etree.RestrictedElement",
-                "lxml.etree.GlobalParserTLS",
-                "lxml.etree.getDefaultParser",
-                "lxml.etree.check_docinfo",
-            ],
-            "M",
-        ),
-        "S321": (["ftplib.FTP"], "H"),
-        "S322": (["input"], "H"),
-        "S323": (["ssl._create_unverified_context"], "M"),
-    }
-)
+    ),
+    "S-314": (
+        [
+            "xml.etree.ElementTree.parse",
+            "xml.etree.ElementTree.iterparse",
+            "xml.etree.ElementTree.fromstring",
+            "xml.etree.ElementTree.XMLParser",
+        ],
+        "M",
+    ),
+    "S-315": (["xml.sax.expatreader.create_parser"], "M"),
+    "S-316": (
+        ["xml.dom.expatbuilder.parse", "xml.dom.expatbuilder.parseString"],
+        "M",
+    ),
+    "S-317": (["xml.sax.parse", "xml.sax.parseString", "xml.sax.make_parser"], "M"),
+    "S-318": (["xml.dom.minidom.parse", "xml.dom.minidom.parseString"], "M"),
+    "S-319": (["xml.dom.pulldom.parse", "xml.dom.pulldom.parseString"], "M"),
+    "S-321": (["ftplib.FTP"], "H"),
+    "S-323": (["ssl._create_unverified_context"], "M"),
+}
 
 
 def getChecks():
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/prohibitedImports.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/prohibitedImports.py	Sat Mar 01 15:52:40 2025 +0100
@@ -16,18 +16,17 @@
 #
 
 _prohibitedImports = {
-    "S401": (["telnetlib"], "H"),
-    "S402": (["ftplib"], "H"),
-    "S403": (["pickle", "cPickle", "dill", "shelve"], "L"),
-    "S404": (["subprocess"], "L"),
-    "S405": (["xml.etree.cElementTree", "xml.etree.ElementTree"], "L"),
-    "S406": (["xml.sax"], "L"),
-    "S407": (["xml.dom.expatbuilder"], "L"),
-    "S408": (["xml.dom.minidom"], "L"),
-    "S409": (["xml.dom.pulldom"], "L"),
-    "S410": (["lxml"], "L"),
-    "S411": (["xmlrpc"], "H"),
-    "S412": (
+    "S-401": (["telnetlib"], "H"),
+    "S-402": (["ftplib"], "H"),
+    "S-403": (["pickle", "cPickle", "dill", "shelve"], "L"),
+    "S-404": (["subprocess"], "L"),
+    "S-405": (["xml.etree.cElementTree", "xml.etree.ElementTree"], "L"),
+    "S-406": (["xml.sax"], "L"),
+    "S-407": (["xml.dom.expatbuilder"], "L"),
+    "S-408": (["xml.dom.minidom"], "L"),
+    "S-409": (["xml.dom.pulldom"], "L"),
+    "S-411": (["xmlrpc"], "H"),
+    "S-412": (
         [
             "wsgiref.handlers.CGIHandler",
             "twisted.web.twcgi.CGIScript",
@@ -35,7 +34,7 @@
         ],
         "H",
     ),
-    "S413": (
+    "S-413": (
         [
             "Crypto.Cipher",
             "Crypto.Hash",
@@ -48,7 +47,7 @@
         ],
         "H",
     ),
-    "S414": (["pyghmi"], "H"),
+    "S-414": (["pyghmi"], "H"),
 }
 
 
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/pytorchLoadSave.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/pytorchLoadSave.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkPytorchLoadSave, ("S614",)),
+            (checkPytorchLoadSave, ("S-614",)),
         ],
     }
 
@@ -63,7 +63,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S614",
+            "S-614",
             "M",
             "H",
         )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/requestWithoutTimeout.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/requestWithoutTimeout.py	Sat Mar 01 15:52:40 2025 +0100
@@ -24,7 +24,7 @@
     """
     return {
         "Call": [
-            (checkRequestWithouTimeout, ("S114",)),
+            (checkRequestWithouTimeout, ("S-114",)),
         ],
     }
 
@@ -43,27 +43,32 @@
     httpVerbs = {"get", "options", "head", "post", "put", "patch", "delete"}
     httpxAttrs = {"request", "stream", "Client", "AsyncClient"} | httpVerbs
     qualName = context.callFunctionNameQual.split(".")[0]
-    if (qualName == "requests" and context.callFunctionName in httpVerbs) or (
-        qualName == "httpx" and context.callFunctionName in httpxAttrs
+
+    if (
+        qualName == "requests"
+        and context.callFunctionName in httpVerbs
+        and context.checkCallArgValue("timeout") is None
     ):
         # check for missing timeout
-        if context.checkCallArgValue("timeout") is None:
-            reportError(
-                context.node.lineno - 1,
-                context.node.col_offset,
-                "S114.1",
-                "M",
-                "L",
-                qualName,
-            )
+        reportError(
+            context.node.lineno - 1,
+            context.node.col_offset,
+            "S-114.1",
+            "M",
+            "L",
+            qualName,
+        )
 
+    if (
+        (qualName == "requests" and context.callFunctionName in httpVerbs)
+        or (qualName == "httpx" and context.callFunctionName in httpxAttrs)
+    ) and context.checkCallArgValue("timeout", "None"):
         # check for timeout=None
-        if context.checkCallArgValue("timeout", "None"):
-            reportError(
-                context.node.lineno - 1,
-                context.node.col_offset,
-                "S114.2",
-                "M",
-                "L",
-                qualName,
-            )
+        reportError(
+            context.node.lineno - 1,
+            context.node.col_offset,
+            "S-114.2",
+            "M",
+            "L",
+            qualName,
+        )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/snmpSecurity.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/snmpSecurity.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,8 +26,8 @@
     """
     return {
         "Call": [
-            (checkInsecureVersion, ("S508",)),
-            (checkWeakCryptography, ("S509",)),
+            (checkInsecureVersion, ("S-508",)),
+            (checkWeakCryptography, ("S-509",)),
         ],
     }
 
@@ -52,7 +52,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S508",
+            "S-508",
             "M",
             "H",
         )
@@ -74,4 +74,4 @@
         context.callFunctionNameQual == "pysnmp.hlapi.UsmUserData"
         and context.callArgsCount < 3
     ):
-        reportError(context.node.lineno - 1, context.node.col_offset, "S509", "M", "H")
+        reportError(context.node.lineno - 1, context.node.col_offset, "S-509", "M", "H")
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/sshNoHostKeyVerification.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/sshNoHostKeyVerification.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,7 +28,7 @@
     """
     return {
         "Call": [
-            (checkSshNoHostKeyVerification, ("S507",)),
+            (checkSshNoHostKeyVerification, ("S-507",)),
         ],
     }
 
@@ -66,7 +66,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S507",
+                "S-507",
                 "H",
                 "M",
             )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tarfileUnsafeMembers.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tarfileUnsafeMembers.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkTarfileUnsafeMembers, ("S202",)),
+            (checkTarfileUnsafeMembers, ("S-202",)),
         ],
     }
 
@@ -95,7 +95,7 @@
                 reportError(
                     context.node.lineno - 1,
                     context.node.col_offset,
-                    "S202.1",
+                    "S-202.1",
                     "L",
                     "L",
                     str(members),
@@ -104,12 +104,12 @@
                 reportError(
                     context.node.lineno - 1,
                     context.node.col_offset,
-                    "S202.2",
+                    "S-202.2",
                     "M",
                     "M",
                     str(members),
                 )
         else:
             reportError(
-                context.node.lineno - 1, context.node.col_offset, "S202.3", "H", "H"
+                context.node.lineno - 1, context.node.col_offset, "S-202.3", "H", "H"
             )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/trojanSource.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/trojanSource.py	Sat Mar 01 15:52:40 2025 +0100
@@ -29,7 +29,7 @@
     """
     return {
         "File": [
-            (checkTrojanSource, ("S613",)),
+            (checkTrojanSource, ("S-613",)),
         ],
     }
 
@@ -75,7 +75,7 @@
                 reportError(
                     lineno,
                     colOffset,
-                    "S613",
+                    "S-613",
                     "H",
                     "M",
                     repr(char),
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tryExcept.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tryExcept.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,11 +30,11 @@
     """
     return {
         "ExceptHandler": [
-            (checkTryExceptPass, ("S110",)),
-            (checkTryExceptContinue, ("S112",)),
+            (checkTryExceptPass, ("S-110",)),
+            (checkTryExceptContinue, ("S-112",)),
         ],
         "Call": [
-            (checkContextlibSuppress, ("S113",)),
+            (checkContextlibSuppress, ("S-113",)),
         ],
     }
 
@@ -69,7 +69,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S110",
+                "S-110",
                 "L",
                 "H",
             )
@@ -105,7 +105,7 @@
             reportError(
                 context.node.lineno - 1,
                 context.node.col_offset,
-                "S112",
+                "S-112",
                 "L",
                 "H",
             )
@@ -146,7 +146,7 @@
         reportError(
             context.node.lineno - 1,
             context.node.col_offset,
-            "S113",
+            "S-113",
             "L",
             "H",
         )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/weakCryptographicKey.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/weakCryptographicKey.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,7 +28,7 @@
     """
     return {
         "Call": [
-            (checkWeakCryptographicKey, ("S505",)),
+            (checkWeakCryptographicKey, ("S-505",)),
         ],
     }
 
@@ -81,7 +81,7 @@
     for size, level in keySizes[keyType]:
         if keySize < size:
             reportError(
-                node.lineno - 1, node.col_offset, "S505", level, "H", keyType, size
+                node.lineno - 1, node.col_offset, "S-505", level, "H", keyType, size
             )
             return True
 
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/yamlLoad.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/yamlLoad.py	Sat Mar 01 15:52:40 2025 +0100
@@ -26,7 +26,7 @@
     """
     return {
         "Call": [
-            (checkYamlLoad, ("S506",)),
+            (checkYamlLoad, ("S-506",)),
         ],
     }
 
@@ -59,4 +59,4 @@
             context.getCallArgAtPosition(1) != "CSafeLoader",
         ]
     ):
-        reportError(context.node.lineno - 1, context.node.col_offset, "S506", "M", "H")
+        reportError(context.node.lineno - 1, context.node.col_offset, "S-506", "M", "H")
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -8,117 +8,117 @@
 """
 
 import collections
-import copy
+
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
 from . import Checks
 from .SecurityNodeVisitor import SecurityNodeVisitor
 
 
-class SecurityChecker:
+class SecurityChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for security issues.
     """
 
     Codes = [
         # assert used
-        "S101",
+        "S-101",
         # exec used
-        "S102",
+        "S-102",
         # bad file permissions
-        "S103",
+        "S-103",
         # bind to all interfaces
-        "S104",
+        "S-104",
         # hardcoded passwords
-        "S105",
-        "S106",
-        "S107"
+        "S-105",
+        "S-106",
+        "S-107"
         # hardcoded tmp directory
-        "S108",
+        "S-108",
         # try-except
-        "S110",
-        "S112",
+        "S-110",
+        "S-112",
         # flask app
-        "S201",
+        "S-201",
         # insecure function calls (prohibited)
-        "S301",
-        "S302",
-        "S303",
-        "S304",
-        "S305",
-        "S306",
-        "S307",
-        "S308",
-        "S310",
-        "S311",
-        "S312",
-        "S313",
-        "S314",
-        "S315",
-        "S316",
-        "S317",
-        "S318",
-        "S319",
-        "S320",
-        "S321",
-        "S322",
-        "S323",
-        # hashlib.new
-        "S331",
+        "S-301",
+        "S-302",
+        "S-303",
+        "S-304",
+        "S-305",
+        "S-306",
+        "S-307",
+        "S-308",
+        "S-310",
+        "S-311",
+        "S-312",
+        "S-313",
+        "S-314",
+        "S-315",
+        "S-316",
+        "S-317",
+        "S-318",
+        "S-319",
+        "S-321",
+        "S-323",
+        # hashlib functions
+        "S-331",
+        "S-332"
         # insecure imports (prohibited)
-        "S401",
-        "S402",
-        "S403",
-        "S404",
-        "S405",
-        "S406",
-        "S407",
-        "S408",
-        "S409",
-        "S410",
-        "S411",
-        "S412",
-        "S413",
+        "S-401",
+        "S-402",
+        "S-403",
+        "S-404",
+        "S-405",
+        "S-406",
+        "S-407",
+        "S-408",
+        "S-409",
+        "S-411",
+        "S-412",
+        "S-413",
         # insecure certificate usage
-        "S501",
+        "S-501",
         # insecure SSL/TLS protocol version
-        "S502",
-        "S503",
-        "S504",
+        "S-502",
+        "S-503",
+        "S-504",
         # weak cryptographic keys
-        "S505",
+        "S-505",
         # YAML load
-        "S506",
+        "S-506",
         # SSH host key verification
-        "S507",
+        "S-507",
         # Shell injection
-        "S601",
-        "S602",
-        "S603",
-        "S604",
-        "S605",
-        "S606",
-        "S607",
+        "S-601",
+        "S-602",
+        "S-603",
+        "S-604",
+        "S-605",
+        "S-606",
+        "S-607",
         # SQL injection
-        "S608",
+        "S-608",
         # Wildcard injection
-        "S609",
+        "S-609",
         # Django SQL injection
-        "S610",
-        "S611",
+        "S-610",
+        "S-611",
         # insecure logging.config.listen()
-        "S612",
-        "S613",
-        "S614",
+        "S-612",
+        "S-613",
+        "S-614",
         # Jinja2 templates
-        "S701",
+        "S-701",
         # Mako templates
-        "S702",
+        "S-702",
         # Django XSS vulnerability
-        "S703",
+        "S-703",
         # hardcoded AWS passwords
-        "S801",
-        "S802",
+        "S-801",
+        "S-802",
     ]
+    Category = "S"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -141,41 +141,29 @@
         @param args dictionary of arguments for the security checks
         @type dict
         """
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
+        super().__init__(
+            SecurityChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
         checkersWithCodes = Checks.generateCheckersDict()
 
         self.__checkers = collections.defaultdict(list)
         for checkType, checkersList in checkersWithCodes.items():
             for checker, codes in checkersList:
-                if any(not (code and self.__ignoreCode(code)) for code in codes):
+                if any(
+                    not (msgCode and self._ignoreCode(msgCode)) for msgCode in codes
+                ):
                     self.__checkers[checkType].append(checker)
 
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def reportError(self, lineNumber, offset, code, severity, confidence, *args):
+    def addError(self, lineNumber, offset, msgCode, severity, confidence, *args):
         """
         Public method to record an issue.
 
@@ -183,7 +171,7 @@
         @type int
         @param offset position within line of the issue
         @type int
-        @param code message code
+        @param msgCode message code
         @type str
         @param severity severity code (H = high, M = medium, L = low,
             U = undefined)
@@ -194,26 +182,26 @@
         @param args arguments for the message
         @type list
         """
-        if self.__ignoreCode(code):
+        if self._ignoreCode(msgCode):
             return
 
-        if code in self.counters:
-            self.counters[code] += 1
+        if msgCode in self.counters:
+            self.counters[msgCode] += 1
         else:
-            self.counters[code] = 1
+            self.counters[msgCode] = 1
 
         # Don't care about expected codes
-        if code in self.__expected:
+        if msgCode in self.expected:
             return
 
-        if code and (self.counters[code] == 1 or self.__repeat):
+        if msgCode and (self.counters[msgCode] == 1 or self.repeat):
             # record the issue with one based line number
             self.errors.append(
                 {
-                    "file": self.__filename,
+                    "file": self.filename,
                     "line": lineNumber + 1,
                     "offset": offset,
-                    "code": code,
+                    "code": msgCode,
                     "args": args,
                     "severity": severity,
                     "confidence": confidence,
@@ -227,14 +215,14 @@
         @return dictionary containing the configuration
         @rtype dict
         """
-        return self.__args
+        return self.args
 
     def run(self):
         """
         Public method to check the given source against security related
         conditions.
         """
-        if not self.__filename:
+        if not self.filename:
             # don't do anything, if essential data is missing
             return
 
@@ -243,7 +231,7 @@
             return
 
         securityNodeVisitor = SecurityNodeVisitor(
-            self, self.__checkers, self.__filename, self.__source
+            self, self.__checkers, self.filename, self.source
         )
-        securityNodeVisitor.generic_visit(self.__tree)
+        securityNodeVisitor.generic_visit(self.tree)
         securityNodeVisitor.checkFile()
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityDefaults.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityDefaults.py	Sat Mar 01 15:52:40 2025 +0100
@@ -11,7 +11,7 @@
     # generalHardcodedTmp.py
     "hardcoded_tmp_directories": ["/tmp", "/var/tmp", "/dev/shm", "~/tmp"],
     # secok
-    # insecureHashlibNew.py
+    # hashlibInsecureFunctions.py
     "insecure_hashes": ["md4", "md5", "sha", "sha1"],
     # injectionShell.py
     # injectionWildcard.py
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityNodeVisitor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityNodeVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -56,7 +56,7 @@
         if checkType in self.__securityCheckers:
             for check in self.__securityCheckers[checkType]:
                 check(
-                    self.__checker.reportError,
+                    self.__checker.addError,
                     SecurityContext(self.__context),
                     self.__checker.getConfig(),
                 )
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityUtils.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityUtils.py	Sat Mar 01 15:52:40 2025 +0100
@@ -349,4 +349,4 @@
 
 
 #
-# eflag: noqa = M601
+# eflag: noqa = M-601
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/__init__.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -8,5 +8,5 @@
 """
 
 ###########################################################################
-## The security checker is based on Bandit v1.7.10.                      ##
+## The security checker is based on Bandit v1.8.2.                       ##
 ###########################################################################
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -13,175 +13,164 @@
 
 _securityMessages = {
     # assert used
-    "S101": QCoreApplication.translate(
+    "S-101": QCoreApplication.translate(
         "Security",
         "Use of 'assert' detected. The enclosed code will be removed when"
         " compiling to optimised byte code.",
     ),
     # exec used
-    "S102": QCoreApplication.translate("Security", "Use of 'exec' detected."),
+    "S-102": QCoreApplication.translate("Security", "Use of 'exec' detected."),
     # bad file permissions
-    "S103": QCoreApplication.translate(
+    "S-103": QCoreApplication.translate(
         "Security", "'chmod' setting a permissive mask {0} on file ({1})."
     ),
     # bind to all interfaces
-    "S104": QCoreApplication.translate(
+    "S-104": QCoreApplication.translate(
         "Security", "Possible binding to all interfaces."
     ),
     # hardcoded passwords
-    "S105": QCoreApplication.translate(
+    "S-105": QCoreApplication.translate(
         "Security", "Possible hardcoded password: '{0}'"
     ),
-    "S106": QCoreApplication.translate(
+    "S-106": QCoreApplication.translate(
         "Security", "Possible hardcoded password: '{0}'"
     ),
-    "S107": QCoreApplication.translate(
+    "S-107": QCoreApplication.translate(
         "Security", "Possible hardcoded password: '{0}'"
     ),
     # hardcoded tmp directory
-    "S108": QCoreApplication.translate(
+    "S-108": QCoreApplication.translate(
         "Security", "Probable insecure usage of temp file/directory."
     ),
     # try-except and contextlib.suppress
-    "S110": QCoreApplication.translate("Security", "Try, Except, Pass detected."),
-    "S112": QCoreApplication.translate("Security", "Try, Except, Continue detected."),
-    "S113": QCoreApplication.translate("Security", "'contextlib.suppress()' detected."),
+    "S-110": QCoreApplication.translate("Security", "Try, Except, Pass detected."),
+    "S-112": QCoreApplication.translate("Security", "Try, Except, Continue detected."),
+    "S-113": QCoreApplication.translate(
+        "Security", "'contextlib.suppress()' detected."
+    ),
     # request without timeout
-    "S114.1": QCoreApplication.translate("Security", "Call to {0} without timeout."),
-    "S114.2": QCoreApplication.translate(
+    "S-114.1": QCoreApplication.translate("Security", "Call to {0} without timeout."),
+    "S-114.2": QCoreApplication.translate(
         "Security",
         "Call to {0} with timeout set to None.",
     ),
     # flask app
-    "S201": QCoreApplication.translate(
+    "S-201": QCoreApplication.translate(
         "Security",
         "A Flask app appears to be run with debug=True, which exposes the"
         " Werkzeug debugger and allows the execution of arbitrary code.",
     ),
     # tarfile.extractall
-    "S202.1": QCoreApplication.translate(
+    "S-202.1": QCoreApplication.translate(
         "Security",
         "Usage of 'tarfile.extractall(members=function(tarfile))'. "
         "Make sure your function properly discards dangerous members ({0}).",
     ),
-    "S202.2": QCoreApplication.translate(
+    "S-202.2": QCoreApplication.translate(
         "Security",
         "Found 'tarfile.extractall(members=?)' but couldn't identify the type of"
         " members. Check if the members were properly validated ({0}).",
     ),
-    "S202.3": QCoreApplication.translate(
+    "S-202.3": QCoreApplication.translate(
         "Security",
         "'tarfile.extractall()' used without any validation. Please check and"
         " discard dangerous members.",
     ),
     # prohibited calls
-    "S301": QCoreApplication.translate(
+    "S-301": QCoreApplication.translate(
         "Security",
         "Pickle and modules that wrap it can be unsafe when used to "
         "deserialize untrusted data, possible security issue.",
     ),
-    "S302": QCoreApplication.translate(
+    "S-302": QCoreApplication.translate(
         "Security", "Deserialization with the marshal module is possibly dangerous."
     ),
-    "S303": QCoreApplication.translate(
+    "S-303": QCoreApplication.translate(
         "Security", "Use of insecure MD2, MD4, MD5, or SHA1 hash function."
     ),
-    "S304": QCoreApplication.translate(
+    "S-304": QCoreApplication.translate(
         "Security",
         "Use of insecure cipher '{0}'. Replace with a known secure cipher"
         " such as AES.",
     ),
-    "S305": QCoreApplication.translate(
+    "S-305": QCoreApplication.translate(
         "Security", "Use of insecure cipher mode '{0}'."
     ),
-    "S306": QCoreApplication.translate(
+    "S-306": QCoreApplication.translate(
         "Security", "Use of insecure and deprecated function (mktemp)."
     ),
-    "S307": QCoreApplication.translate(
+    "S-307": QCoreApplication.translate(
         "Security",
         "Use of possibly insecure function - consider using safer ast.literal_eval.",
     ),
-    "S308": QCoreApplication.translate(
+    "S-308": QCoreApplication.translate(
         "Security",
         "Use of mark_safe() may expose cross-site scripting vulnerabilities"
         " and should be reviewed.",
     ),
-    "S310": QCoreApplication.translate(
+    "S-310": QCoreApplication.translate(
         "Security",
         "Audit url open for permitted schemes. Allowing use of file:/ or"
         " custom schemes is often unexpected.",
     ),
-    "S311": QCoreApplication.translate(
+    "S-311": QCoreApplication.translate(
         "Security",
         "Standard pseudo-random generators are not suitable for"
         " security/cryptographic purposes.",
     ),
-    "S312": QCoreApplication.translate(
+    "S-312": QCoreApplication.translate(
         "Security",
         "Telnet-related functions are being called. Telnet is considered"
         " insecure. Use SSH or some other encrypted protocol.",
     ),
-    "S313": QCoreApplication.translate(
+    "S-313": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
         " XML attacks. Replace '{0}' with its defusedxml equivalent function"
         " or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S314": QCoreApplication.translate(
+    "S-314": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
         " XML attacks. Replace '{0}' with its defusedxml equivalent function"
         " or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S315": QCoreApplication.translate(
+    "S-315": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
         " XML attacks. Replace '{0}' with its defusedxml equivalent function"
         " or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S316": QCoreApplication.translate(
-        "Security",
-        "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
-        " XML attacks. Replace '{0}' with its defusedxml equivalent function"
-        " or make sure defusedxml.defuse_stdlib() is called.",
-    ),
-    "S317": QCoreApplication.translate(
+    "S-316": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
         " XML attacks. Replace '{0}' with its defusedxml equivalent function"
         " or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S318": QCoreApplication.translate(
+    "S-317": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
         " XML attacks. Replace '{0}' with its defusedxml equivalent function"
         " or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S319": QCoreApplication.translate(
+    "S-318": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
         " XML attacks. Replace '{0}' with its defusedxml equivalent function"
         " or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S320": QCoreApplication.translate(
+    "S-319": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable to"
-        " XML attacks. Replace '{0}' with its defusedxml equivalent"
-        " function.",
+        " XML attacks. Replace '{0}' with its defusedxml equivalent function"
+        " or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S321": QCoreApplication.translate(
+    "S-321": QCoreApplication.translate(
         "Security",
         "FTP-related functions are being called. FTP is considered insecure."
         " Use SSH/SFTP/SCP or some other encrypted protocol.",
     ),
-    "S322": QCoreApplication.translate(
-        "Security",
-        "The input method in Python 2 will read from standard input, evaluate"
-        " and run the resulting string as Python source code. This is"
-        " similar, though in many ways worse, than using eval. On Python 2,"
-        " use raw_input instead, input is safe in Python 3.",
-    ),
-    "S323": QCoreApplication.translate(
+    "S-323": QCoreApplication.translate(
         "Security",
         "By default, Python will create a secure, verified SSL context for"
         " use in such classes as HTTPSConnection. However, it still allows"
@@ -189,230 +178,224 @@
         " reverts to the previous behavior that does not validate"
         " certificates or perform hostname checks.",
     ),
-    # hashlib.new
-    "S331": QCoreApplication.translate(
+    # hashlib functions
+    "S-331": QCoreApplication.translate(
         "Security", "Use of insecure {0} hash function."
     ),
-    "S332": QCoreApplication.translate(
+    "S-332": QCoreApplication.translate(
         "Security",
         "Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.",
     ),
     # prohibited imports
-    "S401": QCoreApplication.translate(
+    "S-401": QCoreApplication.translate(
         "Security",
         "A telnet-related module is being imported.  Telnet is considered"
         " insecure. Use SSH or some other encrypted protocol.",
     ),
-    "S402": QCoreApplication.translate(
+    "S-402": QCoreApplication.translate(
         "Security",
         "A FTP-related module is being imported.  FTP is considered"
         " insecure. Use SSH/SFTP/SCP or some other encrypted protocol.",
     ),
-    "S403": QCoreApplication.translate(
+    "S-403": QCoreApplication.translate(
         "Security",
         "Consider possible security implications associated with the '{0}' module.",
     ),
-    "S404": QCoreApplication.translate(
+    "S-404": QCoreApplication.translate(
         "Security",
         "Consider possible security implications associated with the '{0}' module.",
     ),
-    "S405": QCoreApplication.translate(
+    "S-405": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable"
         " to XML attacks. Replace '{0}' with the equivalent defusedxml"
         " package, or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S406": QCoreApplication.translate(
+    "S-406": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable"
         " to XML attacks. Replace '{0}' with the equivalent defusedxml"
         " package, or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S407": QCoreApplication.translate(
+    "S-407": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable"
         " to XML attacks. Replace '{0}' with the equivalent defusedxml"
         " package, or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S408": QCoreApplication.translate(
+    "S-408": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable"
         " to XML attacks. Replace '{0}' with the equivalent defusedxml"
         " package, or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S409": QCoreApplication.translate(
+    "S-409": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable"
         " to XML attacks. Replace '{0}' with the equivalent defusedxml"
         " package, or make sure defusedxml.defuse_stdlib() is called.",
     ),
-    "S410": QCoreApplication.translate(
-        "Security",
-        "Using '{0}' to parse untrusted XML data is known to be vulnerable"
-        " to XML attacks. Replace '{0}' with the equivalent defusedxml"
-        " package.",
-    ),
-    "S411": QCoreApplication.translate(
+    "S-411": QCoreApplication.translate(
         "Security",
         "Using '{0}' to parse untrusted XML data is known to be vulnerable"
         " to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to"
         " monkey-patch xmlrpclib and mitigate XML vulnerabilities.",
     ),
-    "S412": QCoreApplication.translate(
+    "S-412": QCoreApplication.translate(
         "Security",
         "Consider possible security implications associated with '{0}' module.",
     ),
-    "S413": QCoreApplication.translate(
+    "S-413": QCoreApplication.translate(
         "Security",
         "The pyCrypto library and its module '{0}' are no longer actively"
         " maintained and have been deprecated. Consider using"
         " pyca/cryptography library.",
     ),
-    "S414": QCoreApplication.translate(
+    "S-414": QCoreApplication.translate(
         "Security",
         "An IPMI-related module is being imported. IPMI is considered "
         "insecure. Use an encrypted protocol.",
     ),
     # insecure certificate usage
-    "S501": QCoreApplication.translate(
+    "S-501": QCoreApplication.translate(
         "Security",
         "'requests' call with verify=False disabling SSL certificate checks,"
         " security issue.",
     ),
     # insecure SSL/TLS protocol version
-    "S502.1": QCoreApplication.translate(
+    "S-502.1": QCoreApplication.translate(
         "Security",
         "'ssl.wrap_socket' call with insecure SSL/TLS protocol version"
         " identified, security issue.",
     ),
-    "S502.2": QCoreApplication.translate(
+    "S-502.2": QCoreApplication.translate(
         "Security",
         "'SSL.Context' call with insecure SSL/TLS protocol version identified,"
         " security issue.",
     ),
-    "S502.3": QCoreApplication.translate(
+    "S-502.3": QCoreApplication.translate(
         "Security",
         "Function call with insecure SSL/TLS protocol version identified,"
         " security issue.",
     ),
-    "S503": QCoreApplication.translate(
+    "S-503": QCoreApplication.translate(
         "Security",
         "Function definition identified with insecure SSL/TLS protocol"
         " version by default, possible security issue.",
     ),
-    "S504": QCoreApplication.translate(
+    "S-504": QCoreApplication.translate(
         "Security",
         "'ssl.wrap_socket' call with no SSL/TLS protocol version specified,"
         " the default 'SSLv23' could be insecure, possible security issue.",
     ),
     # weak cryptographic keys
-    "S505": QCoreApplication.translate(
+    "S-505": QCoreApplication.translate(
         "Security", "{0} key sizes below {1:d} bits are considered breakable."
     ),
     # YAML load
-    "S506": QCoreApplication.translate(
+    "S-506": QCoreApplication.translate(
         "Security",
         "Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary"
         " objects. Consider 'yaml.safe_load()'.",
     ),
     # SSH host key verification
-    "S507": QCoreApplication.translate(
+    "S-507": QCoreApplication.translate(
         "Security",
         "Paramiko call with policy set to automatically trust the unknown host key.",
     ),
     # insecure SNMP
-    "S508": QCoreApplication.translate(
+    "S-508": QCoreApplication.translate(
         "Security",
         "The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.",
     ),
-    "S509": QCoreApplication.translate(
+    "S-509": QCoreApplication.translate(
         "Security",
         "You should not use SNMPv3 without encryption. noAuthNoPriv & authNoPriv is"
         " insecure.",
     ),
     # Shell injection
-    "S601": QCoreApplication.translate(
+    "S-601": QCoreApplication.translate(
         "Security",
         "Possible shell injection via 'Paramiko' call, check inputs are"
         " properly sanitized.",
     ),
-    "S602.L": QCoreApplication.translate(
+    "S-602.L": QCoreApplication.translate(
         "Security",
         "'subprocess' call with shell=True seems safe, but may be changed"
         " in the future, consider rewriting without shell",
     ),
-    "S602.H": QCoreApplication.translate(
+    "S-602.H": QCoreApplication.translate(
         "Security", "'subprocess' call with shell=True identified, security issue."
     ),
-    "S603": QCoreApplication.translate(
+    "S-603": QCoreApplication.translate(
         "Security", "'subprocess' call - check for execution of untrusted input."
     ),
-    "S604": QCoreApplication.translate(
+    "S-604": QCoreApplication.translate(
         "Security",
         "Function call with shell=True parameter identified, possible"
         " security issue.",
     ),
-    "S605.L": QCoreApplication.translate(
+    "S-605.L": QCoreApplication.translate(
         "Security",
         "Starting a process with a shell: Seems safe, but may be changed in"
         " the future, consider rewriting without shell",
     ),
-    "S605.H": QCoreApplication.translate(
+    "S-605.H": QCoreApplication.translate(
         "Security",
         "Starting a process with a shell, possible injection detected,"
         " security issue.",
     ),
-    "S606": QCoreApplication.translate(
+    "S-606": QCoreApplication.translate(
         "Security", "Starting a process without a shell."
     ),
-    "S607": QCoreApplication.translate(
+    "S-607": QCoreApplication.translate(
         "Security", "Starting a process with a partial executable path."
     ),
     # SQL injection
-    "S608": QCoreApplication.translate(
+    "S-608": QCoreApplication.translate(
         "Security",
         "Possible SQL injection vector through string-based query construction.",
     ),
     # Wildcard injection
-    "S609": QCoreApplication.translate(
+    "S-609": QCoreApplication.translate(
         "Security", "Possible wildcard injection in call: {0}"
     ),
     # Django SQL injection
-    "S610": QCoreApplication.translate(
+    "S-610": QCoreApplication.translate(
         "Security", "Use of 'extra()' opens a potential SQL attack vector."
     ),
-    "S611": QCoreApplication.translate(
+    "S-611": QCoreApplication.translate(
         "Security", "Use of 'RawSQL()' opens a potential SQL attack vector."
     ),
     # insecure logging.config.listen()
-    "S612": QCoreApplication.translate(
+    "S-612": QCoreApplication.translate(
         "Security",
         "Use of insecure logging.config.listen() detected.",
     ),
     # Trojan Source
-    "S613": QCoreApplication.translate(
+    "S-613": QCoreApplication.translate(
         "Security",
         "The Python source file contains bidirectional control characters ({0}).",
     ),
     # PyTorch unsafe load or save
-    "S614": QCoreApplication.translate(
+    "S-614": QCoreApplication.translate(
         "Security", "Use of unsafe PyTorch load or save."
     ),
     # Jinja2 templates
-    "S701.1": QCoreApplication.translate(
+    "S-701.1": QCoreApplication.translate(
         "Security",
         "Using jinja2 templates with 'autoescape=False' is dangerous and can"
         " lead to XSS. Use 'autoescape=True' or use the 'select_autoescape'"
         " function to mitigate XSS vulnerabilities.",
     ),
-    "S701.2": QCoreApplication.translate(
+    "S-701.2": QCoreApplication.translate(
         "Security",
         "By default, jinja2 sets 'autoescape' to False. Consider using"
         " 'autoescape=True' or use the 'select_autoescape' function to"
         " mitigate XSS vulnerabilities.",
     ),
     # Mako templates
-    "S702": QCoreApplication.translate(
+    "S-702": QCoreApplication.translate(
         "Security",
         "Mako templates allow HTML/JS rendering by default and are inherently"
         " open to XSS attacks. Ensure variables in all templates are properly"
@@ -420,52 +403,50 @@
         " example, to HTML escape the variable 'data' do ${{ data |h }}.",
     ),
     # Django XSS vulnerability
-    "S703": QCoreApplication.translate(
+    "S-703": QCoreApplication.translate(
         "Security", "Potential XSS on 'mark_safe()' function."
     ),
     # hardcoded AWS passwords
-    "S801": QCoreApplication.translate(
+    "S-801": QCoreApplication.translate(
         "Security", "Possible hardcoded AWS access key ID: {0}"
     ),
-    "S802": QCoreApplication.translate(
+    "S-802": QCoreApplication.translate(
         "Security", "Possible hardcoded AWS secret access key: {0}"
     ),
 }
 
 _securityMessagesSampleArgs = {
-    "S103": ["0o777", "testfile.txt"],
-    "S105": ["password"],
-    "S106": ["password"],
-    "S107": ["password"],
-    "S114.1": ["requests"],
-    "S114.2": ["httpx"],
-    "S202.1": ["members_filter(tar)"],
-    "S202.2": ["tar"],
-    "S304": ["Crypto.Cipher.DES"],
-    "S305": ["cryptography.hazmat.primitives.ciphers.modes.ECB"],
-    "S313": ["xml.etree.cElementTree.parse"],
-    "S314": ["xml.etree.ElementTree.parse"],
-    "S315": ["xml.sax.expatreader.create_parser"],
-    "S316": ["xml.dom.expatbuilder.parse"],
-    "S317": ["xml.sax.parse"],
-    "S318": ["xml.dom.minidom.parse"],
-    "S319": ["xml.dom.pulldom.parse"],
-    "S320": ["lxml.etree.parse"],
-    "S331": ["MD5"],
-    "S403": ["pickle"],
-    "S404": ["subprocess"],
-    "S405": ["xml.etree.ElementTree"],
-    "S406": ["xml.sax"],
-    "S407": ["xml.dom.expatbuilder"],
-    "S408": ["xml.dom.minidom"],
-    "S409": ["xml.dom.pulldom"],
-    "S410": ["lxml"],
-    "S411": ["xmlrpclib"],
-    "S412": ["wsgiref.handlers.CGIHandler"],
-    "S413": ["Crypto.Cipher"],
-    "S505": ["RSA", 2048],
-    "S609": ["os.system"],
-    "S613": [repr("\u202e")],
-    "S801": ["A1B2C3D4E5F6G7H8I9J0"],  # secok
-    "S802": ["aA1bB2cC3dD4/eE5fF6gG7+hH8iI9jJ0=kKlLM+="],  # secok
+    "S-103": ["0o777", "testfile.txt"],
+    "S-105": ["password"],
+    "S-106": ["password"],
+    "S-107": ["password"],
+    "S-114.1": ["requests"],
+    "S-114.2": ["httpx"],
+    "S-202.1": ["members_filter(tar)"],
+    "S-202.2": ["tar"],
+    "S-304": ["Crypto.Cipher.DES"],
+    "S-305": ["cryptography.hazmat.primitives.ciphers.modes.ECB"],
+    "S-313": ["xml.etree.cElementTree.parse"],
+    "S-314": ["xml.etree.ElementTree.parse"],
+    "S-315": ["xml.sax.expatreader.create_parser"],
+    "S-316": ["xml.dom.expatbuilder.parse"],
+    "S-317": ["xml.sax.parse"],
+    "S-318": ["xml.dom.minidom.parse"],
+    "S-319": ["xml.dom.pulldom.parse"],
+    "S-331": ["MD5"],
+    "S-403": ["pickle"],
+    "S-404": ["subprocess"],
+    "S-405": ["xml.etree.ElementTree"],
+    "S-406": ["xml.sax"],
+    "S-407": ["xml.dom.expatbuilder"],
+    "S-408": ["xml.dom.minidom"],
+    "S-409": ["xml.dom.pulldom"],
+    "S-411": ["xmlrpclib"],
+    "S-412": ["wsgiref.handlers.CGIHandler"],
+    "S-413": ["Crypto.Cipher"],
+    "S-505": ["RSA", 2048],
+    "S-609": ["os.system"],
+    "S-613": [repr("\u202e")],
+    "S-801": ["A1B2C3D4E5F6G7H8I9J0"],  # secok
+    "S-802": ["aA1bB2cC3dD4/eE5fF6gG7+hH8iI9jJ0=kKlLM+="],  # secok
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -8,75 +8,79 @@
 """
 
 import ast
-import copy
+
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
 from .SimplifyNodeVisitor import SimplifyNodeVisitor
 
 
-class SimplifyChecker:
+class SimplifyChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for to help simplifying Python code.
     """
 
     Codes = [
         # Python-specifics
-        "Y101",
-        "Y102",
-        "Y103",
-        "Y104",
-        "Y105",
-        "Y106",
-        "Y107",
-        "Y108",
-        "Y109",
-        "Y110",
-        "Y111",
-        "Y112",
-        "Y113",
-        "Y114",
-        "Y115",
-        "Y116",
-        "Y117",
-        "Y118",
-        "Y119",
-        "Y120",
-        "Y121",
-        "Y122",
-        "Y123",
+        "Y-101",
+        "Y-102",
+        "Y-103",
+        "Y-104",
+        "Y-105",
+        "Y-106",
+        "Y-107",
+        "Y-108",
+        "Y-109",
+        "Y-110",
+        "Y-111",
+        "Y-112",
+        "Y-113",
+        "Y-114",
+        "Y-115",
+        "Y-116",
+        "Y-117",
+        "Y-118",
+        "Y-119",
+        "Y-120",
+        "Y-121",
+        "Y-122",
+        "Y-123",
         # Python-specifics not part of flake8-simplify
-        "Y181",
-        "Y182",
+        "Y-181",
+        "Y-182",
         # Comparations
-        "Y201",
-        "Y202",
-        "Y203",
-        "Y204",
-        "Y205",
-        "Y206",
-        "Y207",
-        "Y208",
-        "Y211",
-        "Y212",
-        "Y213",
-        "Y221",
-        "Y222",
-        "Y223",
-        "Y224",
+        "Y-201",
+        "Y-202",
+        "Y-203",
+        "Y-204",
+        "Y-205",
+        "Y-206",
+        "Y-207",
+        "Y-208",
+        "Y-211",
+        "Y-212",
+        "Y-213",
+        "Y-221",
+        "Y-222",
+        "Y-223",
+        "Y-224",
         # Opinionated
-        "Y301",
+        "Y-301",
         # General Code Style
-        "Y401",
-        "Y402",
+        "Y-401",
+        "Y-402",
+        # f-Strings
+        "Y-411",
         # Additional Checks
-        "Y901",
-        "Y904",
-        "Y905",
-        "Y906",
-        "Y907",
-        "Y909",
-        "Y910",
-        "Y911",
+        "Y-901",
+        "Y-904",
+        "Y-905",
+        "Y-906",
+        "Y-907",
+        "Y-909",
+        "Y-910",
+        "Y-911",
     ]
+    Category = "Y"
 
     def __init__(self, source, filename, tree, selected, ignored, expected, repeat):
         """
@@ -97,90 +101,88 @@
         @param repeat flag indicating to report each occurrence of a code
         @type bool
         """
-        self.__select = tuple(selected)
-        self.__ignore = ("",) if selected else tuple(ignored)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
-
-        self.__checkCodes = (code for code in self.Codes if not self.__ignoreCode(code))
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
+        super().__init__(
+            SimplifyChecker.Category,
+            source,
+            filename,
+            tree,
+            selected,
+            ignored,
+            expected,
+            repeat,
+            [],
+        )
 
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
+        checkersWithCodes = [
+            (
+                self.__checkCodeSimplifications,
+                (
+                    "Y-101",
+                    "Y-102",
+                    "Y-103",
+                    "Y-104",
+                    "Y-105",
+                    "Y-106",
+                    "Y-107",
+                    "Y-108",
+                    "Y-109",
+                    "Y-110",
+                    "Y-111",
+                    "Y-112",
+                    "Y-113",
+                    "Y-114",
+                    "Y-115",
+                    "Y-116",
+                    "Y-117",
+                    "Y-118",
+                    "Y-119",
+                    "Y-120",
+                    "Y-121",
+                    "Y-122",
+                    "Y-123",
+                    "Y-181",
+                    "Y-182",
+                    "Y-201",
+                    "Y-202",
+                    "Y-203",
+                    "Y-204",
+                    "Y-205",
+                    "Y-206",
+                    "Y-207",
+                    "Y-208",
+                    "Y-211",
+                    "Y-212",
+                    "Y-213",
+                    "Y-221",
+                    "Y-222",
+                    "Y-223",
+                    "Y-224",
+                    "Y-301",
+                    "Y-401",
+                    "Y-402",
+                    "Y-411",
+                    "Y-901",
+                    "Y-904",
+                    "Y-905",
+                    "Y-906",
+                    "Y-907",
+                    "Y-909",
+                    "Y-910",
+                    "Y-911",
+                ),
+            ),
+        ]
+        self._initializeCheckers(checkersWithCodes)
 
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
+    def __checkCodeSimplifications(self):
         """
-        if self.__ignoreCode(code):
-            return
-
-        # record the issue with one based line number
-        errorInfo = {
-            "file": self.__filename,
-            "line": lineNumber + 1,
-            "offset": offset,
-            "code": code,
-            "args": args,
-        }
-
-        if errorInfo not in self.errors:
-            # this issue was not seen before
-            if code in self.counters:
-                self.counters[code] += 1
-            else:
-                self.counters[code] = 1
+        Private method to check for code simplifications.
+        """
+        # Add parent information
+        self.__addMeta(self.tree)
 
-            # Don't care about expected codes
-            if code in self.__expected:
-                return
-
-            if code and (self.counters[code] == 1 or self.__repeat):
-                self.errors.append(errorInfo)
-
-    def run(self):
-        """
-        Public method to check the given source against functions
-        to be replaced by 'pathlib' equivalents.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkCodes:
-            # don't do anything, if no codes were selected
-            return
-
-        # Add parent information
-        self.__addMeta(self.__tree)
-
-        visitor = SimplifyNodeVisitor(self.__error)
-        visitor.visit(self.__tree)
+        visitor = SimplifyNodeVisitor(self.addErrorFromNode)
+        visitor.visit(self.tree)
 
     def __addMeta(self, root, level=0):
         """
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/SimplifyNodeVisitor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -24,29 +24,7 @@
 ###############################################################################
 ## adapted from: flake8-simplify v0.21.0
 ##
-## Original License:
-##
-## MIT License
-##
-## Copyright (c) 2020 Martin Thoma
-##
-## Permission is hereby granted, free of charge, to any person obtaining a copy
-## of this software and associated documentation files (the "Software"), to
-## deal in the Software without restriction, including without limitation the
-## rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-## sell copies of the Software, and to permit persons to whom the Software is
-## furnished to do so, subject to the following conditions:
-##
-## The above copyright notice and this permission notice shall be included in
-## all copies or substantial portions of the Software.
-##
-## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-## IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-## FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-## AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-## LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-## FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-## IN THE SOFTWARE.
+## combined with: flake8-nested-fstring v1.1.0
 ###############################################################################
 
 
@@ -254,6 +232,17 @@
 
         self.generic_visit(node)
 
+    def visit_JoinedStr(self, node):
+        """
+        Public method to check a joined string node.
+
+        @param node reference to the node to be processed
+        @type ast.JoinedStr
+        """
+        self.__check411(node)
+
+        self.generic_visit(node)
+
     #############################################################
     ## Helper methods for the various checkers below
     #############################################################
@@ -470,7 +459,7 @@
         """
         if isinstance(node.op, ast.Or):
             for variable in self.__getDuplicatedIsinstanceCall(node):
-                self.__error(node.lineno - 1, node.col_offset, "Y101", variable)
+                self.__error(node, "Y-101", variable)
 
     def __check102(self, node):
         """
@@ -507,7 +496,7 @@
         #     if c: <---
         #         d
         if isPattern1:
-            self.__error(node.lineno - 1, node.col_offset, "Y102")
+            self.__error(node, "Y-102")
 
     def __check103(self, node):
         """
@@ -537,7 +526,7 @@
             )
         ):
             condition = unparse(node.test)
-            self.__error(node.lineno - 1, node.col_offset, "Y103", condition)
+            self.__error(node, "Y-103", condition)
 
     def __check104(self, node):
         """
@@ -568,7 +557,7 @@
 
             if not isinstance(parent, ast.AsyncFunctionDef):
                 iterable = unparse(node.iter)
-                self.__error(node.lineno - 1, node.col_offset, "Y104", iterable)
+                self.__error(node, "Y-104", iterable)
 
     def __check105(self, node):
         """
@@ -594,7 +583,7 @@
                 exception = ", ".join([unparse(n) for n in node.handlers[0].type.elts])
             else:
                 exception = unparse(node.handlers[0].type)
-            self.__error(node.lineno - 1, node.col_offset, "Y105", exception)
+            self.__error(node, "Y-105", exception)
 
     def __check106(self, node):
         """
@@ -620,7 +609,7 @@
             and not isinstance(node.body[-1], ast.Raise)
         )
         if just_one or many:
-            self.__error(node.lineno - 1, node.col_offset, "Y106")
+            self.__error(node, "Y-106")
 
     def __check107(self, node):
         """
@@ -659,7 +648,7 @@
                 break
 
         if (tryHasReturn or exceptHasReturn) and finallyHasReturn:
-            self.__error(finallyReturn.lineno - 1, finallyReturn.col_offset, "Y107")
+            self.__error(finallyReturn, "Y-107")
 
     def __check108(self, node):
         """
@@ -710,9 +699,7 @@
             cond = unparse(node.test)
             orelse = unparse(node.orelse[0].value)
 
-            self.__error(
-                node.lineno - 1, node.col_offset, "Y108", assign, body, cond, orelse
-            )
+            self.__error(node, "Y-108", assign, body, cond, orelse)
 
     def __check109(self, node):
         """
@@ -749,12 +736,7 @@
                     continue
 
                 self.__error(
-                    node.lineno - 1,
-                    node.col_offset,
-                    "Y109",
-                    value,
-                    unparse(ast.Tuple(elts=values)),
-                    unparse(node),
+                    node, "Y-109", value, unparse(ast.Tuple(elts=values)), unparse(node)
                 )
 
     def __check110_111(self, node):
@@ -786,9 +768,7 @@
             target = unparse(node.target)
             iterable = unparse(node.iter)
             if node.body[0].body[0].value.value is True:
-                self.__error(
-                    node.lineno - 1, node.col_offset, "Y110", check, target, iterable
-                )
+                self.__error(node, "Y-110", check, target, iterable)
             elif node.body[0].body[0].value.value is False:
                 isCompoundExpression = " and " in check or " or " in check
 
@@ -799,9 +779,7 @@
                         check = check[len("not ") :]
                     else:
                         check = f"not {check}"
-                self.__error(
-                    node.lineno - 1, node.col_offset, "Y111", check, target, iterable
-                )
+                self.__error(node, "Y-111", check, target, iterable)
 
     def __check112(self, node):
         """
@@ -873,7 +851,7 @@
         else:
             return
 
-        self.__error(node.lineno - 1, node.col_offset, "Y112", expected, original)
+        self.__error(node, "Y-112", expected, original)
 
     def __check113(self, node):
         """
@@ -922,7 +900,7 @@
 
             for match in matches:
                 variable = unparse(match)
-                self.__error(match.lineno - 1, match.col_offset, "Y113", variable)
+                self.__error(match, "Y-113", variable)
 
     def __check114(self, node):
         """
@@ -945,13 +923,7 @@
             if self.__isSameBody(ifbody1[1], ifbody2[1]):
                 errorPairs.append((ifbody1, ifbody2))
         for ifbody1, ifbody2 in errorPairs:
-            self.__error(
-                ifbody1[0].lineno - 1,
-                ifbody1[0].col_offset,
-                "Y114",
-                unparse(ifbody1[0]),
-                unparse(ifbody2[0]),
-            )
+            self.__error(ifbody1[0], "Y-114", unparse(ifbody1[0]), unparse(ifbody2[0]))
 
     def __check115(self, node):
         """
@@ -969,7 +941,7 @@
             and node.func.id == "open"
             and not isinstance(node.parent, ast.withitem)
         ):
-            self.__error(node.lineno - 1, node.col_offset, "Y115")
+            self.__error(node, "Y-115")
 
     def __check116(self, node):
         """
@@ -1065,7 +1037,7 @@
             else:
                 ret = f"{keyValuePairs}.get({variable.id})"
 
-            self.__error(node.lineno - 1, node.col_offset, "Y116", ret)
+            self.__error(node, "Y-116", ret)
 
     def __check117(self, node):
         """
@@ -1082,7 +1054,7 @@
             for withitem in node.items + node.body[0].items:
                 withItems.append(f"{unparse(withitem)}")
             mergedWith = f"with {', '.join(withItems)}:"
-            self.__error(node.lineno - 1, node.col_offset, "Y117", mergedWith)
+            self.__error(node, "Y-117", mergedWith)
 
     def __check118(self, node):
         """
@@ -1126,7 +1098,7 @@
             else:
                 keyStr = unparse(node.target)
             dictStr = unparse(attrNode.value)
-            self.__error(node.lineno - 1, node.col_offset, "Y118", keyStr, dictStr)
+            self.__error(node, "Y-118", keyStr, dictStr)
 
     def __check119(self, node):
         """
@@ -1156,7 +1128,7 @@
                 hasOnlyConstructorMethod
                 and sum(1 for el in node.body if isinstance(el, ast.FunctionDef)) > 0
             ):
-                self.__error(node.lineno - 1, node.col_offset, "Y119", node.name)
+                self.__error(node, "Y-119", node.name)
 
     def __check120_121(self, node):
         """
@@ -1172,7 +1144,7 @@
             and isinstance(node.bases[0], ast.Name)
             and node.bases[0].id == "object"
         ):
-            self.__error(node.lineno - 1, node.col_offset, "Y120", node.name)
+            self.__error(node, "Y-120", node.name)
 
         elif (
             len(node.bases) > 1
@@ -1180,11 +1152,7 @@
             and node.bases[-1].id == "object"
         ):
             self.__error(
-                node.lineno - 1,
-                node.col_offset,
-                "Y121",
-                node.name,
-                ", ".join(b.id for b in node.bases[:-1]),
+                node, "Y-121", node.name, ", ".join(b.id for b in node.bases[:-1])
             )
 
     def __check122(self, node):
@@ -1215,7 +1183,7 @@
         ):
             key = unparse(node.test.left)
             dictname = unparse(node.test.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y122", dictname, key)
+            self.__error(node, "Y-122", dictname, key)
 
     def __check123(self, node):
         """
@@ -1277,15 +1245,7 @@
             valueStr = unparse(valueNode)
         else:
             return
-        self.__error(
-            node.lineno - 1,
-            node.col_offset,
-            "Y123",
-            valueStr,
-            dictStr,
-            keyStr,
-            defaultStr,
-        )
+        self.__error(node, "Y-123", valueStr, dictStr, keyStr, defaultStr)
 
     def __check181(self, node):
         """
@@ -1305,13 +1265,7 @@
             and not isinstance(node.value.right, ast.Tuple)
         ):
             newNode = ast.AugAssign(node.targets[0], node.value.op, node.value.right)
-            self.__error(
-                node.lineno - 1,
-                node.col_offset,
-                "Y181",
-                unparse(newNode),
-                unparse(node),
-            )
+            self.__error(node, "Y-181", unparse(newNode), unparse(node))
 
     def __check182(self, node):
         """
@@ -1331,7 +1285,7 @@
             and node.args[0].id == self.__classDefinitionStack[-1]
             and node.args[1].id == "self"
         ):
-            self.__error(node.lineno - 1, node.col_offset, "Y182", unparse(node))
+            self.__error(node, "Y-182", unparse(node))
 
     def __check201(self, node):
         """
@@ -1355,7 +1309,7 @@
             comparison = node.operand
             left = unparse(comparison.left)
             right = unparse(comparison.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y201", left, right)
+            self.__error(node, "Y-201", left, right)
 
     def __check202(self, node):
         """
@@ -1379,7 +1333,7 @@
             comparison = node.operand
             left = unparse(comparison.left)
             right = unparse(comparison.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y202", left, right)
+            self.__error(node, "Y-202", left, right)
 
     def __check203(self, node):
         """
@@ -1403,7 +1357,7 @@
             comparison = node.operand
             left = unparse(comparison.left)
             right = unparse(comparison.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y203", left, right)
+            self.__error(node, "Y-203", left, right)
 
     def __check204(self, node):
         """
@@ -1426,7 +1380,7 @@
             comparison = node.operand
             left = unparse(comparison.left)
             right = unparse(comparison.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y204", left, right)
+            self.__error(node, "Y-204", left, right)
 
     def __check205(self, node):
         """
@@ -1449,7 +1403,7 @@
             comparison = node.operand
             left = unparse(comparison.left)
             right = unparse(comparison.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y205", left, right)
+            self.__error(node, "Y-205", left, right)
 
     def __check206(self, node):
         """
@@ -1472,7 +1426,7 @@
             comparison = node.operand
             left = unparse(comparison.left)
             right = unparse(comparison.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y206", left, right)
+            self.__error(node, "Y-206", left, right)
 
     def __check207(self, node):
         """
@@ -1495,7 +1449,7 @@
             comparison = node.operand
             left = unparse(comparison.left)
             right = unparse(comparison.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y207", left, right)
+            self.__error(node, "Y-207", left, right)
 
     def __check208(self, node):
         """
@@ -1511,7 +1465,7 @@
             and isinstance(node.operand.op, ast.Not)
         ):
             var = unparse(node.operand.operand)
-            self.__error(node.lineno - 1, node.col_offset, "Y208", var)
+            self.__error(node, "Y-208", var)
 
     def __check211(self, node):
         """
@@ -1532,7 +1486,7 @@
                 newCond = "bool({0})".format(cond)
             else:
                 newCond = cond
-            self.__error(node.lineno - 1, node.col_offset, "Y211", cond, newCond)
+            self.__error(node, "Y-211", cond, newCond)
 
     def __check212(self, node):
         """
@@ -1556,7 +1510,7 @@
                     newCond = unparse(self.__negateTest(node.test))
                 else:
                     newCond = "not ({0})".format(cond)
-            self.__error(node.lineno - 1, node.col_offset, "Y212", cond, newCond)
+            self.__error(node, "Y-212", cond, newCond)
 
     def __check213(self, node):
         """
@@ -1573,7 +1527,7 @@
         ):
             a = unparse(node.test.operand)
             b = unparse(node.body)
-            self.__error(node.lineno - 1, node.col_offset, "Y213", a, b)
+            self.__error(node, "Y-213", a, b)
 
     def __check221(self, node):
         """
@@ -1597,7 +1551,7 @@
                 for nonNegatedExpression in nonNegatedExpressions:
                     if self.__isSameExpression(negatedExpression, nonNegatedExpression):
                         negExp = unparse(negatedExpression)
-                        self.__error(node.lineno - 1, node.col_offset, "Y221", negExp)
+                        self.__error(node, "Y-221", negExp)
 
     def __check222(self, node):
         """
@@ -1621,7 +1575,7 @@
                 for nonNegatedExpression in nonNegatedExpressions:
                     if self.__isSameExpression(negatedExpression, nonNegatedExpression):
                         negExp = unparse(negatedExpression)
-                        self.__error(node.lineno - 1, node.col_offset, "Y222", negExp)
+                        self.__error(node, "Y-222", negExp)
 
     def __check223(self, node):
         """
@@ -1634,7 +1588,7 @@
         if isinstance(node.op, ast.Or):
             for exp in node.values:
                 if isinstance(exp, ast.Constant) and exp.value is True:
-                    self.__error(node.lineno - 1, node.col_offset, "Y223")
+                    self.__error(node, "Y-223")
 
     def __check224(self, node):
         """
@@ -1647,7 +1601,7 @@
         if isinstance(node.op, ast.And):
             for exp in node.values:
                 if isinstance(exp, ast.Constant) and exp.value is False:
-                    self.__error(node.lineno - 1, node.col_offset, "Y224")
+                    self.__error(node, "Y-224")
 
     def __check301(self, node):
         """
@@ -1669,7 +1623,7 @@
             if isStr:
                 left = f"'{left}'"
             right = unparse(node.comparators[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y301", left, right)
+            self.__error(node, "Y-301", left, right)
 
     def __check401(self, node):
         """
@@ -1688,7 +1642,7 @@
         isException = isinstance(node.func, ast.Attribute) and node.func.attr in ["get"]
 
         if hasBareBool and not isException:
-            self.__error(node.lineno - 1, node.col_offset, "Y401")
+            self.__error(node, "Y-401")
 
     def __check402(self, node):
         """
@@ -1709,7 +1663,24 @@
         )
 
         if hasBareNumeric and not isException:
-            self.__error(node.lineno - 1, node.col_offset, "Y402")
+            self.__error(node, "Y-402")
+
+    def __check411(self, node):
+        """
+        Private method to check for nested f-strings.
+
+        Note: This method is adapted from flake8-nested-fstrings v1.1.0.
+
+        @param node reference to the AST node to be checked
+        @type ast.JoinedStr or ast.expr
+        """
+        for fieldName, value in ast.iter_fields(node):
+            if fieldName == "values":
+                for innerNode in value:
+                    self.__check411(innerNode)
+
+            if fieldName == "value" and isinstance(value, ast.JoinedStr):
+                self.__error(node, "Y-411")
 
     def __check901(self, node):
         """
@@ -1726,7 +1697,7 @@
         ):
             actual = unparse(node)
             expected = unparse(node.args[0])
-            self.__error(node.lineno - 1, node.col_offset, "Y901", expected, actual)
+            self.__error(node, "Y-901", expected, actual)
 
     def __check904(self, node):
         """
@@ -1749,7 +1720,7 @@
         ):
             dictName = unparse(node.targets[0])
             if not self.__expressionUsesVariable(n2.value, dictName):
-                self.__error(node.lineno - 1, node.col_offset, "Y904", dictName)
+                self.__error(node, "Y-904", dictName)
 
     def __check905(self, node):
         """
@@ -1767,7 +1738,7 @@
 
             expected = json.dumps(value.split())
             actual = unparse(node.func.value) + ".split()"
-            self.__error(node.lineno - 1, node.col_offset, "Y905", expected, actual)
+            self.__error(node, "Y-905", expected, actual)
 
     def __check906(self, node):
         """
@@ -1775,7 +1746,7 @@
 
         @param node reference to the AST node to be checked
         @type ast.Call
-        """  # __IGNORE_WARNING_D234r__
+        """  # __IGNORE_WARNING_D-234r__
 
         def getOsPathJoinArgs(node):
             names = []
@@ -1821,7 +1792,7 @@
 
             actual = unparse(node)
             expected = "os.path.join({0})".format(", ".join(names))
-            self.__error(node.lineno - 1, node.col_offset, "Y906", expected, actual)
+            self.__error(node, "Y-906", expected, actual)
 
     def __check907(self, node):
         """
@@ -1852,9 +1823,7 @@
 
             if len(others) == 1 and hasNone:
                 type_ = unparse(others[0])
-                self.__error(
-                    node.lineno - 1, node.col_offset, "Y907", type_, unparse(node)
-                )
+                self.__error(node, "Y-907", type_, unparse(node))
 
     def __check909(self, node):
         """
@@ -1871,7 +1840,7 @@
 
         if len(names) != len(set(names)) and not isinstance(node.parent, ast.ClassDef):
             srccode = unparse(node)
-            self.__error(node.lineno - 1, node.col_offset, "Y909", srccode)
+            self.__error(node, "Y-909", srccode)
 
     def __check910(self, node):
         """
@@ -1899,7 +1868,7 @@
         func = unparse(node.func)
         key = unparse(node.args[0])
         expected = f"{func}({key})"
-        self.__error(node.lineno - 1, node.col_offset, "Y910", expected, actual)
+        self.__error(node, "Y-910", expected, actual)
 
     def __check911(self, node):
         """
@@ -1925,10 +1894,8 @@
                 and secondArg.func.attr == "values"
                 and firstArg.func.value.id == secondArg.func.value.id
             ):
-                self.__error(
-                    node.lineno - 1, node.col_offset, "Y911", firstArg.func.value.id
-                )
+                self.__error(node, "Y-911", firstArg.func.value.id)
 
 
 #
-# eflag: noqa = M891
+# eflag: noqa = M-891
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -13,169 +13,172 @@
 
 _simplifyMessages = {
     # Python-specifics
-    "Y101": QCoreApplication.translate(
+    "Y-101": QCoreApplication.translate(
         "SimplifyChecker",
         """Multiple "isinstance()" calls which can be merged into a single """
         '''call for variable "{0}"''',
     ),
-    "Y102": QCoreApplication.translate(
+    "Y-102": QCoreApplication.translate(
         "SimplifyChecker",
         """Use a single if-statement instead of nested if-statements""",
     ),
-    "Y103": QCoreApplication.translate(
+    "Y-103": QCoreApplication.translate(
         "SimplifyChecker", """Return the condition "{0}" directly"""
     ),
-    "Y104": QCoreApplication.translate("SimplifyChecker", '''Use "yield from {0}"'''),
-    "Y105": QCoreApplication.translate(
+    "Y-104": QCoreApplication.translate("SimplifyChecker", '''Use "yield from {0}"'''),
+    "Y-105": QCoreApplication.translate(
         "SimplifyChecker", '''Use "with contextlib.suppress({0}):"'''
     ),
-    "Y106": QCoreApplication.translate(
+    "Y-106": QCoreApplication.translate(
         "SimplifyChecker", """Handle error-cases first"""
     ),
-    "Y107": QCoreApplication.translate(
+    "Y-107": QCoreApplication.translate(
         "SimplifyChecker", """Don't use return in try/except and finally"""
     ),
-    "Y108": QCoreApplication.translate(
+    "Y-108": QCoreApplication.translate(
         "SimplifyChecker",
         """Use ternary operator "{0} = {1} if {2} else {3}" """
         """instead of if-else-block""",
     ),
-    "Y109": QCoreApplication.translate(
+    "Y-109": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} in {1}" instead of "{2}"'''
     ),
-    "Y110": QCoreApplication.translate(
+    "Y-110": QCoreApplication.translate(
         "SimplifyChecker", '''Use "any({0} for {1} in {2})"'''
     ),
-    "Y111": QCoreApplication.translate(
+    "Y-111": QCoreApplication.translate(
         "SimplifyChecker", '''Use "all({0} for {1} in {2})"'''
     ),
-    "Y112": QCoreApplication.translate(
+    "Y-112": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}" instead of "{1}"'''
     ),
-    "Y113": QCoreApplication.translate(
+    "Y-113": QCoreApplication.translate(
         "SimplifyChecker", '''Use enumerate instead of "{0}"'''
     ),
-    "Y114": QCoreApplication.translate(
+    "Y-114": QCoreApplication.translate(
         "SimplifyChecker", """Use logical or ("({0}) or ({1})") and a single body"""
     ),
-    "Y115": QCoreApplication.translate(
+    "Y-115": QCoreApplication.translate(
         "SimplifyChecker", """Use context handler for opening files"""
     ),
-    "Y116": QCoreApplication.translate(
+    "Y-116": QCoreApplication.translate(
         "SimplifyChecker",
         """Use a dictionary lookup instead of 3+ if/elif-statements: """
         """return {0}""",
     ),
-    "Y117": QCoreApplication.translate(
+    "Y-117": QCoreApplication.translate(
         "SimplifyChecker", """Use "{0}" instead of multiple with statements"""
     ),
-    "Y118": QCoreApplication.translate(
+    "Y-118": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} in {1}" instead of "{0} in {1}.keys()"'''
     ),
-    "Y119": QCoreApplication.translate(
+    "Y-119": QCoreApplication.translate(
         "SimplifyChecker", '''Use a dataclass for "class {0}"'''
     ),
-    "Y120": QCoreApplication.translate(
+    "Y-120": QCoreApplication.translate(
         "SimplifyChecker", '''Use "class {0}:" instead of "class {0}(object):"'''
     ),
-    "Y121": QCoreApplication.translate(
+    "Y-121": QCoreApplication.translate(
         "SimplifyChecker",
         '''Use "class {0}({1}):" instead of "class {0}({1}, object):"''',
     ),
-    "Y122": QCoreApplication.translate(
+    "Y-122": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}.get({1})" instead of "if {1} in {0}: {0}[{1}]"'''
     ),
-    "Y123": QCoreApplication.translate(
+    "Y-123": QCoreApplication.translate(
         "SimplifyChecker", """Use "{0} = {1}.get({2}, {3})" instead of an if-block"""
     ),
     # Python-specifics not part of flake8-simplify
-    "Y181": QCoreApplication.translate(
+    "Y-181": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}" instead of "{1}"'''
     ),
-    "Y182": QCoreApplication.translate(
+    "Y-182": QCoreApplication.translate(
         "SimplifyChecker", '''Use "super()" instead of "{0}"'''
     ),
     # Comparations
-    "Y201": QCoreApplication.translate(
+    "Y-201": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} != {1}" instead of "not {0} == {1}"'''
     ),
-    "Y202": QCoreApplication.translate(
+    "Y-202": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} == {1}" instead of "not {0} != {1}"'''
     ),
-    "Y203": QCoreApplication.translate(
+    "Y-203": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} not in {1}" instead of "not {0} in {1}"'''
     ),
-    "Y204": QCoreApplication.translate(
+    "Y-204": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} >= {1}" instead of "not ({0} < {1})"'''
     ),
-    "Y205": QCoreApplication.translate(
+    "Y-205": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} > {1}" instead of "not ({0} <= {1})"'''
     ),
-    "Y206": QCoreApplication.translate(
+    "Y-206": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} <= {1}" instead of "not ({0} > {1})"'''
     ),
-    "Y207": QCoreApplication.translate(
+    "Y-207": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0} < {1}" instead of "not ({0} >= {1})"'''
     ),
-    "Y208": QCoreApplication.translate(
+    "Y-208": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}" instead of "not (not {0})"'''
     ),
-    "Y211": QCoreApplication.translate(
+    "Y-211": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{1}" instead of "True if {0} else False"'''
     ),
-    "Y212": QCoreApplication.translate(
+    "Y-212": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{1}" instead of "False if {0} else True"'''
     ),
-    "Y213": QCoreApplication.translate(
+    "Y-213": QCoreApplication.translate(
         "SimplifyChecker",
         '''Use "{0} if {0} else {1}" instead of "{1} if not {0} else {0}"''',
     ),
-    "Y221": QCoreApplication.translate(
+    "Y-221": QCoreApplication.translate(
         "SimplifyChecker", '''Use "False" instead of "{0} and not {0}"'''
     ),
-    "Y222": QCoreApplication.translate(
+    "Y-222": QCoreApplication.translate(
         "SimplifyChecker", '''Use "True" instead of "{0} or not {0}"'''
     ),
-    "Y223": QCoreApplication.translate(
+    "Y-223": QCoreApplication.translate(
         "SimplifyChecker", '''Use "True" instead of "... or True"'''
     ),
-    "Y224": QCoreApplication.translate(
+    "Y-224": QCoreApplication.translate(
         "SimplifyChecker", '''Use "False" instead of "... and False"'''
     ),
     # Opinionated
-    "Y301": QCoreApplication.translate(
+    "Y-301": QCoreApplication.translate(
         "SimplifyChecker",
         """Use "{1} == {0}" instead of "{0} == {1}" (Yoda-condition)""",
     ),
     # General Code Style
-    "Y401": QCoreApplication.translate(
+    "Y-401": QCoreApplication.translate(
         "SimplifyChecker", """Use keyword-argument instead of magic boolean"""
     ),
-    "Y402": QCoreApplication.translate(
+    "Y-402": QCoreApplication.translate(
         "SimplifyChecker", """Use keyword-argument instead of magic number"""
     ),
-    "Y901": QCoreApplication.translate(
+    # f-Strings
+    "Y-411": QCoreApplication.translate("SimplifyChecker", "Do not nest f-strings"),
+    # Additional Checks
+    "Y-901": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}" instead of "{1}"'''
     ),
-    "Y904": QCoreApplication.translate(
+    "Y-904": QCoreApplication.translate(
         "SimplifyChecker", """Initialize dictionary "{0}" directly"""
     ),
-    "Y905": QCoreApplication.translate(
+    "Y-905": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}" instead of "{1}"'''
     ),
-    "Y906": QCoreApplication.translate(
+    "Y-906": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}" instead of "{1}"'''
     ),
-    "Y907": QCoreApplication.translate(
+    "Y-907": QCoreApplication.translate(
         "SimplifyChecker", '''Use "Optional[{0}]" instead of "{1}"'''
     ),
-    "Y909": QCoreApplication.translate(
+    "Y-909": QCoreApplication.translate(
         "SimplifyChecker", '''Remove reflexive assignment "{0}"'''
     ),
-    "Y910": QCoreApplication.translate(
+    "Y-910": QCoreApplication.translate(
         "SimplifyChecker", '''Use "{0}" instead of "{1}"'''
     ),
-    "Y911": QCoreApplication.translate(
+    "Y-911": QCoreApplication.translate(
         "SimplifyChecker",
         '''Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"''',
     ),
@@ -183,55 +186,55 @@
 
 _simplifyMessagesSampleArgs = {
     # Python-specifics
-    "Y101": ["foo"],
-    "Y103": ["foo != bar"],
-    "Y104": ["iterable"],
-    "Y105": ["Exception"],
-    "Y108": ["foo", "bar", "condition", "baz"],
-    "Y109": ["foo", "[1, 42]", "foo == 1 or foo == 42"],
-    "Y110": ["check", "foo", "iterable"],
-    "Y111": ["check", "foo", "iterable"],
-    "Y112": ["FOO", "foo"],
-    "Y113": ["foo"],
-    "Y114": ["foo > 42", "bar < 42"],
-    "Y116": ["bar_dict.get(foo, 42)"],
-    "Y117": ["with Foo() as foo, Bar() as bar:"],
-    "Y118": ["foo", "bar_dict"],
-    "Y119": ["Foo"],
-    "Y120": ["Foo"],
-    "Y121": ["FooBar", "Foo"],
-    "Y122": ["bar_dict", "'foo'"],
-    "Y123": ["foo", "fooDict", "bar", "default"],
-    "Y124": ["foo", "bar"],
+    "Y-101": ["foo"],
+    "Y-103": ["foo != bar"],
+    "Y-104": ["iterable"],
+    "Y-105": ["Exception"],
+    "Y-108": ["foo", "bar", "condition", "baz"],
+    "Y-109": ["foo", "[1, 42]", "foo == 1 or foo == 42"],
+    "Y-110": ["check", "foo", "iterable"],
+    "Y-111": ["check", "foo", "iterable"],
+    "Y-112": ["FOO", "foo"],
+    "Y-113": ["foo"],
+    "Y-114": ["foo > 42", "bar < 42"],
+    "Y-116": ["bar_dict.get(foo, 42)"],
+    "Y-117": ["with Foo() as foo, Bar() as bar:"],
+    "Y-118": ["foo", "bar_dict"],
+    "Y-119": ["Foo"],
+    "Y-120": ["Foo"],
+    "Y-121": ["FooBar", "Foo"],
+    "Y-122": ["bar_dict", "'foo'"],
+    "Y-123": ["foo", "fooDict", "bar", "default"],
+    "Y-124": ["foo", "bar"],
     # Python-specifics not part of flake8-simplify
-    "Y181": ["foo += 42", "foo = foo + 42"],
-    "Y182": ["super()"],
+    "Y-181": ["foo += 42", "foo = foo + 42"],
+    "Y-182": ["super()"],
     # Comparations
-    "Y201": ["foo", "bar"],
-    "Y202": ["foo", "bar"],
-    "Y203": ["foo", "bar"],
-    "Y204": ["foo", "bar"],
-    "Y205": ["foo", "bar"],
-    "Y206": ["foo", "bar"],
-    "Y207": ["foo", "bar"],
-    "Y208": ["foo"],
-    "Y211": ["foo", "bool(foo)"],
-    "Y212": ["foo", "not foo"],
-    "Y213": ["foo", "bar"],
-    "Y221": ["foo"],
-    "Y222": ["foo"],
+    "Y-201": ["foo", "bar"],
+    "Y-202": ["foo", "bar"],
+    "Y-203": ["foo", "bar"],
+    "Y-204": ["foo", "bar"],
+    "Y-205": ["foo", "bar"],
+    "Y-206": ["foo", "bar"],
+    "Y-207": ["foo", "bar"],
+    "Y-208": ["foo"],
+    "Y-211": ["foo", "bool(foo)"],
+    "Y-212": ["foo", "not foo"],
+    "Y-213": ["foo", "bar"],
+    "Y-221": ["foo"],
+    "Y-222": ["foo"],
     # Opinionated
-    "Y301": ["42", "foo"],
+    "Y-301": ["42", "foo"],
     # General Code Style
     # Additional checks
-    "Y901": ["foo == bar", "bool(foo == bar)"],
-    "Y904": ["foo"],
-    "Y905": [
+    "Y-901": ["foo == bar", "bool(foo == bar)"],
+    "Y-904": ["foo"],
+    "Y-905": [
         """["de", "com", "net", "org"]""",
         """domains = "de com net org".split()""",
     ],
-    "Y906": ["os.path.join(a, b, c)", "os.path.join(a,os.path.join(b,c))"],
-    "Y907": ["int", "Union[int, None]"],
-    "Y909": ["foo = foo"],
-    "Y911": ["foo"],
+    "Y-906": ["os.path.join(a, b, c)", "os.path.join(a,os.path.join(b,c))"],
+    "Y-907": ["int", "Union[int, None]"],
+    "Y-909": ["foo = foo"],
+    "Y-911": ["foo"],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Unused/UnusedChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Unused/UnusedChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -9,23 +9,25 @@
 
 import ast
 import collections
-import copy
 
 import AstUtilities
 
+from CodeStyleTopicChecker import CodeStyleTopicChecker
 
-class UnusedChecker:
+
+class UnusedChecker(CodeStyleTopicChecker):
     """
     Class implementing a checker for unused arguments, variables, ... .
     """
 
     Codes = [
         ## Unused Arguments
-        "U100",
-        "U101",
+        "U-100",
+        "U-101",
         ## Unused Globals
-        "U200",
+        "U-200",
     ]
+    Category = "U"
 
     def __init__(self, source, filename, tree, select, ignore, expected, repeat, args):
         """
@@ -48,94 +50,23 @@
         @param args dictionary of arguments for the various checks
         @type dict
         """
-        self.__select = tuple(select)
-        self.__ignore = ("",) if select else tuple(ignore)
-        self.__expected = expected[:]
-        self.__repeat = repeat
-        self.__filename = filename
-        self.__source = source[:]
-        self.__tree = copy.deepcopy(tree)
-        self.__args = args
-
-        # statistics counters
-        self.counters = {}
-
-        # collection of detected errors
-        self.errors = []
+        super().__init__(
+            UnusedChecker.Category,
+            source,
+            filename,
+            tree,
+            select,
+            ignore,
+            expected,
+            repeat,
+            args,
+        )
 
         checkersWithCodes = [
-            (self.__checkUnusedArguments, ("U100", "U101")),
-            (self.__checkUnusedGlobals, ("U200",)),
+            (self.__checkUnusedArguments, ("U-100", "U-101")),
+            (self.__checkUnusedGlobals, ("U-200",)),
         ]
-
-        self.__checkers = []
-        for checker, codes in checkersWithCodes:
-            if any(not (code and self.__ignoreCode(code)) for code in codes):
-                self.__checkers.append(checker)
-
-    def __ignoreCode(self, code):
-        """
-        Private method to check if the message code should be ignored.
-
-        @param code message code to check for
-        @type str
-        @return flag indicating to ignore the given code
-        @rtype bool
-        """
-        return code.startswith(self.__ignore) and not code.startswith(self.__select)
-
-    def __error(self, lineNumber, offset, code, *args):
-        """
-        Private method to record an issue.
-
-        @param lineNumber line number of the issue
-        @type int
-        @param offset position within line of the issue
-        @type int
-        @param code message code
-        @type str
-        @param args arguments for the message
-        @type list
-        """
-        if self.__ignoreCode(code):
-            return
-
-        if code in self.counters:
-            self.counters[code] += 1
-        else:
-            self.counters[code] = 1
-
-        # Don't care about expected codes
-        if code in self.__expected:
-            return
-
-        if code and (self.counters[code] == 1 or self.__repeat):
-            # record the issue with one based line number
-            self.errors.append(
-                {
-                    "file": self.__filename,
-                    "line": lineNumber + 1,
-                    "offset": offset,
-                    "code": code,
-                    "args": args,
-                }
-            )
-
-    def run(self):
-        """
-        Public method to check the given source against miscellaneous
-        conditions.
-        """
-        if not self.__filename:
-            # don't do anything, if essential data is missing
-            return
-
-        if not self.__checkers:
-            # don't do anything, if no codes were selected
-            return
-
-        for check in self.__checkers:
-            check()
+        self._initializeCheckers(checkersWithCodes)
 
     #######################################################################
     ## Unused Arguments
@@ -147,52 +78,50 @@
         """
         Private method to check function and method definitions for unused arguments.
         """
-        finder = FunctionFinder(self.__args["IgnoreNestedFunctions"])
-        finder.visit(self.__tree)
+        finder = FunctionFinder(self.args["IgnoreNestedFunctions"])
+        finder.visit(self.tree)
 
         for functionNode in finder.functionNodes():
             decoratorNames = set(self.__getDecoratorNames(functionNode))
 
             # ignore overload functions, it's not a surprise when they're empty
-            if self.__args["IgnoreOverload"] and "overload" in decoratorNames:
+            if self.args["IgnoreOverload"] and "overload" in decoratorNames:
                 continue
 
             # ignore overridden functions
-            if self.__args["IgnoreOverride"] and "override" in decoratorNames:
+            if self.args["IgnoreOverride"] and "override" in decoratorNames:
                 continue
 
             # ignore abstractmethods, it's not a surprise when they're empty
-            if self.__args["IgnoreAbstract"] and "abstractmethod" in decoratorNames:
+            if self.args["IgnoreAbstract"] and "abstractmethod" in decoratorNames:
                 continue
 
             # ignore Qt slot methods
-            if self.__args["IgnoreSlotMethods"] and (
+            if self.args["IgnoreSlotMethods"] and (
                 "pyqtSlot" in decoratorNames or "Slot" in decoratorNames
             ):
                 continue
 
-            if self.__args["IgnoreEventHandlerMethods"] and self.__isEventHandlerMethod(
+            if self.args["IgnoreEventHandlerMethods"] and self.__isEventHandlerMethod(
                 functionNode
             ):
                 continue
 
             # ignore stub functions
-            if self.__args["IgnoreStubs"] and self.__isStubFunction(functionNode):
+            if self.args["IgnoreStubs"] and self.__isStubFunction(functionNode):
                 continue
 
             # ignore lambdas
-            if self.__args["IgnoreLambdas"] and isinstance(functionNode, ast.Lambda):
+            if self.args["IgnoreLambdas"] and isinstance(functionNode, ast.Lambda):
                 continue
 
             # ignore __double_underscore_methods__()
-            if self.__args["IgnoreDunderMethods"] and self.__isDunderMethod(
-                functionNode
-            ):
+            if self.args["IgnoreDunderMethods"] and self.__isDunderMethod(functionNode):
                 continue
 
             for i, argument in self.__getUnusedArguments(functionNode):
                 name = argument.arg
-                if self.__args["IgnoreVariadicNames"]:
+                if self.args["IgnoreVariadicNames"]:
                     if (
                         functionNode.args.vararg
                         and functionNode.args.vararg.arg == name
@@ -210,8 +139,8 @@
                 lineNumber = argument.lineno
                 offset = argument.col_offset
 
-                errorCode = "U101" if name.startswith("_") else "U100"
-                self.__error(lineNumber - 1, offset, errorCode, name)
+                errorCode = "U-101" if name.startswith("_") else "U-100"
+                self.addError(lineNumber, offset, errorCode, name)
 
     def __getDecoratorNames(self, functionNode):
         """
@@ -397,17 +326,17 @@
         """
         errors = {}
         loadCounter = GlobalVariableLoadCounter()
-        loadCounter.visit(self.__tree)
+        loadCounter.visit(self.tree)
 
         globalVariables = self.__extractGlobalVariables()
 
         for varId, loads in loadCounter.getLoads():
             if varId in globalVariables and loads == 0:
                 storeInfo = loadCounter.getStoreInfo(varId)
-                errorInfo = (storeInfo.lineno - 1, storeInfo.offset, "U200", varId)
+                errorInfo = (storeInfo.lineno, storeInfo.offset, "U-200", varId)
                 errors[varId] = errorInfo
 
-        for node in self.__tree.body[::-1]:
+        for node in self.tree.body[::-1]:
             if isinstance(node, ast.Assign):
                 for target in node.targets:
                     if isinstance(target, ast.Name) and target.id in errors:
@@ -421,14 +350,14 @@
             else:
                 break
 
-        if self.__args["IgnoreDunderGlobals"]:
+        if self.args["IgnoreDunderGlobals"]:
             # eliminate some special cases
             for name in list(errors):
                 if name.startswith("__") and name.endswith("__"):
                     errors.pop(name)
 
         for varId in errors:
-            self.__error(*errors[varId])
+            self.addError(*errors[varId])
 
     def __extractGlobalVariables(self):
         """
@@ -439,7 +368,7 @@
         """
         variables = set()
 
-        for assignment in self.__tree.body:
+        for assignment in self.tree.body:
             if isinstance(assignment, ast.Assign):
                 for target in assignment.targets:
                     if isinstance(target, ast.Name):
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Unused/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Unused/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -11,16 +11,18 @@
 
 _unusedMessages = {
     ## Unused Arguments
-    "U100": QCoreApplication.translate("UnusedChecker", "Unused argument '{0}'"),
-    "U101": QCoreApplication.translate("UnusedChecker", "Unused argument '{0}'"),
+    "U-100": QCoreApplication.translate("UnusedChecker", "Unused argument '{0}'"),
+    "U-101": QCoreApplication.translate("UnusedChecker", "Unused argument '{0}'"),
     ## Unused Globals
-    "U200": QCoreApplication.translate("UnusedChecker", "Unused global variable '{0}'"),
+    "U-200": QCoreApplication.translate(
+        "UnusedChecker", "Unused global variable '{0}'"
+    ),
 }
 
 _unusedMessagesSampleArgs = {
     ## Unused Arguments
-    "U100": ["foo_arg"],
-    "U101": ["_bar_arg"],
+    "U-100": ["foo_arg"],
+    "U-101": ["_bar_arg"],
     ## Unused Globals
-    "U200": ["FOO"],
+    "U-200": ["FOO"],
 }
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/pycodestyle.py	Sat Mar 01 15:52:40 2025 +0100
@@ -922,7 +922,7 @@
                 if text == ':' and brace_stack[-1:] == ['[']:
                     pass
                 # 3.12+ fstring format specifier
-                elif text == ':' and brace_stack[-2:] == ['f', '{']:  # pragma: >=3.12 cover  # noqa: E501
+                elif text == ':' and brace_stack[-2:] == ['f', '{']:  # pragma: >=3.12 cover  # noqa: E-501
                     pass
                 # tuple (and list for some reason?)
                 elif text == ',' and next_char in ')]':
@@ -2733,4 +2733,4 @@
 if __name__ == '__main__':
     _main()
 #
-# eflag: noqa = D2, M601, M801
+# eflag: noqa = D2, M-601, M-801
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/translations.py	Sat Mar 01 15:52:40 2025 +0100
@@ -28,6 +28,7 @@
 from .NameOrder.translations import _nameOrderMessages, _nameOrderMessagesSampleArgs
 from .Naming.translations import _namingStyleMessages
 from .PathLib.translations import _pathlibMessages
+from .Pydantic.translations import _pydanticMessages
 from .Security.translations import _securityMessages, _securityMessagesSampleArgs
 from .Simplify.translations import _simplifyMessages, _simplifyMessagesSampleArgs
 from .Unused.translations import _unusedMessages, _unusedMessagesSampleArgs
@@ -37,185 +38,193 @@
 ##################################################################
 
 _pycodestyleErrorMessages = {
-    "E101": QCoreApplication.translate(
+    "E-101": QCoreApplication.translate(
         "pycodestyle", "indentation contains mixed spaces and tabs"
     ),
-    "E111": QCoreApplication.translate(
+    "E-111": QCoreApplication.translate(
         "pycodestyle", "indentation is not a multiple of four"
     ),
-    "E112": QCoreApplication.translate("pycodestyle", "expected an indented block"),
-    "E113": QCoreApplication.translate("pycodestyle", "unexpected indentation"),
-    "E114": QCoreApplication.translate(
+    "E-112": QCoreApplication.translate("pycodestyle", "expected an indented block"),
+    "E-113": QCoreApplication.translate("pycodestyle", "unexpected indentation"),
+    "E-114": QCoreApplication.translate(
         "pycodestyle", "indentation is not a multiple of four (comment)"
     ),
-    "E115": QCoreApplication.translate(
+    "E-115": QCoreApplication.translate(
         "pycodestyle", "expected an indented block (comment)"
     ),
-    "E116": QCoreApplication.translate(
+    "E-116": QCoreApplication.translate(
         "pycodestyle", "unexpected indentation (comment)"
     ),
-    "E117": QCoreApplication.translate("pycodestyle", "over-indented"),
-    "E121": QCoreApplication.translate(
+    "E-117": QCoreApplication.translate("pycodestyle", "over-indented"),
+    "E-121": QCoreApplication.translate(
         "pycodestyle", "continuation line indentation is not a multiple of four"
     ),
-    "E122": QCoreApplication.translate(
+    "E-122": QCoreApplication.translate(
         "pycodestyle", "continuation line missing indentation or outdented"
     ),
-    "E123": QCoreApplication.translate(
+    "E-123": QCoreApplication.translate(
         "pycodestyle",
         "closing bracket does not match indentation of opening bracket's line",
     ),
-    "E124": QCoreApplication.translate(
+    "E-124": QCoreApplication.translate(
         "pycodestyle", "closing bracket does not match visual indentation"
     ),
-    "E125": QCoreApplication.translate(
+    "E-125": QCoreApplication.translate(
         "pycodestyle", "continuation line with same indent as next logical line"
     ),
-    "E126": QCoreApplication.translate(
+    "E-126": QCoreApplication.translate(
         "pycodestyle", "continuation line over-indented for hanging indent"
     ),
-    "E127": QCoreApplication.translate(
+    "E-127": QCoreApplication.translate(
         "pycodestyle", "continuation line over-indented for visual indent"
     ),
-    "E128": QCoreApplication.translate(
+    "E-128": QCoreApplication.translate(
         "pycodestyle", "continuation line under-indented for visual indent"
     ),
-    "E129": QCoreApplication.translate(
+    "E-129": QCoreApplication.translate(
         "pycodestyle", "visually indented line with same indent as next logical line"
     ),
-    "E131": QCoreApplication.translate(
+    "E-131": QCoreApplication.translate(
         "pycodestyle", "continuation line unaligned for hanging indent"
     ),
-    "E133": QCoreApplication.translate(
+    "E-133": QCoreApplication.translate(
         "pycodestyle", "closing bracket is missing indentation"
     ),
-    "E201": QCoreApplication.translate("pycodestyle", "whitespace after '{0}'"),
-    "E202": QCoreApplication.translate("pycodestyle", "whitespace before '{0}'"),
-    "E203": QCoreApplication.translate("pycodestyle", "whitespace before '{0}'"),
-    "E204": QCoreApplication.translate("pycodestyle", "whitespace after decorator '@'"),
-    "E211": QCoreApplication.translate("pycodestyle", "whitespace before '{0}'"),
-    "E221": QCoreApplication.translate(
+    "E-201": QCoreApplication.translate("pycodestyle", "whitespace after '{0}'"),
+    "E-202": QCoreApplication.translate("pycodestyle", "whitespace before '{0}'"),
+    "E-203": QCoreApplication.translate("pycodestyle", "whitespace before '{0}'"),
+    "E-204": QCoreApplication.translate(
+        "pycodestyle", "whitespace after decorator '@'"
+    ),
+    "E-211": QCoreApplication.translate("pycodestyle", "whitespace before '{0}'"),
+    "E-221": QCoreApplication.translate(
         "pycodestyle", "multiple spaces before operator"
     ),
-    "E222": QCoreApplication.translate("pycodestyle", "multiple spaces after operator"),
-    "E223": QCoreApplication.translate("pycodestyle", "tab before operator"),
-    "E224": QCoreApplication.translate("pycodestyle", "tab after operator"),
-    "E225": QCoreApplication.translate(
+    "E-222": QCoreApplication.translate(
+        "pycodestyle", "multiple spaces after operator"
+    ),
+    "E-223": QCoreApplication.translate("pycodestyle", "tab before operator"),
+    "E-224": QCoreApplication.translate("pycodestyle", "tab after operator"),
+    "E-225": QCoreApplication.translate(
         "pycodestyle", "missing whitespace around operator"
     ),
-    "E226": QCoreApplication.translate(
+    "E-226": QCoreApplication.translate(
         "pycodestyle", "missing whitespace around arithmetic operator"
     ),
-    "E227": QCoreApplication.translate(
+    "E-227": QCoreApplication.translate(
         "pycodestyle", "missing whitespace around bitwise or shift operator"
     ),
-    "E228": QCoreApplication.translate(
+    "E-228": QCoreApplication.translate(
         "pycodestyle", "missing whitespace around modulo operator"
     ),
-    "E231": QCoreApplication.translate("pycodestyle", "missing whitespace after '{0}'"),
-    "E241": QCoreApplication.translate("pycodestyle", "multiple spaces after '{0}'"),
-    "E242": QCoreApplication.translate("pycodestyle", "tab after '{0}'"),
-    "E251": QCoreApplication.translate(
+    "E-231": QCoreApplication.translate(
+        "pycodestyle", "missing whitespace after '{0}'"
+    ),
+    "E-241": QCoreApplication.translate("pycodestyle", "multiple spaces after '{0}'"),
+    "E-242": QCoreApplication.translate("pycodestyle", "tab after '{0}'"),
+    "E-251": QCoreApplication.translate(
         "pycodestyle", "unexpected spaces around keyword / parameter equals"
     ),
-    "E252": QCoreApplication.translate(
+    "E-252": QCoreApplication.translate(
         "pycodestyle", "missing whitespace around parameter equals"
     ),
-    "E261": QCoreApplication.translate(
+    "E-261": QCoreApplication.translate(
         "pycodestyle", "at least two spaces before inline comment"
     ),
-    "E262": QCoreApplication.translate(
+    "E-262": QCoreApplication.translate(
         "pycodestyle", "inline comment should start with '# '"
     ),
-    "E265": QCoreApplication.translate(
+    "E-265": QCoreApplication.translate(
         "pycodestyle", "block comment should start with '# '"
     ),
-    "E266": QCoreApplication.translate(
+    "E-266": QCoreApplication.translate(
         "pycodestyle", "too many leading '#' for block comment"
     ),
-    "E271": QCoreApplication.translate("pycodestyle", "multiple spaces after keyword"),
-    "E272": QCoreApplication.translate("pycodestyle", "multiple spaces before keyword"),
-    "E273": QCoreApplication.translate("pycodestyle", "tab after keyword"),
-    "E274": QCoreApplication.translate("pycodestyle", "tab before keyword"),
-    "E275": QCoreApplication.translate(
+    "E-271": QCoreApplication.translate("pycodestyle", "multiple spaces after keyword"),
+    "E-272": QCoreApplication.translate(
+        "pycodestyle", "multiple spaces before keyword"
+    ),
+    "E-273": QCoreApplication.translate("pycodestyle", "tab after keyword"),
+    "E-274": QCoreApplication.translate("pycodestyle", "tab before keyword"),
+    "E-275": QCoreApplication.translate(
         "pycodestyle", "missing whitespace after keyword"
     ),
-    "E301": QCoreApplication.translate(
+    "E-301": QCoreApplication.translate(
         "pycodestyle", "expected {0} blank lines, found {1}"
     ),
-    "E302": QCoreApplication.translate(
+    "E-302": QCoreApplication.translate(
         "pycodestyle", "expected {0} blank lines, found {1}"
     ),
-    "E303": QCoreApplication.translate(
+    "E-303": QCoreApplication.translate(
         "pycodestyle", "too many blank lines ({0}), expected {1}"
     ),
-    "E304": QCoreApplication.translate(
+    "E-304": QCoreApplication.translate(
         "pycodestyle", "blank lines found after function decorator"
     ),
-    "E305": QCoreApplication.translate(
+    "E-305": QCoreApplication.translate(
         "pycodestyle",
         "expected {0} blank lines after class or function definition, found {1}",
     ),
-    "E306": QCoreApplication.translate(
+    "E-306": QCoreApplication.translate(
         "pycodestyle", "expected {0} blank lines before a nested definition, found {1}"
     ),
-    "E307": QCoreApplication.translate(
+    "E-307": QCoreApplication.translate(
         "pycodestyle",
         "too many blank lines ({0}) before a nested definition, expected {1}",
     ),
-    "E308": QCoreApplication.translate("pycodestyle", "too many blank lines ({0})"),
-    "E401": QCoreApplication.translate("pycodestyle", "multiple imports on one line"),
-    "E402": QCoreApplication.translate(
+    "E-308": QCoreApplication.translate("pycodestyle", "too many blank lines ({0})"),
+    "E-401": QCoreApplication.translate("pycodestyle", "multiple imports on one line"),
+    "E-402": QCoreApplication.translate(
         "pycodestyle", "module level import not at top of file"
     ),
-    "E501": QCoreApplication.translate(
+    "E-501": QCoreApplication.translate(
         "pycodestyle", "line too long ({0} > {1} characters)"
     ),
-    "E502": QCoreApplication.translate(
+    "E-502": QCoreApplication.translate(
         "pycodestyle", "the backslash is redundant between brackets"
     ),
-    "E701": QCoreApplication.translate(
+    "E-701": QCoreApplication.translate(
         "pycodestyle", "multiple statements on one line (colon)"
     ),
-    "E702": QCoreApplication.translate(
+    "E-702": QCoreApplication.translate(
         "pycodestyle", "multiple statements on one line (semicolon)"
     ),
-    "E703": QCoreApplication.translate(
+    "E-703": QCoreApplication.translate(
         "pycodestyle", "statement ends with a semicolon"
     ),
-    "E704": QCoreApplication.translate(
+    "E-704": QCoreApplication.translate(
         "pycodestyle", "multiple statements on one line (def)"
     ),
-    "E711": QCoreApplication.translate(
+    "E-711": QCoreApplication.translate(
         "pycodestyle", "comparison to {0} should be {1}"
     ),
-    "E712": QCoreApplication.translate(
+    "E-712": QCoreApplication.translate(
         "pycodestyle", "comparison to {0} should be {1}"
     ),
-    "E713": QCoreApplication.translate(
+    "E-713": QCoreApplication.translate(
         "pycodestyle", "test for membership should be 'not in'"
     ),
-    "E714": QCoreApplication.translate(
+    "E-714": QCoreApplication.translate(
         "pycodestyle", "test for object identity should be 'is not'"
     ),
-    "E721": QCoreApplication.translate(
+    "E-721": QCoreApplication.translate(
         "pycodestyle",
         "do not compare types, for exact checks use 'is' / 'is not', "
         "for instance checks use 'isinstance()'",
     ),
-    "E722": QCoreApplication.translate("pycodestyle", "do not use bare except"),
-    "E731": QCoreApplication.translate(
+    "E-722": QCoreApplication.translate("pycodestyle", "do not use bare except"),
+    "E-731": QCoreApplication.translate(
         "pycodestyle", "do not assign a lambda expression, use a def"
     ),
-    "E741": QCoreApplication.translate("pycodestyle", "ambiguous variable name '{0}'"),
-    "E742": QCoreApplication.translate(
+    "E-741": QCoreApplication.translate("pycodestyle", "ambiguous variable name '{0}'"),
+    "E-742": QCoreApplication.translate(
         "pycodestyle", "ambiguous class definition '{0}'"
     ),
-    "E743": QCoreApplication.translate(
+    "E-743": QCoreApplication.translate(
         "pycodestyle", "ambiguous function definition '{0}'"
     ),
-    "E901": QCoreApplication.translate("pycodestyle", "{0}: {1}"),
-    "E902": QCoreApplication.translate("pycodestyle", "{0}"),
+    "E-901": QCoreApplication.translate("pycodestyle", "{0}: {1}"),
+    "E-902": QCoreApplication.translate("pycodestyle", "{0}"),
 }
 
 ##################################################################
@@ -223,24 +232,26 @@
 ##################################################################
 
 _pycodestyleWarningMessages = {
-    "W191": QCoreApplication.translate("pycodestyle", "indentation contains tabs"),
-    "W291": QCoreApplication.translate("pycodestyle", "trailing whitespace"),
-    "W292": QCoreApplication.translate("pycodestyle", "no newline at end of file"),
-    "W293": QCoreApplication.translate("pycodestyle", "blank line contains whitespace"),
-    "W391": QCoreApplication.translate("pycodestyle", "blank line at end of file"),
-    "W503": QCoreApplication.translate(
+    "W-191": QCoreApplication.translate("pycodestyle", "indentation contains tabs"),
+    "W-291": QCoreApplication.translate("pycodestyle", "trailing whitespace"),
+    "W-292": QCoreApplication.translate("pycodestyle", "no newline at end of file"),
+    "W-293": QCoreApplication.translate(
+        "pycodestyle", "blank line contains whitespace"
+    ),
+    "W-391": QCoreApplication.translate("pycodestyle", "blank line at end of file"),
+    "W-503": QCoreApplication.translate(
         "pycodestyle", "line break before binary operator"
     ),
-    "W504": QCoreApplication.translate(
+    "W-504": QCoreApplication.translate(
         "pycodestyle", "line break after binary operator"
     ),
-    "W505": QCoreApplication.translate(
+    "W-505": QCoreApplication.translate(
         "pycodestyle", "doc line too long ({0} > {1} characters)"
     ),
-    "W605": QCoreApplication.translate(
+    "W-605": QCoreApplication.translate(
         "pycodestyle", "invalid escape sequence '\\{0}'"
     ),
-    "W606": QCoreApplication.translate(
+    "W-606": QCoreApplication.translate(
         "pycodestyle",
         "'async' and 'await' are reserved keywords starting with Python 3.7",
     ),
@@ -251,178 +262,178 @@
 ##################################################################
 
 _fixMessages = {
-    "FIXD111": QCoreApplication.translate(
+    "FIX-D111": QCoreApplication.translate(
         "CodeStyleFixer", "Triple single quotes converted to triple double quotes."
     ),
-    "FIXD112": QCoreApplication.translate(
+    "FIX-D112": QCoreApplication.translate(
         "CodeStyleFixer", 'Introductory quotes corrected to be {0}"""'
     ),
-    "FIXD121": QCoreApplication.translate(
+    "FIX-D121": QCoreApplication.translate(
         "CodeStyleFixer", "Single line docstring put on one line."
     ),
-    "FIXD131": QCoreApplication.translate(
+    "FIX-D131": QCoreApplication.translate(
         "CodeStyleFixer", "Period added to summary line."
     ),
-    "FIXD141": QCoreApplication.translate(
+    "FIX-D141": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line before function/method docstring removed."
     ),
-    "FIXD142": QCoreApplication.translate(
+    "FIX-D142": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line inserted before class docstring."
     ),
-    "FIXD143": QCoreApplication.translate(
+    "FIX-D143": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line inserted after class docstring."
     ),
-    "FIXD144": QCoreApplication.translate(
+    "FIX-D144": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line inserted after docstring summary."
     ),
-    "FIXD145": QCoreApplication.translate(
+    "FIX-D145": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line inserted after last paragraph of docstring."
     ),
-    "FIXD221": QCoreApplication.translate(
+    "FIX-D221": QCoreApplication.translate(
         "CodeStyleFixer", "Leading quotes put on separate line."
     ),
-    "FIXD222": QCoreApplication.translate(
+    "FIX-D222": QCoreApplication.translate(
         "CodeStyleFixer", "Trailing quotes put on separate line."
     ),
-    "FIXD242": QCoreApplication.translate(
+    "FIX-D242": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line before class docstring removed."
     ),
-    "FIXD244": QCoreApplication.translate(
+    "FIX-D244": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line before function/method docstring removed."
     ),
-    "FIXD243": QCoreApplication.translate(
+    "FIX-D243": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line after class docstring removed."
     ),
-    "FIXD245": QCoreApplication.translate(
+    "FIX-D245": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line after function/method docstring removed."
     ),
-    "FIXD247": QCoreApplication.translate(
+    "FIX-D247": QCoreApplication.translate(
         "CodeStyleFixer", "Blank line after last paragraph removed."
     ),
-    "FIXE101": QCoreApplication.translate(
+    "FIX-E101": QCoreApplication.translate(
         "CodeStyleFixer", "Tab converted to 4 spaces."
     ),
-    "FIXE111": QCoreApplication.translate(
+    "FIX-E111": QCoreApplication.translate(
         "CodeStyleFixer", "Indentation adjusted to be a multiple of four."
     ),
-    "FIXE121": QCoreApplication.translate(
+    "FIX-E121": QCoreApplication.translate(
         "CodeStyleFixer", "Indentation of continuation line corrected."
     ),
-    "FIXE124": QCoreApplication.translate(
+    "FIX-E124": QCoreApplication.translate(
         "CodeStyleFixer", "Indentation of closing bracket corrected."
     ),
-    "FIXE122": QCoreApplication.translate(
+    "FIX-E122": QCoreApplication.translate(
         "CodeStyleFixer", "Missing indentation of continuation line corrected."
     ),
-    "FIXE123": QCoreApplication.translate(
+    "FIX-E123": QCoreApplication.translate(
         "CodeStyleFixer", "Closing bracket aligned to opening bracket."
     ),
-    "FIXE125": QCoreApplication.translate(
+    "FIX-E125": QCoreApplication.translate(
         "CodeStyleFixer", "Indentation level changed."
     ),
-    "FIXE126": QCoreApplication.translate(
+    "FIX-E126": QCoreApplication.translate(
         "CodeStyleFixer", "Indentation level of hanging indentation changed."
     ),
-    "FIXE127": QCoreApplication.translate(
+    "FIX-E127": QCoreApplication.translate(
         "CodeStyleFixer", "Visual indentation corrected."
     ),
-    "FIXE201": QCoreApplication.translate(
+    "FIX-E201": QCoreApplication.translate(
         "CodeStyleFixer", "Extraneous whitespace removed."
     ),
-    "FIXE225": QCoreApplication.translate(
+    "FIX-E225": QCoreApplication.translate(
         "CodeStyleFixer", "Missing whitespace added."
     ),
-    "FIXE221": QCoreApplication.translate(
+    "FIX-E221": QCoreApplication.translate(
         "CodeStyleFixer", "Extraneous whitespace removed."
     ),
-    "FIXE231": QCoreApplication.translate(
+    "FIX-E231": QCoreApplication.translate(
         "CodeStyleFixer", "Missing whitespace added."
     ),
-    "FIXE251": QCoreApplication.translate(
+    "FIX-E251": QCoreApplication.translate(
         "CodeStyleFixer", "Extraneous whitespace removed."
     ),
-    "FIXE261": QCoreApplication.translate(
+    "FIX-E261": QCoreApplication.translate(
         "CodeStyleFixer", "Whitespace around comment sign corrected."
     ),
-    "FIXE302+": lambda n=1: QCoreApplication.translate(
+    "FIX-E302+": lambda n=1: QCoreApplication.translate(
         "CodeStyleFixer", "%n blank line(s) inserted.", "", n
     ),
-    "FIXE302-": lambda n=1: QCoreApplication.translate(
+    "FIX-E302-": lambda n=1: QCoreApplication.translate(
         "CodeStyleFixer", "%n superfluous lines removed", "", n
     ),
-    "FIXE303": QCoreApplication.translate(
+    "FIX-E303": QCoreApplication.translate(
         "CodeStyleFixer", "Superfluous blank lines removed."
     ),
-    "FIXE304": QCoreApplication.translate(
+    "FIX-E304": QCoreApplication.translate(
         "CodeStyleFixer", "Superfluous blank lines after function decorator removed."
     ),
-    "FIXE401": QCoreApplication.translate(
+    "FIX-E401": QCoreApplication.translate(
         "CodeStyleFixer", "Imports were put on separate lines."
     ),
-    "FIXE501": QCoreApplication.translate(
+    "FIX-E-501": QCoreApplication.translate(
         "CodeStyleFixer", "Long lines have been shortened."
     ),
-    "FIXE502": QCoreApplication.translate(
+    "FIX-E502": QCoreApplication.translate(
         "CodeStyleFixer", "Redundant backslash in brackets removed."
     ),
-    "FIXE701": QCoreApplication.translate(
+    "FIX-E701": QCoreApplication.translate(
         "CodeStyleFixer", "Compound statement corrected."
     ),
-    "FIXE702": QCoreApplication.translate(
+    "FIX-E702": QCoreApplication.translate(
         "CodeStyleFixer", "Compound statement corrected."
     ),
-    "FIXE711": QCoreApplication.translate(
+    "FIX-E711": QCoreApplication.translate(
         "CodeStyleFixer", "Comparison to None/True/False corrected."
     ),
-    "FIXN804": QCoreApplication.translate("CodeStyleFixer", "'{0}' argument added."),
-    "FIXN806": QCoreApplication.translate("CodeStyleFixer", "'{0}' argument removed."),
-    "FIXW291": QCoreApplication.translate(
+    "FIX-N804": QCoreApplication.translate("CodeStyleFixer", "'{0}' argument added."),
+    "FIX-N806": QCoreApplication.translate("CodeStyleFixer", "'{0}' argument removed."),
+    "FIX-W291": QCoreApplication.translate(
         "CodeStyleFixer", "Whitespace stripped from end of line."
     ),
-    "FIXW292": QCoreApplication.translate(
+    "FIX-W292": QCoreApplication.translate(
         "CodeStyleFixer", "newline added to end of file."
     ),
-    "FIXW391": QCoreApplication.translate(
+    "FIX-W391": QCoreApplication.translate(
         "CodeStyleFixer", "Superfluous trailing blank lines removed from end of file."
     ),
-    "FIXW603": QCoreApplication.translate("CodeStyleFixer", "'<>' replaced by '!='."),
-    "FIXWRITE_ERROR": QCoreApplication.translate(
+    "FIX-W603": QCoreApplication.translate("CodeStyleFixer", "'<>' replaced by '!='."),
+    "FIX-WRITE_ERROR": QCoreApplication.translate(
         "CodeStyleFixer", "Could not save the file! Skipping it. Reason: {0}"
     ),
 }
 
 _pycodestyleErrorMessagesSampleArgs = {
-    "E201": ["([{"],
-    "E202": ["}])"],
-    "E203": [",;:"],
-    "E211": ["(["],
-    "E231": [",;:"],
-    "E241": [",;:"],
-    "E242": [",;:"],
-    "E301": [1, 0],
-    "E302": [2, 1],
-    "E303": [3, 2],
-    "E305": [2, 1],
-    "E306": [1, 0],
-    "E307": [3, 1],
-    "E308": [3],
-    "E501": [95, 88],
-    "E711": ["None", "'if cond is None:'"],
-    "E712": ["True", "'if cond is True:' or 'if cond:'"],
-    "E741": ["l"],
-    "E742": ["l"],
-    "E743": ["l"],
-    "E901": ["SyntaxError", "Invalid Syntax"],
-    "E902": ["OSError"],
+    "E-201": ["([{"],
+    "E-202": ["}])"],
+    "E-203": [",;:"],
+    "E-211": ["(["],
+    "E-231": [",;:"],
+    "E-241": [",;:"],
+    "E-242": [",;:"],
+    "E-301": [1, 0],
+    "E-302": [2, 1],
+    "E-303": [3, 2],
+    "E-305": [2, 1],
+    "E-306": [1, 0],
+    "E-307": [3, 1],
+    "E-308": [3],
+    "E-501": [95, 88],
+    "E-711": ["None", "'if cond is None:'"],
+    "E-712": ["True", "'if cond is True:' or 'if cond:'"],
+    "E-741": ["l"],
+    "E-742": ["l"],
+    "E-743": ["l"],
+    "E-901": ["SyntaxError", "Invalid Syntax"],
+    "E-902": ["OSError"],
 }
 
 _pycodestyleWarningMessagesSampleArgs = {
-    "W505": [80, 72],
-    "W605": ["A"],
+    "W-505": [80, 72],
+    "W-605": ["A"],
 }
 
 _fixMessagesSampleArgs = {
-    "FIXWRITE_ERROR": ["OSError"],
+    "FIX-WRITE_ERROR": ["OSError"],
 }
 
 messageCatalogs = {
@@ -437,6 +448,7 @@
     "N": _namingStyleMessages,
     "NO": _nameOrderMessages,
     "P": _pathlibMessages,
+    "PYD": _pydanticMessages,
     "S": _securityMessages,
     "U": _unusedMessages,
     "W": _pycodestyleWarningMessages,
--- a/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/jsCheckSyntax.py	Sat Mar 01 15:52:40 2025 +0100
@@ -158,7 +158,7 @@
     """
     if codestring:
         try:
-            import esprima  # noqa: I101, I102
+            import esprima  # noqa: I-101, I-102
         except ImportError:
             error = "esprima not available. Install it via the PyPI interface."
             return [{"error": (file, 0, 0, "", error)}]
--- a/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/pyCheckSyntax.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/pyCheckSyntax.py	Sat Mar 01 15:52:40 2025 +0100
@@ -254,8 +254,8 @@
             category,
             filename,
             lineno,
-            file=None,  # noqa: U100
-            line=None,  # noqa: U100
+            file=None,  # noqa: U-100
+            line=None,  # noqa: U-100
         ):
             pyWarnings.append(
                 (
@@ -291,7 +291,7 @@
 
             if filename.endswith(".ptl"):
                 try:
-                    import quixote.ptl_compile  # __IGNORE_WARNING_I10__
+                    import quixote.ptl_compile  # __IGNORE_WARNING_I-10__
                 except ImportError:
                     return [
                         {"error": (filename, 0, 0, "", "Quixote plugin not found.")}
--- a/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/tomlCheckSyntax.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/tomlCheckSyntax.py	Sat Mar 01 15:52:40 2025 +0100
@@ -157,9 +157,9 @@
     """
     if codestring:
         try:
-            import tomlkit  # __IGNORE_WARNING_I10__
+            import tomlkit  # __IGNORE_WARNING_I-10__
 
-            from tomlkit.exceptions import (  # __IGNORE_WARNING_I10__
+            from tomlkit.exceptions import (  # __IGNORE_WARNING_I-10__
                 KeyAlreadyPresent,
                 ParseError,
             )
--- a/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/yamlCheckSyntax.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/CheckerPlugins/SyntaxChecker/yamlCheckSyntax.py	Sat Mar 01 15:52:40 2025 +0100
@@ -157,7 +157,7 @@
     """
     if codestring:
         try:
-            from yaml import MarkedYAMLError, safe_load_all  # __IGNORE_WARNING_I10__
+            from yaml import MarkedYAMLError, safe_load_all  # __IGNORE_WARNING_I-10__
         except ImportError:
             error = "pyyaml not available. Install it via the PyPI interface."
             return [{"error": (file, 0, 0, "", error)}]
--- a/src/eric7/Plugins/PluginAbout.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginAbout.py	Sat Mar 01 15:52:40 2025 +0100
@@ -31,7 +31,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class AboutPlugin(QObject):
--- a/src/eric7/Plugins/PluginCodeStyleChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginCodeStyleChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -43,7 +43,7 @@
 # End-Of-Header
 
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class CodeStyleCheckerPlugin(QObject):
--- a/src/eric7/Plugins/PluginEricapi.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginEricapi.py	Sat Mar 01 15:52:40 2025 +0100
@@ -37,7 +37,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def exeDisplayData():
--- a/src/eric7/Plugins/PluginEricdoc.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginEricdoc.py	Sat Mar 01 15:52:40 2025 +0100
@@ -43,7 +43,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def exeDisplayDataList():
--- a/src/eric7/Plugins/PluginSyntaxChecker.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginSyntaxChecker.py	Sat Mar 01 15:52:40 2025 +0100
@@ -38,7 +38,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class SyntaxCheckerPlugin(QObject):
--- a/src/eric7/Plugins/PluginTranslator.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginTranslator.py	Sat Mar 01 15:52:40 2025 +0100
@@ -35,7 +35,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 translatorPluginObject = None
 
--- a/src/eric7/Plugins/PluginVcsGit.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginVcsGit.py	Sat Mar 01 15:52:40 2025 +0100
@@ -36,7 +36,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def exeDisplayData():
@@ -347,4 +347,4 @@
 
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Plugins/PluginVcsMercurial.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginVcsMercurial.py	Sat Mar 01 15:52:40 2025 +0100
@@ -41,7 +41,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def exeDisplayData():
--- a/src/eric7/Plugins/PluginVcsPySvn.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginVcsPySvn.py	Sat Mar 01 15:52:40 2025 +0100
@@ -36,7 +36,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def exeDisplayData():
@@ -47,7 +47,7 @@
     @rtype dict
     """
     try:
-        import pysvn  # __IGNORE_WARNING_I10__
+        import pysvn  # __IGNORE_WARNING_I-10__
 
         try:
             text = os.path.dirname(pysvn.__file__)
--- a/src/eric7/Plugins/PluginVcsSubversion.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginVcsSubversion.py	Sat Mar 01 15:52:40 2025 +0100
@@ -41,7 +41,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def exeDisplayData():
--- a/src/eric7/Plugins/PluginVmListspace.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginVmListspace.py	Sat Mar 01 15:52:40 2025 +0100
@@ -32,7 +32,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def previewPix():
--- a/src/eric7/Plugins/PluginVmTabview.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginVmTabview.py	Sat Mar 01 15:52:40 2025 +0100
@@ -32,7 +32,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 def previewPix():
--- a/src/eric7/Plugins/PluginWizardDotDesktop.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardDotDesktop.py	Sat Mar 01 15:52:40 2025 +0100
@@ -33,7 +33,7 @@
 }
 # End-of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class DotDesktopWizard(QObject):
@@ -156,4 +156,4 @@
 
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Plugins/PluginWizardEricMessageBox.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardEricMessageBox.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class EricMessageBoxWizard(QObject):
@@ -150,4 +150,4 @@
 
 
 #
-# eflag: noqa = M841
+# eflag: noqa = M-841
--- a/src/eric7/Plugins/PluginWizardEricPlugin.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardEricPlugin.py	Sat Mar 01 15:52:40 2025 +0100
@@ -36,7 +36,7 @@
 }
 # End-of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class WizardEricPluginWizard(QObject):
@@ -195,4 +195,4 @@
 
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Plugins/PluginWizardPyRegExp.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardPyRegExp.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class PyRegExpWizard(QObject):
--- a/src/eric7/Plugins/PluginWizardQColorDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardQColorDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class ColorDialogWizard(QObject):
--- a/src/eric7/Plugins/PluginWizardQFileDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardQFileDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -32,7 +32,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class FileDialogWizard(QObject):
--- a/src/eric7/Plugins/PluginWizardQFontDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardQFontDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class FontDialogWizard(QObject):
--- a/src/eric7/Plugins/PluginWizardQInputDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardQInputDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class InputDialogWizard(QObject):
--- a/src/eric7/Plugins/PluginWizardQMessageBox.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardQMessageBox.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class MessageBoxWizard(QObject):
--- a/src/eric7/Plugins/PluginWizardQRegularExpression.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardQRegularExpression.py	Sat Mar 01 15:52:40 2025 +0100
@@ -30,7 +30,7 @@
 }
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class QRegularExpressionWizard(QObject):
--- a/src/eric7/Plugins/PluginWizardSetup.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/PluginWizardSetup.py	Sat Mar 01 15:52:40 2025 +0100
@@ -35,7 +35,7 @@
 }
 # End-of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 class SetupWizard(QObject):
@@ -181,4 +181,4 @@
 
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/UiExtensionPlugins/Translator/TranslatorEngines/TranslationEngine.py	Sat Mar 01 15:52:40 2025 +0100
@@ -83,7 +83,7 @@
         """
         return False
 
-    def getTextToSpeechData(self, requestObject, text, language):  # noqa: U100
+    def getTextToSpeechData(self, requestObject, text, language):  # noqa: U-100
         """
         Public method to pronounce the given text.
 
@@ -99,7 +99,7 @@
         return self.tr("No pronounce data available"), False
 
     def getTranslation(
-        self, requestObject, text, originalLanguage, translationLanguage  # noqa: U100
+        self, requestObject, text, originalLanguage, translationLanguage  # noqa: U-100
     ):
         """
         Public method to translate the given text.
--- a/src/eric7/Plugins/VcsPlugins/vcsGit/git.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/VcsPlugins/vcsGit/git.py	Sat Mar 01 15:52:40 2025 +0100
@@ -222,7 +222,7 @@
 
         return False, errMsg
 
-    def vcsInit(self, _vcsDir, noDialog=False):  # noqa: U100
+    def vcsInit(self, _vcsDir, noDialog=False):  # noqa: U-100
         """
         Public method used to initialize the Git repository.
 
@@ -266,7 +266,7 @@
             project.openProject(pfn)
 
     def vcsImport(
-        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U100
+        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U-100
     ):
         """
         Public method used to import the project into the Git repository.
@@ -692,7 +692,7 @@
         self.vcsAdd(path, isDir=False)
 
     def vcsRemove(
-        self, name, project=False, noDialog=False, stageOnly=False  # noqa: U100
+        self, name, project=False, noDialog=False, stageOnly=False  # noqa: U-100
     ):
         """
         Public method used to remove a file/directory from the Git
@@ -1154,7 +1154,7 @@
 
         return VersionControlState.Uncontrolled
 
-    def vcsAllRegisteredStates(self, names, dname, shortcut=True):  # noqa: U100
+    def vcsAllRegisteredStates(self, names, dname, shortcut=True):  # noqa: U-100
         """
         Public method used to get the registered states of a number of files
         in the vcs.
@@ -1318,7 +1318,7 @@
                 dia.exec()
 
     def vcsOptionsDialog(
-        self, project, _archive, editable=False, parent=None  # noqa: U100
+        self, project, _archive, editable=False, parent=None  # noqa: U-100
     ):
         """
         Public method to get a dialog to enter repository info.
--- a/src/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditEditor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditEditor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -90,11 +90,11 @@
     if args.file:
         fileName = os.path.basename(args.file)
         if fileName.startswith("hg-histedit-"):
-            from HgHisteditPlanEditor import HgHisteditPlanEditor  # noqa: I101, I102
+            from HgHisteditPlanEditor import HgHisteditPlanEditor  # noqa: I-101, I-102
 
             return HgHisteditPlanEditor(args.file)
         elif fileName.startswith("hg-editor-"):
-            from HgHisteditCommitEditor import (  # noqa: I101, I102
+            from HgHisteditCommitEditor import (  # noqa: I-101, I-102
                 HgHisteditCommitEditor,
             )
 
--- a/src/eric7/Plugins/VcsPlugins/vcsMercurial/hg.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/VcsPlugins/vcsMercurial/hg.py	Sat Mar 01 15:52:40 2025 +0100
@@ -273,7 +273,7 @@
             self.__getExtensionsInfo()
         return hgExists, errMsg
 
-    def vcsInit(self, _vcsDir, noDialog=False):  # noqa: U100
+    def vcsInit(self, _vcsDir, noDialog=False):  # noqa: U-100
         """
         Public method used to initialize the mercurial repository.
 
@@ -317,7 +317,7 @@
             project.openProject(pfn)
 
     def vcsImport(
-        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U100
+        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U-100
     ):
         """
         Public method used to import the project into the Mercurial repository.
@@ -656,7 +656,7 @@
 
         return output
 
-    def vcsUpdate(self, name=None, noDialog=False, revision=None):  # noqa: U100
+    def vcsUpdate(self, name=None, noDialog=False, revision=None):  # noqa: U-100
         """
         Public method used to update a file/directory with the Mercurial
         repository.
@@ -693,7 +693,7 @@
         self.checkVCSStatus()
         return res
 
-    def vcsAdd(self, name, isDir=False, noDialog=False):  # noqa: U100
+    def vcsAdd(self, name, isDir=False, noDialog=False):  # noqa: U-100
         """
         Public method used to add a file/directory to the Mercurial repository.
 
@@ -746,7 +746,7 @@
         """
         self.vcsAdd(path, isDir=False)
 
-    def vcsRemove(self, name, project=False, noDialog=False):  # noqa: U100
+    def vcsRemove(self, name, project=False, noDialog=False):  # noqa: U-100
         """
         Public method used to remove a file/directory from the Mercurial
         repository.
@@ -918,7 +918,7 @@
         self.summary.raise_()
         self.summary.start(mq=mq, largefiles=largefiles)
 
-    def vcsTag(self, name=None, revision=None, tagName=None):  # noqa: U100
+    def vcsTag(self, name=None, revision=None, tagName=None):  # noqa: U-100
         """
         Public method used to set/remove a tag in the Mercurial repository.
 
@@ -1032,7 +1032,7 @@
 
         return res
 
-    def vcsMerge(self, name, rev=""):  # noqa: U100
+    def vcsMerge(self, name, rev=""):  # noqa: U-100
         """
         Public method used to merge a URL/revision into the local project.
 
@@ -1180,7 +1180,7 @@
 
         return VersionControlState.Uncontrolled
 
-    def vcsAllRegisteredStates(self, names, dname, shortcut=True):  # noqa: U100
+    def vcsAllRegisteredStates(self, names, dname, shortcut=True):  # noqa: U-100
         """
         Public method used to get the registered states of a number of files
         in the vcs.
@@ -1323,7 +1323,7 @@
                 dia.exec()
 
     def vcsOptionsDialog(
-        self, project, _archive, editable=False, parent=None  # noqa: U100
+        self, project, _archive, editable=False, parent=None  # noqa: U-100
     ):
         """
         Public method to get a dialog to enter repository info.
--- a/src/eric7/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/VcsPlugins/vcsPySvn/subversion.py	Sat Mar 01 15:52:40 2025 +0100
@@ -178,7 +178,7 @@
         self.version = pysvn.svn_version[:-1]
         return True, ""
 
-    def vcsInit(self, vcsDir, noDialog=False):  # noqa: U100
+    def vcsInit(self, vcsDir, noDialog=False):  # noqa: U-100
         """
         Public method used to initialize the subversion repository.
 
@@ -262,7 +262,7 @@
             project.openProject(pfn)
 
     def vcsImport(
-        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U100
+        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U-100
     ):
         """
         Public method used to import the project into the Subversion
@@ -949,7 +949,7 @@
         dlg.exec()
         os.chdir(cwd)
 
-    def vcsRemove(self, name, project=False, noDialog=False):  # noqa: U100
+    def vcsRemove(self, name, project=False, noDialog=False):  # noqa: U-100
         """
         Public method used to remove a file/directory from the Subversion
         repository.
@@ -1604,7 +1604,7 @@
         else:
             return self.__vcsAllRegisteredStates_wc(names, dname, shortcut)
 
-    def __vcsAllRegisteredStates_wcng(self, names, dname, shortcut=True):  # noqa: U100
+    def __vcsAllRegisteredStates_wcng(self, names, dname, shortcut=True):  # noqa: U-100
         """
         Private method used to get the registered states of a number of files
         in the vcs.
@@ -1862,7 +1862,7 @@
                 dia.exec()
 
     def vcsOptionsDialog(
-        self, project, _archive, editable=False, parent=None  # noqa: U100
+        self, project, _archive, editable=False, parent=None  # noqa: U-100
     ):
         """
         Public method to get a dialog to enter repository info.
--- a/src/eric7/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat Mar 01 15:52:40 2025 +0100
@@ -188,7 +188,7 @@
 
         return False, errMsg
 
-    def vcsInit(self, vcsDir, noDialog=False):  # noqa: U100
+    def vcsInit(self, vcsDir, noDialog=False):  # noqa: U-100
         """
         Public method used to initialize the subversion repository.
 
@@ -272,7 +272,7 @@
             project.openProject(pfn)
 
     def vcsImport(
-        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U100
+        self, vcsDataDict, projectDir, noDialog=False, addAll=True  # noqa: U-100
     ):
         """
         Public method used to import the project into the Subversion
@@ -873,7 +873,7 @@
         if res:
             dia.exec()
 
-    def vcsRemove(self, name, project=False, noDialog=False):  # noqa: U100
+    def vcsRemove(self, name, project=False, noDialog=False):  # noqa: U-100
         """
         Public method used to remove a file/directory from the Subversion
         repository.
@@ -1669,7 +1669,7 @@
                 dia.exec()
 
     def vcsOptionsDialog(
-        self, project, _archive, editable=False, parent=None  # noqa: U100
+        self, project, _archive, editable=False, parent=None  # noqa: U-100
     ):
         """
         Public method to get a dialog to enter repository info.
--- a/src/eric7/Plugins/ViewManagerPlugins/Listspace/Listspace.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/ViewManagerPlugins/Listspace/Listspace.py	Sat Mar 01 15:52:40 2025 +0100
@@ -473,7 +473,7 @@
         self.editorChangedEd.emit(aw)
 
     def _addView(
-        self, win, fn=None, noName="", addNext=False, indexes=None  # noqa: U100
+        self, win, fn=None, noName="", addNext=False, indexes=None  # noqa: U-100
     ):
         """
         Protected method to add a view (i.e. window).
--- a/src/eric7/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/ViewManagerPlugins/Tabview/Tabview.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1159,7 +1159,7 @@
         self._modificationStatusChanged(editor.isModified(), editor)
         self._checkActions(editor)
 
-    def _showView(self, win, fn=None):  # noqa: U100
+    def _showView(self, win, fn=None):  # noqa: U-100
         """
         Protected method to show a view (i.e. window).
 
--- a/src/eric7/Plugins/WizardPlugins/EricPluginWizard/Templates.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Plugins/WizardPlugins/EricPluginWizard/Templates.py	Sat Mar 01 15:52:40 2025 +0100
@@ -40,7 +40,7 @@
 }}
 # End-Of-Header
 
-error = ""  # noqa: U200
+error = ""  # noqa: U-200
 
 
 {modulesetup}\
@@ -308,4 +308,4 @@
 '''
 
 #
-# eflag: noqa = M841
+# eflag: noqa = M-841
--- a/src/eric7/Preferences/ConfigurationDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -145,7 +145,7 @@
         self.itmDict = {}
 
         if not fromEric:
-            from eric7.PluginManager.PluginManager import (  # __IGNORE_WARNING_I101__
+            from eric7.PluginManager.PluginManager import (  # __IGNORE_WARNING_I-101__
                 PluginManager,
             )
 
@@ -155,7 +155,7 @@
                 self.pluginManager = PluginManager(self)
                 ericApp().registerObject("PluginManager", self.pluginManager)
 
-            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I101__
+            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I-101__
                 VirtualenvManager,
             )
 
@@ -165,7 +165,7 @@
                 self.virtualenvManager = VirtualenvManager(self)
                 ericApp().registerObject("VirtualEnvManager", self.virtualenvManager)
 
-            from eric7.PipInterface.Pip import Pip  # __IGNORE_WARNING_I101__
+            from eric7.PipInterface.Pip import Pip  # __IGNORE_WARNING_I-101__
 
             try:
                 self.pip = ericApp().getObject("Pip")
--- a/src/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/DebuggerGeneralPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -472,7 +472,7 @@
         """
         return QModelIndex()
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public Qt slot to get the column count.
 
@@ -483,7 +483,7 @@
         """
         return 1
 
-    def rowCount(self, parent=None):  # noqa: U100
+    def rowCount(self, parent=None):  # noqa: U-100
         """
         Public Qt slot to get the row count.
 
--- a/src/eric7/Preferences/ConfigurationPages/DebuggerPython3Page.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/DebuggerPython3Page.py	Sat Mar 01 15:52:40 2025 +0100
@@ -35,7 +35,7 @@
             self.__virtualenvManager = ericApp().getObject("VirtualEnvManager")
             self.__standalone = False
         except KeyError:
-            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I101__
+            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I-101__
                 VirtualenvManager,
             )
 
--- a/src/eric7/Preferences/ConfigurationPages/EmailPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/EmailPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -274,7 +274,7 @@
 
         try:
             from eric7.EricNetwork import EricGoogleMail  # __IGNORE_WARNING__
-            from eric7.EricNetwork.EricGoogleMailHelpers import (  # noqa: I101
+            from eric7.EricNetwork.EricGoogleMailHelpers import (  # noqa: I-101
                 isClientSecretFileAvailable,
             )
 
--- a/src/eric7/Preferences/ConfigurationPages/EricServerPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/EricServerPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -38,7 +38,7 @@
         Preferences.setEricServer("AutostartShell", self.startShellCheckBox.isChecked())
 
 
-def create(dlg):  # noqa: U100
+def create(dlg):  # noqa: U-100
     """
     Module function to create the configuration page.
 
--- a/src/eric7/Preferences/ConfigurationPages/NetworkPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/NetworkPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -99,7 +99,7 @@
             "RequestDownloadFilename", self.requestFilenameCheckBox.isChecked()
         )
         if self.__webEngine:
-            from eric7.WebBrowser.Download.DownloadManager import (  # noqa: I101
+            from eric7.WebBrowser.Download.DownloadManager import (  # noqa: I-101
                 DownloadManagerRemovePolicy,
             )
 
--- a/src/eric7/Preferences/ConfigurationPages/PipPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/PipPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -59,6 +59,12 @@
         )
         self.noCondaCheckBox.setChecked(Preferences.getPip("ExcludeCondaEnvironments"))
 
+        self.initColour(
+            "DependencyHighlightColor",
+            self.searchMarkerColourButton,
+            Preferences.getPip,
+        )
+
     def save(self):
         """
         Public slot to save the pip configuration.
@@ -86,6 +92,8 @@
         )
         Preferences.setPip("ExcludeCondaEnvironments", self.noCondaCheckBox.isChecked())
 
+        self.saveColours(Preferences.setPip)
+
 
 def create(_dlg):
     """
--- a/src/eric7/Preferences/ConfigurationPages/PipPage.ui	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/PipPage.ui	Sat Mar 01 15:52:40 2025 +0100
@@ -21,13 +21,13 @@
    <item>
     <widget class="Line" name="line9_3">
      <property name="frameShape">
-      <enum>QFrame::HLine</enum>
+      <enum>QFrame::Shape::HLine</enum>
      </property>
      <property name="frameShadow">
-      <enum>QFrame::Sunken</enum>
+      <enum>QFrame::Shadow::Sunken</enum>
      </property>
      <property name="orientation">
-      <enum>Qt::Horizontal</enum>
+      <enum>Qt::Orientation::Horizontal</enum>
      </property>
     </widget>
    </item>
@@ -115,7 +115,7 @@
          <string>Enter the Safety DB cache validity time in hours (2 hours up to 7 days)</string>
         </property>
         <property name="alignment">
-         <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+         <set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
         </property>
         <property name="suffix">
          <string> hours</string>
@@ -131,7 +131,7 @@
       <item row="2" column="2">
        <spacer name="horizontalSpacer">
         <property name="orientation">
-         <enum>Qt::Horizontal</enum>
+         <enum>Qt::Orientation::Horizontal</enum>
         </property>
         <property name="sizeHint" stdset="0">
          <size>
@@ -174,9 +174,54 @@
     </widget>
    </item>
    <item>
+    <widget class="QGroupBox" name="groupBox_3">
+     <property name="title">
+      <string>Dependencies List</string>
+     </property>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <widget class="QLabel" name="label_3">
+        <property name="text">
+         <string>Search Marker Background:</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="searchMarkerColourButton">
+        <property name="minimumSize">
+         <size>
+          <width>100</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="toolTip">
+         <string>Select the color for the search highlight of the dependencies list.</string>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Orientation::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>218</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item>
     <spacer name="verticalSpacer">
      <property name="orientation">
-      <enum>Qt::Vertical</enum>
+      <enum>Qt::Orientation::Vertical</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
@@ -193,7 +238,9 @@
   <tabstop>vulnerabilityGroup</tabstop>
   <tabstop>safetyDbMirrorEdit</tabstop>
   <tabstop>validitySpinBox</tabstop>
+  <tabstop>noGlobalsCheckBox</tabstop>
   <tabstop>noCondaCheckBox</tabstop>
+  <tabstop>searchMarkerColourButton</tabstop>
  </tabstops>
  <resources/>
  <connections/>
--- a/src/eric7/Preferences/ConfigurationPages/QtPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/QtPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -35,7 +35,7 @@
             self.__virtualenvManager = ericApp().getObject("VirtualEnvManager")
             self.__standalone = False
         except KeyError:
-            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I101__
+            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I-101__
                 VirtualenvManager,
             )
 
--- a/src/eric7/Preferences/ConfigurationPages/Ui_PipPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ConfigurationPages/Ui_PipPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1,6 +1,6 @@
 # Form implementation generated from reading ui file 'src/eric7/Preferences/ConfigurationPages/PipPage.ui'
 #
-# Created by: PyQt6 UI code generator 6.7.0
+# Created by: PyQt6 UI code generator 6.8.1
 #
 # WARNING: Any manual changes made to this file will be lost when pyuic6 is
 # run again.  Do not edit this file unless you know what you are doing.
@@ -79,15 +79,32 @@
         self.noCondaCheckBox.setObjectName("noCondaCheckBox")
         self.verticalLayout_2.addWidget(self.noCondaCheckBox)
         self.verticalLayout_3.addWidget(self.groupBox)
-        spacerItem1 = QtWidgets.QSpacerItem(20, 234, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
-        self.verticalLayout_3.addItem(spacerItem1)
+        self.groupBox_3 = QtWidgets.QGroupBox(parent=PipPage)
+        self.groupBox_3.setObjectName("groupBox_3")
+        self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox_3)
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.label_3 = QtWidgets.QLabel(parent=self.groupBox_3)
+        self.label_3.setObjectName("label_3")
+        self.horizontalLayout.addWidget(self.label_3)
+        self.searchMarkerColourButton = QtWidgets.QPushButton(parent=self.groupBox_3)
+        self.searchMarkerColourButton.setMinimumSize(QtCore.QSize(100, 0))
+        self.searchMarkerColourButton.setText("")
+        self.searchMarkerColourButton.setObjectName("searchMarkerColourButton")
+        self.horizontalLayout.addWidget(self.searchMarkerColourButton)
+        spacerItem1 = QtWidgets.QSpacerItem(218, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
+        self.horizontalLayout.addItem(spacerItem1)
+        self.verticalLayout_3.addWidget(self.groupBox_3)
+        spacerItem2 = QtWidgets.QSpacerItem(20, 234, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
+        self.verticalLayout_3.addItem(spacerItem2)
 
         self.retranslateUi(PipPage)
         QtCore.QMetaObject.connectSlotsByName(PipPage)
         PipPage.setTabOrder(self.indexEdit, self.vulnerabilityGroup)
         PipPage.setTabOrder(self.vulnerabilityGroup, self.safetyDbMirrorEdit)
         PipPage.setTabOrder(self.safetyDbMirrorEdit, self.validitySpinBox)
-        PipPage.setTabOrder(self.validitySpinBox, self.noCondaCheckBox)
+        PipPage.setTabOrder(self.validitySpinBox, self.noGlobalsCheckBox)
+        PipPage.setTabOrder(self.noGlobalsCheckBox, self.noCondaCheckBox)
+        PipPage.setTabOrder(self.noCondaCheckBox, self.searchMarkerColourButton)
 
     def retranslateUi(self, PipPage):
         _translate = QtCore.QCoreApplication.translate
@@ -106,3 +123,6 @@
         self.noGlobalsCheckBox.setText(_translate("PipPage", "Don\'t show global environments"))
         self.noCondaCheckBox.setToolTip(_translate("PipPage", "Select to exclude conda managed environments"))
         self.noCondaCheckBox.setText(_translate("PipPage", "Don\'t show \'Conda\' environments"))
+        self.groupBox_3.setTitle(_translate("PipPage", "Dependencies List"))
+        self.label_3.setText(_translate("PipPage", "Search Marker Background:"))
+        self.searchMarkerColourButton.setToolTip(_translate("PipPage", "Select the color for the search highlight of the dependencies list."))
--- a/src/eric7/Preferences/ProgramsDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/ProgramsDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -282,7 +282,7 @@
 
             # 6. do the spell checking entry
             try:
-                import enchant  # __IGNORE_WARNING_I10__
+                import enchant  # __IGNORE_WARNING_I-10__
 
                 try:
                     text = os.path.dirname(enchant.__file__)
@@ -299,7 +299,7 @@
 
             # 7. do the pygments entry
             try:
-                import pygments  # __IGNORE_WARNING_I10__
+                import pygments  # __IGNORE_WARNING_I-10__
 
                 try:
                     text = os.path.dirname(pygments.__file__)
@@ -366,7 +366,7 @@
 
             # 9. do the jedi related entries
             try:
-                import jedi  # __IGNORE_WARNING_I10__
+                import jedi  # __IGNORE_WARNING_I-10__
 
                 try:
                     text = os.path.dirname(jedi.__file__)
--- a/src/eric7/Preferences/__init__.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Preferences/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1620,6 +1620,7 @@
         ),
         "VulnerabilityDbCacheValidity": 60 * 60 * 6,  # 6 hours
         "VulnerabilityCheckEnabled": True,
+        "DependencyHighlightColor": QColor(Qt.GlobalColor.yellow),
     }
 
     # defaults for MicroPython
@@ -2062,7 +2063,7 @@
             try:
                 virtualenvManager = ericApp().getObject("VirtualEnvManager")
             except KeyError:
-                from eric7.VirtualEnv.VirtualenvManager import (  # noqa: I101
+                from eric7.VirtualEnv.VirtualenvManager import (  # noqa: I-101
                     VirtualenvManager,
                 )
 
@@ -4039,6 +4040,12 @@
         )
     elif key in ("VulnerabilityDbCacheValidity",):
         return int(Prefs.settings.value("Pip/" + key, Prefs.pipDefaults[key]))
+    elif key in ("DependencyHighlightColor",):
+        col = Prefs.settings.value("Pip/" + key)
+        if col is not None:
+            return QColor(col)
+        else:
+            return Prefs.pipDefaults[key]
     else:
         return Prefs.settings.value("Pip/" + key, Prefs.pipDefaults[key])
 
@@ -4052,7 +4059,10 @@
     @param value the value to be set
     @type Any
     """
-    Prefs.settings.setValue("Pip/" + key, value)
+    if key in ("DependencyHighlightColor",):
+        Prefs.settings.setValue("Pip/" + key, value.name())
+    else:
+        Prefs.settings.setValue("Pip/" + key, value)
 
 
 def getMicroPython(key):
@@ -4365,4 +4375,4 @@
 EricPreferences.initPreferences()
 
 #
-# eflag: noqa = M201, M613
+# eflag: noqa = M201, M-613
--- a/src/eric7/Project/Project.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Project/Project.py	Sat Mar 01 15:52:40 2025 +0100
@@ -6343,7 +6343,7 @@
                     if recursiveSearch:
                         d = self.getRelativePath(ns)
                         if d not in dirs:
-                            dirs.append(d)  # noqa: M569
+                            dirs.append(d)  # noqa: M-569
                     continue
 
                 filetype = ""
@@ -8113,4 +8113,4 @@
 
 
 #
-# eflag: noqa = M601
+# eflag: noqa = M-601
--- a/src/eric7/Project/ProjectFormsBrowser.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Project/ProjectFormsBrowser.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1000,7 +1000,7 @@
         if self.hooks["generateDialogCode"] is not None:
             self.hooks["generateDialogCode"](fn)
         else:
-            from .CreateDialogCodeDialog import (  # __IGNORE_WARNING_I101__
+            from .CreateDialogCodeDialog import (  # __IGNORE_WARNING_I-101__
                 CreateDialogCodeDialog,
             )
 
--- a/src/eric7/Project/UicLoadUi5.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Project/UicLoadUi5.py	Sat Mar 01 15:52:40 2025 +0100
@@ -234,4 +234,4 @@
         sys.exit(1)
 
 #
-# eflag: noqa = M701, M801
+# eflag: noqa = M701, M-801
--- a/src/eric7/Project/UicLoadUi6.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Project/UicLoadUi6.py	Sat Mar 01 15:52:40 2025 +0100
@@ -239,4 +239,4 @@
         sys.exit(1)
 
 #
-# eflag: noqa = M701, M801
+# eflag: noqa = M701, M-801
--- a/src/eric7/QScintilla/DocstringGenerator/BaseDocstringGenerator.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/DocstringGenerator/BaseDocstringGenerator.py	Sat Mar 01 15:52:40 2025 +0100
@@ -50,7 +50,7 @@
         """
         self.editor = editor
 
-    def isFunctionStart(self, text):  # noqa: U100
+    def isFunctionStart(self, text):  # noqa: U-100
         """
         Public method to test, if a text is the start of a function or method
         definition.
@@ -63,7 +63,7 @@
         """
         return False
 
-    def hasFunctionDefinition(self, cursorPosition):  # noqa: U100
+    def hasFunctionDefinition(self, cursorPosition):  # noqa: U-100
         """
         Public method to test, if the cursor is right below a function
         definition.
@@ -75,7 +75,7 @@
         """
         return False
 
-    def isDocstringIntro(self, cursorPosition):  # noqa: U100
+    def isDocstringIntro(self, cursorPosition):  # noqa: U-100
         """
         Public function to test, if the line up to the cursor position might be
         introducing a docstring.
@@ -87,7 +87,7 @@
         """
         return False
 
-    def insertDocstring(self, cursorPosition, fromStart=True):  # noqa: U100
+    def insertDocstring(self, cursorPosition, fromStart=True):  # noqa: U-100
         """
         Public method to insert a docstring for the function at the cursor
         position.
@@ -101,7 +101,7 @@
         # just do nothing in the base class
         return
 
-    def insertDocstringFromShortcut(self, cursorPosition):  # noqa: U100
+    def insertDocstringFromShortcut(self, cursorPosition):  # noqa: U-100
         """
         Public method to insert a docstring for the function at the cursor
         position initiated via a keyboard shortcut.
--- a/src/eric7/QScintilla/DocstringGenerator/__init__.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/DocstringGenerator/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -25,13 +25,13 @@
         "Python3",
         "MicroPython",
     ):
-        from .PyDocstringGenerator import (  # __IGNORE_WARNING_I101__
+        from .PyDocstringGenerator import (  # __IGNORE_WARNING_I-101__
             PyDocstringGenerator,
         )
 
         return PyDocstringGenerator(editor)
     else:
-        from .BaseDocstringGenerator import (  # __IGNORE_WARNING_I101__
+        from .BaseDocstringGenerator import (  # __IGNORE_WARNING_I-101__
             BaseDocstringGenerator,
         )
 
--- a/src/eric7/QScintilla/Editor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Editor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -82,7 +82,7 @@
 TemplateCompletionListID = 2
 ReferencesListID = 3
 
-ReferenceItem = collections.namedtuple(  # noqa: U200
+ReferenceItem = collections.namedtuple(  # noqa: U-200
     "ReferenceItem", ["modulePath", "codeLine", "line", "column"]
 )
 
@@ -219,8 +219,8 @@
         "'": "'",
         "(": "()",
         ")": "()",
-        "{": "{}",  # __IGNORE_WARNING_M613__
-        "}": "{}",  # __IGNORE_WARNING_M613__
+        "{": "{}",  # __IGNORE_WARNING_M-613__
+        "}": "{}",  # __IGNORE_WARNING_M-613__
         "[": "[]",
         "]": "[]",
         "<": "<>",
@@ -1653,7 +1653,7 @@
         @return name of the selected pygments lexer
         @rtype str
         """
-        from pygments.lexers import get_all_lexers  # __IGNORE_WARNING_I102__
+        from pygments.lexers import get_all_lexers  # __IGNORE_WARNING_I-102__
 
         lexerList = sorted(lex[0] for lex in get_all_lexers())
         try:
@@ -7066,7 +7066,7 @@
             (defaults to None)
         @type str (optional)
         """
-        from coverage import Coverage  # __IGNORE_WARNING_I102__
+        from coverage import Coverage  # __IGNORE_WARNING_I-102__
 
         self.__codeCoverageHideAnnotations()
 
@@ -8826,7 +8826,7 @@
         if not self.checkDirty():
             return
 
-        if FileSystemUtilities.isRemoteFileName(self.fileName):  # noqa: Y108
+        if FileSystemUtilities.isRemoteFileName(self.fileName):  # noqa: Y-108
             package = (
                 self.fileName
                 if self.__remotefsInterface.isdir(self.fileName)
@@ -8965,7 +8965,7 @@
             line, index = self.getCursorPosition()
             text = self.text(line)[index - 1 : index + 1]
             matchingPairs = ["()", "[]", "{}", "<>", "''", '""']
-            # __IGNORE_WARNING_M613__
+            # __IGNORE_WARNING_M-613__
             if text in matchingPairs:
                 self.delete()
 
--- a/src/eric7/QScintilla/EditorAssembly.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/EditorAssembly.py	Sat Mar 01 15:52:40 2025 +0100
@@ -343,7 +343,7 @@
                 self.__membersBoundaries = {}
 
                 self.__globalsCombo.addItem("")
-                index = 0  # noqa: Y113
+                index = 0  # noqa: Y-113
 
                 # step 1: add modules
                 items = []
--- a/src/eric7/QScintilla/Exporters/ExporterHTML.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Exporters/ExporterHTML.py	Sat Mar 01 15:52:40 2025 +0100
@@ -523,7 +523,7 @@
                 sys.modules.pop(key)
 
         try:
-            import docutils.core  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__
+            import docutils.core  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I-10__
         except ImportError:
             EricMessageBox.critical(
                 self.editor,
@@ -559,7 +559,7 @@
         @rtype str
         """
         try:
-            import markdown  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__
+            import markdown  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I-10__
         except ImportError:
             EricMessageBox.critical(
                 self.editor,
--- a/src/eric7/QScintilla/Lexers/Lexer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/Lexer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -192,7 +192,7 @@
         """
         return []
 
-    def isCommentStyle(self, style):  # noqa: U100
+    def isCommentStyle(self, style):  # noqa: U-100
         """
         Public method to check, if a style is a comment style.
 
@@ -203,7 +203,7 @@
         """
         return True
 
-    def isStringStyle(self, style):  # noqa: U100
+    def isStringStyle(self, style):  # noqa: U-100
         """
         Public method to check, if a style is a string style.
 
@@ -247,7 +247,7 @@
         else:
             return self.keywordSetDescriptions[kwSet - 1]
 
-    def defaultKeywords(self, kwSet):  # noqa: U100
+    def defaultKeywords(self, kwSet):  # noqa: U-100
         """
         Public method to get the default keywords.
 
@@ -256,7 +256,7 @@
         @return space separated list of keywords
         @rtype str or None
         """
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
     def maximumKeywordSet(self):
         """
--- a/src/eric7/QScintilla/Lexers/LexerBash.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerBash.py	Sat Mar 01 15:52:40 2025 +0100
@@ -80,7 +80,7 @@
         return QsciLexerBash.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerBatch.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerBatch.py	Sat Mar 01 15:52:40 2025 +0100
@@ -68,7 +68,7 @@
         return QsciLexerBatch.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerCMake.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerCMake.py	Sat Mar 01 15:52:40 2025 +0100
@@ -77,7 +77,7 @@
         return QsciLexerCMake.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerCPP.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerCPP.py	Sat Mar 01 15:52:40 2025 +0100
@@ -198,7 +198,7 @@
         return 4
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerCSS.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerCSS.py	Sat Mar 01 15:52:40 2025 +0100
@@ -162,7 +162,7 @@
         return QsciLexerCSS.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerCSharp.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerCSharp.py	Sat Mar 01 15:52:40 2025 +0100
@@ -110,7 +110,7 @@
         return 4
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerCoffeeScript.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerCoffeeScript.py	Sat Mar 01 15:52:40 2025 +0100
@@ -105,7 +105,7 @@
         return 4
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerD.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerD.py	Sat Mar 01 15:52:40 2025 +0100
@@ -115,7 +115,7 @@
         return 7
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerDiff.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerDiff.py	Sat Mar 01 15:52:40 2025 +0100
@@ -63,7 +63,7 @@
         return QsciLexerDiff.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerFortran.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerFortran.py	Sat Mar 01 15:52:40 2025 +0100
@@ -90,7 +90,7 @@
         return QsciLexerFortran.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerFortran77.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerFortran77.py	Sat Mar 01 15:52:40 2025 +0100
@@ -90,7 +90,7 @@
         return QsciLexerFortran77.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerHTML.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerHTML.py	Sat Mar 01 15:52:40 2025 +0100
@@ -131,7 +131,7 @@
         return QsciLexerHTML.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerJSON.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerJSON.py	Sat Mar 01 15:52:40 2025 +0100
@@ -90,7 +90,7 @@
         return 2
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerJava.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerJava.py	Sat Mar 01 15:52:40 2025 +0100
@@ -110,7 +110,7 @@
         return 4
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerJavaScript.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerJavaScript.py	Sat Mar 01 15:52:40 2025 +0100
@@ -110,7 +110,7 @@
         return 4
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerLua.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerLua.py	Sat Mar 01 15:52:40 2025 +0100
@@ -105,7 +105,7 @@
         return 8
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerMakefile.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerMakefile.py	Sat Mar 01 15:52:40 2025 +0100
@@ -66,7 +66,7 @@
         return QsciLexerMakefile.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerMarkdown.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerMarkdown.py	Sat Mar 01 15:52:40 2025 +0100
@@ -41,7 +41,7 @@
         return QsciLexerMarkdown.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerMatlab.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerMatlab.py	Sat Mar 01 15:52:40 2025 +0100
@@ -70,7 +70,7 @@
         return QsciLexerMatlab.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerOctave.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerOctave.py	Sat Mar 01 15:52:40 2025 +0100
@@ -70,7 +70,7 @@
         return QsciLexerOctave.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerPO.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerPO.py	Sat Mar 01 15:52:40 2025 +0100
@@ -78,7 +78,7 @@
         return QsciLexerPO.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerPOV.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerPOV.py	Sat Mar 01 15:52:40 2025 +0100
@@ -86,7 +86,7 @@
         return QsciLexerPOV.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerPascal.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerPascal.py	Sat Mar 01 15:52:40 2025 +0100
@@ -102,7 +102,7 @@
         return QsciLexerPascal.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerPerl.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerPerl.py	Sat Mar 01 15:52:40 2025 +0100
@@ -102,7 +102,7 @@
         return QsciLexerPerl.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerPostScript.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerPostScript.py	Sat Mar 01 15:52:40 2025 +0100
@@ -91,7 +91,7 @@
         return 5
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerProperties.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerProperties.py	Sat Mar 01 15:52:40 2025 +0100
@@ -77,7 +77,7 @@
         return QsciLexerProperties.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerPygments.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerPygments.py	Sat Mar 01 15:52:40 2025 +0100
@@ -652,7 +652,7 @@
         @return string giving the keywords or None
         @rtype str
         """
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
     def commentStr(self):
         """
--- a/src/eric7/QScintilla/Lexers/LexerQSS.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerQSS.py	Sat Mar 01 15:52:40 2025 +0100
@@ -180,7 +180,7 @@
         return "QSS"
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerRuby.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerRuby.py	Sat Mar 01 15:52:40 2025 +0100
@@ -97,7 +97,7 @@
         return QsciLexerRuby.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerSQL.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerSQL.py	Sat Mar 01 15:52:40 2025 +0100
@@ -109,7 +109,7 @@
         return 8
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerTCL.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerTCL.py	Sat Mar 01 15:52:40 2025 +0100
@@ -102,7 +102,7 @@
         return 9
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerTeX.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerTeX.py	Sat Mar 01 15:52:40 2025 +0100
@@ -222,7 +222,7 @@
         return None
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerVHDL.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerVHDL.py	Sat Mar 01 15:52:40 2025 +0100
@@ -94,7 +94,7 @@
         return 7
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerXML.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerXML.py	Sat Mar 01 15:52:40 2025 +0100
@@ -129,7 +129,7 @@
         return QsciLexerXML.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/Lexers/LexerYAML.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Lexers/LexerYAML.py	Sat Mar 01 15:52:40 2025 +0100
@@ -75,7 +75,7 @@
         return QsciLexerYAML.keywords(self, kwSet)
 
 
-def createLexer(variant, parent=None):  # noqa: U100
+def createLexer(variant, parent=None):  # noqa: U-100
     """
     Function to instantiate a lexer object.
 
--- a/src/eric7/QScintilla/MiniEditor.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/MiniEditor.py	Sat Mar 01 15:52:40 2025 +0100
@@ -73,8 +73,8 @@
         "'": "'",
         "(": "()",
         ")": "()",
-        "{": "{}",  # __IGNORE_WARNING_M613__
-        "}": "{}",  # __IGNORE_WARNING_M613__
+        "{": "{}",  # __IGNORE_WARNING_M-613__
+        "}": "{}",  # __IGNORE_WARNING_M-613__
         "[": "[]",
         "]": "[]",
         "<": "<>",
@@ -114,7 +114,7 @@
             line, index = self.getCursorPosition()
             text = self.text(line)[index - 1 : index + 1]
             matchingPairs = ["()", "[]", "{}", "<>", "''", '""']
-            # __IGNORE_WARNING_M613__
+            # __IGNORE_WARNING_M-613__
             if text in matchingPairs:
                 self.delete()
 
@@ -3858,7 +3858,7 @@
         @return name of the selected pygments lexer
         @rtype str
         """
-        from pygments.lexers import get_all_lexers  # __IGNORE_WARNING_I102__
+        from pygments.lexers import get_all_lexers  # __IGNORE_WARNING_I-102__
 
         lexerList = sorted(lex[0] for lex in get_all_lexers())
         try:
--- a/src/eric7/QScintilla/Shell.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QScintilla/Shell.py	Sat Mar 01 15:52:40 2025 +0100
@@ -2720,4 +2720,4 @@
 
 
 #
-# eflag: noqa = M601
+# eflag: noqa = M-601
--- a/src/eric7/QtHelpInterface/QtHelpDocumentationSettingsWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/QtHelpInterface/QtHelpDocumentationSettingsWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -44,7 +44,7 @@
                 ericApp().getObject("PluginManager").getPluginQtHelpFiles()
             )
         except KeyError:
-            from eric7.PluginManager.PluginManager import (  # __IGNORE_WARNING_I101__
+            from eric7.PluginManager.PluginManager import (  # __IGNORE_WARNING_I-101__
                 PluginManager,
             )
 
--- a/src/eric7/RemoteServer/EricServer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/RemoteServer/EricServer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -196,7 +196,7 @@
             except UnicodeDecodeError:
                 msgClientId = str(bytes(msgClientIdBytes))
             if msgClientId != self.__clientId:
-                print(f"Received illegal client ID '{msgClientId}'.")  # noqa: M801
+                print(f"Received illegal client ID '{msgClientId}'.")  # noqa: M-801
                 return {}
 
         header = self.__receiveBytes(struct.calcsize(b"!II"), sock)
@@ -223,7 +223,7 @@
             return {}
 
         jsonStr = data.decode("utf8", "backslashreplace")
-        # - print("Eric Server Receive:", jsonStr)  # for debugging  # noqa: M801
+        # - print("Eric Server Receive:", jsonStr)  # for debugging  # noqa: M-801
         try:
             return json.loads(jsonStr.strip())
         except (TypeError, ValueError) as err:
@@ -302,7 +302,7 @@
         self.__socket.listen(0)
         self.__socket.setblocking(False)
         address = self.__socket.getsockname()
-        print(  # noqa: M801
+        print(  # noqa: M-801
             f"Listening for 'eric-ide' connections on {address[0]}, port {address[1]}"
         )
         data = types.SimpleNamespace(
@@ -326,7 +326,7 @@
         """
         self.__closeIdeConnection(shutdown=True)
 
-        print("Stop listening for 'eric-ide' connections.")  # noqa: M801
+        print("Stop listening for 'eric-ide' connections.")  # noqa: M-801
         if self.__socket is not None:
             self.__socket.shutdown(socket.SHUT_RDWR)
             self.__socket.close()
@@ -343,7 +343,7 @@
         connection, address = sock.accept()  # Should be ready to read.
         if self.__connection is None:
             print(f"'eric-ide' connection from {address[0]}, port {address[1]}")
-            # noqa: M801
+            # noqa: M-801
             self.__connection = connection
             self.__connection.settimeout(10)
             data = types.SimpleNamespace(
@@ -354,7 +354,7 @@
 
             self.__unregisterIdeSocket()
         else:
-            print(  # noqa: M801
+            print(  # noqa: M-801
                 f"'eric-ide' connection from {address[0]}, port {address[1]} rejected"
             )
             connection.close()
@@ -370,13 +370,13 @@
             self.__selector.unregister(self.__connection)
             try:
                 address = self.__connection.getpeername()
-                print(  # noqa: M801
+                print(  # noqa: M-801
                     f"Closing 'eric-ide' connection to {address[0]}, port {address[1]}."
                 )
                 self.__connection.shutdown(socket.SHUT_RDWR)
                 self.__connection.close()
             except OSError:
-                print("'eric-ide' connection gone.")  # noqa: M801
+                print("'eric-ide' connection gone.")  # noqa: M-801
             self.__connection = None
 
             self.__debuggerRequestHandler.shutdownClients()
@@ -448,8 +448,8 @@
                 tbinfofile.seek(0)
                 tbinfo = tbinfofile.read()
 
-                print("Stopping due to an exception.\nDetails:")  # noqa: M801
-                print(f"{str(exctype)} / {str(excval)} / {tbinfo}")  # noqa: M801
+                print("Stopping due to an exception.\nDetails:")  # noqa: M-801
+                print(f"{str(exctype)} / {str(excval)} / {tbinfo}")  # noqa: M-801
 
                 self.__shouldStop = True
                 cleanExit = False
@@ -539,7 +539,7 @@
                 params={"Category": category},
             )
 
-    def __handleEchoRequest(self, request, params, reqestUuid):  # noqa: U100
+    def __handleEchoRequest(self, request, params, reqestUuid):  # noqa: U-100
         """
         Private method to handle an 'Echo' request.
 
@@ -558,7 +558,7 @@
             reqestUuid=reqestUuid,
         )
 
-    def __handleServerRequest(self, request, params, reqestUuid):  # noqa: U100
+    def __handleServerRequest(self, request, params, reqestUuid):  # noqa: U-100
         """
         Private method to handle a 'Server' request.
 
--- a/src/eric7/RemoteServer/EricServerDebuggerRequestHandler.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/RemoteServer/EricServerDebuggerRequestHandler.py	Sat Mar 01 15:52:40 2025 +0100
@@ -86,7 +86,7 @@
         self.__socket.listen()
         self.__socket.setblocking(False)
         address = self.__socket.getsockname()
-        print(  # noqa: M801
+        print(  # noqa: M-801
             f"Listening for 'Debug Client' connections on"
             f" {address[0]}, port {address[1]}"
         )
@@ -110,7 +110,7 @@
         """
         connection, address = sock.accept()  # Should be ready to read
         print(f"'Debug Client' connection from {address[0]}, port {address[1]}")
-        # noqa: M801
+        # noqa: M-801
         connection.setblocking(False)
         self.__pendingConnections.append(connection)
 
@@ -180,7 +180,7 @@
 
         with contextlib.suppress(OSError):
             address = sock.getpeername()
-            print(  # noqa: M801
+            print(  # noqa: M-801
                 f"'Debug Client' connection from {address[0]}, port {address[1]}"
                 f" closed."
             )
@@ -345,7 +345,7 @@
         except (OSError, ValueError, subprocess.SubprocessError) as err:
             self.sendError(request="StartClientError", errorMessage=str(err))
 
-    def __stopClient(self, params):  # noqa: U100
+    def __stopClient(self, params):  # noqa: U-100
         """
         Private method to stop the current debug client process.
 
@@ -377,7 +377,7 @@
             for sock in self.__connections.values():
                 self._server.sendJsonCommand(jsonStr, sock)
         else:
-            try:  # noqa: Y105
+            try:  # noqa: Y-105
                 sock = self.__connections[debuggerId]
                 self._server.sendJsonCommand(jsonStr, sock)
             except KeyError:
--- a/src/eric7/RemoteServer/EricServerFileSystemRequestHandler.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/RemoteServer/EricServerFileSystemRequestHandler.py	Sat Mar 01 15:52:40 2025 +0100
@@ -82,7 +82,7 @@
     ## File system related methods below
     ############################################################################
 
-    def __getPathSeparator(self, params):  # noqa: U100
+    def __getPathSeparator(self, params):  # noqa: U-100
         """
         Private method to report the path separator.
 
@@ -111,7 +111,7 @@
                 "error": str(err),
             }
 
-    def __getcwd(self, params):  # noqa: U100
+    def __getcwd(self, params):  # noqa: U-100
         """
         Private method to report the current working directory.
 
--- a/src/eric7/RemoteServerInterface/EricServerDebuggerInterface.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/RemoteServerInterface/EricServerDebuggerInterface.py	Sat Mar 01 15:52:40 2025 +0100
@@ -134,7 +134,7 @@
         """
         self.debugClientDisconnected.emit(params["debugger_id"])
 
-    def __handleLastDbgClientExited(self, params):  # noqa: U100
+    def __handleLastDbgClientExited(self, params):  # noqa: U-100
         """
         Private method to handle a report of the eric-ide server, that the last
         debug client has disconnected.
@@ -145,7 +145,7 @@
         self.__clientStarted = False
         self.lastClientExited.emit()
 
-    def __handleMainClientExited(self, params):  # noqa: U100
+    def __handleMainClientExited(self, params):  # noqa: U-100
         """
         Private method to handle the main client exiting.
 
@@ -207,7 +207,7 @@
         if self.__serverInterface.isServerConnected() and self.__clientStarted:
             loop = QEventLoop()
 
-            def callback(reply, params):  # noqa: U100
+            def callback(reply, params):  # noqa: U-100
                 """
                 Function to handle the server reply
 
--- a/src/eric7/RemoteServerInterface/EricServerFileDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/RemoteServerInterface/EricServerFileDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -59,7 +59,7 @@
 
     IsDirectoryRole = Qt.ItemDataRole.UserRole
 
-    def __init__(self, parent=None, caption="", directory="", filter=""):  # noqa: M132
+    def __init__(self, parent=None, caption="", directory="", filter=""):  # noqa: M-132
         """
         Constructor
 
@@ -198,7 +198,7 @@
         self.filterCombo.clear()
         self.filterCombo.addItems([f for f in filters if f])
 
-    def setNameFilter(self, filter):  # noqa: M132
+    def setNameFilter(self, filter):  # noqa: M-132
         """
         Public method to set the current name filter.
 
--- a/src/eric7/RemoteServerInterface/EricServerFileSystemInterface.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/RemoteServerInterface/EricServerFileSystemInterface.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1440,7 +1440,7 @@
                 f"Remote Cache Size: {len(_RemoteFsCache)} entries"
             )
         except OSError as err:
-            print("Error in 'populateFsCache()':", str(err))  # noqa: M801
+            print("Error in 'populateFsCache()':", str(err))  # noqa: M-801
 
     def removeFromFsCache(self, directory):
         """
--- a/src/eric7/Snapshot/SnapWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Snapshot/SnapWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -62,7 +62,7 @@
             self.__grabber = None
             supportedModes = []
         else:
-            from .SnapshotDefaultGrabber import (  # __IGNORE_WARNING_I101__
+            from .SnapshotDefaultGrabber import (  # __IGNORE_WARNING_I-101__
                 SnapshotDefaultGrabber,
             )
 
--- a/src/eric7/SystemUtilities/OSUtilities.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/SystemUtilities/OSUtilities.py	Sat Mar 01 15:52:40 2025 +0100
@@ -165,7 +165,7 @@
     @return result of the kill
     @rtype bool
     """
-    import win32api  # __IGNORE_WARNING_I102__
+    import win32api  # __IGNORE_WARNING_I-102__
 
     handle = win32api.OpenProcess(1, 0, pid)
     return 0 != win32api.TerminateProcess(handle, 0)
@@ -179,7 +179,7 @@
     @rtype str
     """
     try:
-        import win32api  # __IGNORE_WARNING_I10__
+        import win32api  # __IGNORE_WARNING_I-10__
 
         return win32api.GetUserName()
     except ImportError:
--- a/src/eric7/SystemUtilities/PythonUtilities.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/SystemUtilities/PythonUtilities.py	Sat Mar 01 15:52:40 2025 +0100
@@ -166,9 +166,9 @@
     @rtype list of str
     """
     try:
-        import winreg  # noqa: I101, I103
+        import winreg  # noqa: I-101, I-103
     except ImportError:
-        import _winreg as winreg  # noqa: I101, I102
+        import _winreg as winreg  # noqa: I-101, I-102
 
     def getExePath(branch, access, versionStr):
         with contextlib.suppress(WindowsError, OSError):
--- a/src/eric7/SystemUtilities/QtUtilities.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/SystemUtilities/QtUtilities.py	Sat Mar 01 15:52:40 2025 +0100
@@ -94,7 +94,7 @@
     if not binPath:
         with contextlib.suppress(ImportError):
             # if qt6-applications is not installed just go to the next step
-            import qt6_applications  # __IGNORE_WARNING_I10__
+            import qt6_applications  # __IGNORE_WARNING_I-10__
 
             if libexec:
                 binPath = os.path.join(
--- a/src/eric7/Templates/TemplatePropertiesDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Templates/TemplatePropertiesDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -131,7 +131,7 @@
                     """ entered.</p>"""
                     """<p>If you need a single $-character in a template,"""
                     """ which is not used to enclose a variable, type"""
-                    """ $$(two dollar characters) instead. They will"""
+                    """ $$ (two dollar characters) instead. They will"""
                     """ automatically be replaced with a single $-character"""
                     """ when you use the template.</p>"""
                     """<p>If you want a variables contents to be treated"""
--- a/src/eric7/Templates/TemplateViewer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Templates/TemplateViewer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -695,7 +695,7 @@
         """
         project = ericApp().getObject("Project")
         editor = self.viewmanager.activeWindow()
-        now = datetime.datetime.now()  # noqa: M305
+        now = datetime.datetime.now()  # noqa: M-305
         sepchar = Preferences.getTemplates("SeparatorChar")
         keyfmt = sepchar + "{0}" + sepchar
         varValues = {
--- a/src/eric7/Testing/Interfaces/PytestRunner.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Testing/Interfaces/PytestRunner.py	Sat Mar 01 15:52:40 2025 +0100
@@ -176,7 +176,7 @@
             }
         )
 
-    def pytest_runtest_logstart(self, nodeid, location):  # noqa: U100
+    def pytest_runtest_logstart(self, nodeid, location):  # noqa: U-100
         """
         Public method called by pytest before running a test.
 
@@ -268,7 +268,7 @@
 
         self.__writer.write(data)
 
-    def pytest_sessionstart(self, session):  # noqa: U100
+    def pytest_sessionstart(self, session):  # noqa: U-100
         """
         Public method called by pytest before performing collection and
         entering the run test loop.
@@ -279,7 +279,7 @@
         self.__totalStartTime = time.monotonic_ns()
         self.__testsRun = 0
 
-    def pytest_sessionfinish(self, session, exitstatus):  # noqa: U100
+    def pytest_sessionfinish(self, session, exitstatus):  # noqa: U-100
         """
         Public method called by pytest after the whole test run finished.
 
@@ -306,7 +306,7 @@
     plugins.
     """
     try:
-        import pytest  # __IGNORE_WARNING_I10__
+        import pytest  # __IGNORE_WARNING_I-10__
 
         versions = {
             "name": "pytest",
@@ -331,7 +331,7 @@
     Function to determine the defined markers and their descriptions.
     """
     try:
-        import pytest  # __IGNORE_WARNING_I10__
+        import pytest  # __IGNORE_WARNING_I-10__
 
         # --capture=sys needed on Windows to avoid
         # ValueError: saved filedescriptor not valid anymore
@@ -370,4 +370,4 @@
     sys.exit(42)
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Testing/Interfaces/TestExecutorBase.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Testing/Interfaces/TestExecutorBase.py	Sat Mar 01 15:52:40 2025 +0100
@@ -153,7 +153,7 @@
 
         return False
 
-    def getVersions(self, interpreter):  # noqa: U100
+    def getVersions(self, interpreter):  # noqa: U-100
         """
         Public method to get the test framework version and version information
         of its installed plugins.
@@ -166,7 +166,7 @@
         """
         return {}
 
-    def hasCoverage(self, interpreter):  # noqa: U100
+    def hasCoverage(self, interpreter):  # noqa: U-100
         """
         Public method to check, if the collection of coverage data is available.
 
@@ -177,7 +177,7 @@
         """
         return False
 
-    def supportsPatterns(self, interpreter):  # noqa: U100
+    def supportsPatterns(self, interpreter):  # noqa: U-100
         """
         Public method to indicate the support for test filtering using test name
         patterns or a test name pattern expression.
@@ -189,7 +189,7 @@
         """
         return False
 
-    def supportsMarkers(self, interpreter):  # noqa: U100
+    def supportsMarkers(self, interpreter):  # noqa: U-100
         """
         Public method to indicate the support for test filtering using markers and/or
         marker expressions.
@@ -201,7 +201,7 @@
         """
         return False
 
-    def getMarkers(self, interpreter, workdir):  # noqa: U100
+    def getMarkers(self, interpreter, workdir):  # noqa: U-100
         """
         Public method to get the list of defined markers.
 
--- a/src/eric7/Testing/Interfaces/UnittestRunner.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Testing/Interfaces/UnittestRunner.py	Sat Mar 01 15:52:40 2025 +0100
@@ -371,7 +371,7 @@
             ),
         )
         try:
-            from coverage import Coverage  # __IGNORE_WARNING_I10__
+            from coverage import Coverage  # __IGNORE_WARNING_I-10__
 
             cover = Coverage(data_file=covDataFile)
             if coverageErase:
@@ -489,4 +489,4 @@
     sys.exit(42)
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Testing/TestResultsTree.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Testing/TestResultsTree.py	Sat Mar 01 15:52:40 2025 +0100
@@ -268,7 +268,7 @@
         @type int
         @param order sort order
         @type Qt.SortOrder
-        """  # __IGNORE_WARNING_D234r__
+        """  # __IGNORE_WARNING_D-234r__
 
         def durationKey(result):
             """
--- a/src/eric7/Testing/TestingWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Testing/TestingWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -205,7 +205,7 @@
             self.__project.projectClosed.connect(self.__projectClosed)
         except KeyError:
             # we were called as a standalone application
-            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I101__
+            from eric7.VirtualEnv.VirtualenvManager import (  # __IGNORE_WARNING_I-101__
                 VirtualenvManager,
             )
 
--- a/src/eric7/Themes/dark_1.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_1.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -91,6 +91,7 @@
     "IRC/OwnNickColour": "#000000",
     "IRC/ServerMessageColour": "#91640a",
     "IRC/TimestampColour": "#709070",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
@@ -2483,4 +2484,4 @@
     "contents": "",
     "name": ""
   }
-}
\ No newline at end of file
+}
--- a/src/eric7/Themes/dark_2.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_2.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -91,6 +91,7 @@
     "IRC/OwnNickColour": "#000000",
     "IRC/ServerMessageColour": "#91640a",
     "IRC/TimestampColour": "#709070",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
@@ -2483,4 +2484,4 @@
     "contents": "",
     "name": ""
   }
-}
\ No newline at end of file
+}
--- a/src/eric7/Themes/dark_blue.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_blue.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -85,6 +85,7 @@
     "IRC/OwnNickColour": "#ffffff",
     "IRC/ServerMessageColour": "#e6b74b",
     "IRC/TimestampColour": "#85ab85",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
--- a/src/eric7/Themes/dark_blue_with_stylesheet.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_blue_with_stylesheet.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -85,6 +85,7 @@
     "IRC/OwnNickColour": "#ffffff",
     "IRC/ServerMessageColour": "#e6b74b",
     "IRC/TimestampColour": "#85ab85",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
--- a/src/eric7/Themes/dark_gray.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_gray.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -85,6 +85,7 @@
     "IRC/OwnNickColour": "#ffffff",
     "IRC/ServerMessageColour": "#e6b74b",
     "IRC/TimestampColour": "#85ab85",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
--- a/src/eric7/Themes/dark_gray_with_stylesheet.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_gray_with_stylesheet.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -85,6 +85,7 @@
     "IRC/OwnNickColour": "#ffffff",
     "IRC/ServerMessageColour": "#e6b74b",
     "IRC/TimestampColour": "#85ab85",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
--- a/src/eric7/Themes/dark_green.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_green.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -85,6 +85,7 @@
     "IRC/OwnNickColour": "#ffffff",
     "IRC/ServerMessageColour": "#e6b74b",
     "IRC/TimestampColour": "#85ab85",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
--- a/src/eric7/Themes/dark_green_with_stylesheet.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/dark_green_with_stylesheet.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -85,6 +85,7 @@
     "IRC/OwnNickColour": "#ffffff",
     "IRC/ServerMessageColour": "#e6b74b",
     "IRC/TimestampColour": "#85ab85",
+    "Pip/DependencyHighlightColor": "#808000",
     "Project/Colour/Highlighted": "#e1a4ff",
     "Project/Colour/VcsAdded": "#005e98",
     "Project/Colour/VcsConflict": "#880000",
--- a/src/eric7/Themes/light.ethj	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Themes/light.ethj	Sat Mar 01 15:52:40 2025 +0100
@@ -91,6 +91,7 @@
     "IRC/OwnNickColour": "#000000",
     "IRC/ServerMessageColour": "#91640a",
     "IRC/TimestampColour": "#709070",
+    "Pip/DependencyHighlightColor": "#ffff00",
     "Project/Colour/Highlighted": "#7000a0",
     "Project/Colour/VcsAdded": "#009dff",
     "Project/Colour/VcsConflict": "#ff0000",
@@ -2483,4 +2484,4 @@
     "contents": "",
     "name": ""
   }
-}
\ No newline at end of file
+}
--- a/src/eric7/Toolbox/SingleApplication.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Toolbox/SingleApplication.py	Sat Mar 01 15:52:40 2025 +0100
@@ -63,7 +63,7 @@
         while self.qsock and self.qsock.canReadLine():
             line = bytes(self.qsock.readLine()).decode()
 
-            ##print(line)          ## debug         # __IGNORE_WARNING_M891__
+            ##print(line)          ## debug         # __IGNORE_WARNING_M-891__
 
             try:
                 commandDict = json.loads(line.strip())
--- a/src/eric7/Toolbox/Startup.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Toolbox/Startup.py	Sat Mar 01 15:52:40 2025 +0100
@@ -218,7 +218,7 @@
     app.setQuitOnLastWindowClosed(quitOnLastWindowClosed)
 
     # the following code depends upon a valid application object
-    from eric7 import Preferences  # __IGNORE_WARNING_I101__
+    from eric7 import Preferences  # __IGNORE_WARNING_I-101__
 
     # set the application style sheet
     app.setStyleSheetFile(Preferences.getUI("StyleSheet"))
@@ -246,7 +246,7 @@
 
     if installErrorHandler:
         # generate a graphical error handler
-        from eric7.EricWidgets import EricErrorMessage  # __IGNORE_WARNING_I101__
+        from eric7.EricWidgets import EricErrorMessage  # __IGNORE_WARNING_I-101__
 
         eMsg = EricErrorMessage.qtHandler(
             minSeverity=Preferences.getUI("MinimumMessageTypeSeverity")
@@ -257,4 +257,4 @@
 
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Tools/TrayStarter.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Tools/TrayStarter.py	Sat Mar 01 15:52:40 2025 +0100
@@ -630,7 +630,7 @@
 
         # webengine (chromium) version
         with contextlib.suppress(ImportError):
-            from eric7.WebBrowser.Tools import (  # __IGNORE_WARNING_I101__
+            from eric7.WebBrowser.Tools import (  # __IGNORE_WARNING_I-101__
                 WebBrowserTools,
             )
 
--- a/src/eric7/Tools/webBrowserSupport.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Tools/webBrowserSupport.py	Sat Mar 01 15:52:40 2025 +0100
@@ -22,6 +22,6 @@
     )
     else "None"
 )
-print(variant)  # noqa: M801
+print(variant)  # noqa: M-801
 
 sys.exit(0)
--- a/src/eric7/UI/BrowserModel.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/BrowserModel.py	Sat Mar 01 15:52:40 2025 +0100
@@ -418,7 +418,7 @@
             self._addItem(node, itm)
             self.endInsertRows()
 
-    def entryDeleted(self, path, isDir=False):  # noqa: U100
+    def entryDeleted(self, path, isDir=False):  # noqa: U-100
         """
         Public method to handle the deletion of a file or directory.
 
@@ -1346,7 +1346,7 @@
         else:
             self.icon = EricPixmapCache.getIcon("dirClosed")
 
-    def setName(self, dinfo, full=True):  # noqa: U100
+    def setName(self, dinfo, full=True):  # noqa: U-100
         """
         Public method to set the directory name.
 
@@ -1656,7 +1656,7 @@
         else:
             self.icon = EricPixmapCache.getIcon(pixName)
 
-    def setName(self, finfo, full=True):  # noqa: U100
+    def setName(self, finfo, full=True):  # noqa: U-100
         """
         Public method to set the directory name.
 
--- a/src/eric7/UI/CodeDocumentationViewer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/CodeDocumentationViewer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -89,10 +89,10 @@
         self.__verticalLayout.setContentsMargins(0, 0, 0, 0)
 
         try:
-            from PyQt6.QtWebEngineCore import (  # __IGNORE_WARNING_I10__
+            from PyQt6.QtWebEngineCore import (  # __IGNORE_WARNING_I-10__
                 QWebEngineSettings,
             )
-            from PyQt6.QtWebEngineWidgets import (  # __IGNORE_WARNING_I10__
+            from PyQt6.QtWebEngineWidgets import (  # __IGNORE_WARNING_I-10__
                 QWebEngineView,
             )
 
--- a/src/eric7/UI/CompareDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/CompareDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -46,7 +46,7 @@
             <li>line b -- line of sequence b</li>
         </ul>
     @ytype tuple of (str, str, str, str, str)
-    """  # __IGNORE_WARNING_D234r__
+    """  # __IGNORE_WARNING_D-234r__
 
     def removeMarkers(line):
         """
--- a/src/eric7/UI/EmailDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/EmailDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -162,7 +162,7 @@
         """
         if self.__helpDialog is None:
             try:
-                from eric7.EricNetwork.EricGoogleMail import (  # noqa: I101
+                from eric7.EricNetwork.EricGoogleMail import (  # noqa: I-101
                     GoogleMailHelp,
                 )
 
@@ -418,7 +418,7 @@
         @type email.mime.text.MIMEBase
         """
         try:
-            from eric7.EricNetwork.EricGoogleMail import (  # __IGNORE_WARNING_I101__
+            from eric7.EricNetwork.EricGoogleMail import (  # __IGNORE_WARNING_I-101__
                 EricGoogleMail,
             )
 
--- a/src/eric7/UI/FindFileWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/FindFileWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -208,7 +208,7 @@
         # a list of file name patterns as value
         self.__filters = json.loads(
             Preferences.getSettings().value("FindFileWidget/FileFilters", "{}")
-            # noqa: M613
+            # noqa: M-613
         )
         for fileFilter in sorted(self.__filters):
             self.filterComboBox.addItem(
@@ -221,7 +221,7 @@
         # a list of file name patterns as value
         self.__excludeFilters = json.loads(
             Preferences.getSettings().value("FindFileWidget/ExcludeFileFilters", "{}")
-            # noqa: M613
+            # noqa: M-613
         )
         for fileFilter in sorted(self.__excludeFilters):
             self.excludeFilterComboBox.addItem(
--- a/src/eric7/UI/Previewer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/Previewer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -222,7 +222,7 @@
 
             if language in ["HTML", "Markdown", "ReST"]:
                 if self.__htmlPreviewer is None:
-                    from .Previewers.PreviewerHTML import (  # __IGNORE_WARNING_I101__
+                    from .Previewers.PreviewerHTML import (  # __IGNORE_WARNING_I-101__
                         PreviewerHTML,
                     )
 
@@ -232,7 +232,7 @@
                 self.__htmlPreviewer.processEditor(editor)
             elif language == "QSS":
                 if self.__qssPreviewer is None:
-                    from .Previewers.PreviewerQSS import (  # __IGNORE_WARNING_I101__
+                    from .Previewers.PreviewerQSS import (  # __IGNORE_WARNING_I-101__
                         PreviewerQSS,
                     )
 
--- a/src/eric7/UI/Previewers/MarkdownExtensions.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/Previewers/MarkdownExtensions.py	Sat Mar 01 15:52:40 2025 +0100
@@ -21,7 +21,7 @@
 ######################################################################
 
 MermaidRegex = re.compile(r"^(?P<mermaid_sign>[\~\`]){3}[ \t]*[Mm]ermaid[ \t]*$")
-MermaidRegexFullText = re.compile(r"([\~\`]){3}[ \t]*[Mm]ermaid")  # noqa:U200
+MermaidRegexFullText = re.compile(r"([\~\`]){3}[ \t]*[Mm]ermaid")  # noqa:U-200
 
 
 class MermaidPreprocessor(Preprocessor):
--- a/src/eric7/UI/Previewers/PreviewerHTML.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/Previewers/PreviewerHTML.py	Sat Mar 01 15:52:40 2025 +0100
@@ -60,7 +60,7 @@
         self.__previewAvailable = True
 
         try:
-            from PyQt6.QtWebEngineWidgets import (  # __IGNORE_WARNING_I10__
+            from PyQt6.QtWebEngineWidgets import (  # __IGNORE_WARNING_I-10__
                 QWebEngineView,
             )
 
@@ -695,8 +695,8 @@
                 sys.modules.pop(key)
 
         try:
-            import docutils.core  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__
-            import docutils.utils  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__
+            import docutils.core  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I-10__
+            import docutils.utils  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I-10__
         except ImportError:
             return self.tr(
                 """<p>ReStructuredText preview requires the"""
@@ -742,7 +742,7 @@
         @rtype str
         """
         try:
-            import markdown  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I10__
+            import markdown  # __IGNORE_EXCEPTION__ __IGNORE_WARNING_I-10__
         except ImportError:
             return self.tr(
                 """<p>Markdown preview requires the <b>Markdown</b> """
@@ -752,7 +752,7 @@
                 """installation instructions.</a></p>"""
             )
 
-        from . import MarkdownExtensions, PreviewerHTMLStyles  # __IGNORE_WARNING_I101__
+        from . import MarkdownExtensions, PreviewerHTMLStyles  # noqa: I-101
 
         extensions = []
 
--- a/src/eric7/UI/SearchWidget.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/SearchWidget.py	Sat Mar 01 15:52:40 2025 +0100
@@ -43,13 +43,13 @@
         super().__init__(parent)
 
         if showLine:
-            from .Ui_SearchWidgetLine import (  # __IGNORE_WARNING_I101__
+            from .Ui_SearchWidgetLine import (  # __IGNORE_WARNING_I-101__
                 Ui_SearchWidgetLine,
             )
 
             self.__ui = Ui_SearchWidgetLine()
         else:
-            from .Ui_SearchWidget import Ui_SearchWidget  # __IGNORE_WARNING_I101__
+            from .Ui_SearchWidget import Ui_SearchWidget  # __IGNORE_WARNING_I-101__
 
             self.__ui = Ui_SearchWidget()
         self.__ui.setupUi(self)
--- a/src/eric7/UI/UserInterface.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/UI/UserInterface.py	Sat Mar 01 15:52:40 2025 +0100
@@ -338,7 +338,7 @@
         )
 
         with contextlib.suppress(ImportError, AttributeError):
-            from eric7.EricWidgets.EricSpellCheckedTextEdit import (  # noqa: I101
+            from eric7.EricWidgets.EricSpellCheckedTextEdit import (  # noqa: I-101
                 SpellCheckMixin,
             )
 
@@ -850,7 +850,7 @@
         if Preferences.getUI("ShowTemplateViewer"):
             # Create the template viewer part of the user interface
             logging.getLogger(__name__).debug("Creating Template Viewer...")
-            from eric7.Templates.TemplateViewer import TemplateViewer  # noqa: I101
+            from eric7.Templates.TemplateViewer import TemplateViewer  # noqa: I-101
 
             self.templateViewer = TemplateViewer(None, self.viewmanager)
         else:
@@ -860,7 +860,7 @@
         if Preferences.getUI("ShowFileBrowser"):
             # Create the file browser
             logging.getLogger(__name__).debug("Creating File Browser...")
-            from .Browser import Browser  # noqa: I101
+            from .Browser import Browser  # noqa: I-101
 
             self.browser = Browser(self.__ericServerInterface)
         else:
@@ -870,7 +870,7 @@
         if Preferences.getUI("ShowSymbolsViewer"):
             # Create the symbols viewer
             logging.getLogger(__name__).debug("Creating Symbols Viewer...")
-            from .SymbolsWidget import SymbolsWidget  # noqa: I101
+            from .SymbolsWidget import SymbolsWidget  # noqa: I-101
 
             self.symbolsViewer = SymbolsWidget()
         else:
@@ -880,7 +880,7 @@
         if Preferences.getUI("ShowCodeDocumentationViewer"):
             # Create the code documentation viewer
             logging.getLogger(__name__).debug("Creating Code Documentation Viewer...")
-            from .CodeDocumentationViewer import CodeDocumentationViewer  # noqa: I101
+            from .CodeDocumentationViewer import CodeDocumentationViewer  # noqa: I-101
 
             self.codeDocumentationViewer = CodeDocumentationViewer(self)
         else:
@@ -890,7 +890,7 @@
         if Preferences.getUI("ShowPyPIPackageManager"):
             # Create the PyPI package manager
             logging.getLogger(__name__).debug("Creating PyPI Package Manager...")
-            from eric7.PipInterface.PipPackagesWidget import (  # noqa: I101
+            from eric7.PipInterface.PipPackagesWidget import (  # noqa: I-101
                 PipPackagesWidget,
             )
 
@@ -902,7 +902,7 @@
         if Preferences.getUI("ShowCondaPackageManager"):
             # Create the conda package manager
             logging.getLogger(__name__).debug("Creating Conda Package Manager...")
-            from eric7.CondaInterface.CondaPackagesWidget import (  # noqa: I101
+            from eric7.CondaInterface.CondaPackagesWidget import (  # noqa: I-101
                 CondaPackagesWidget,
             )
 
@@ -914,7 +914,7 @@
         if Preferences.getUI("ShowCooperation"):
             # Create the chat part of the user interface
             logging.getLogger(__name__).debug("Creating Chat Widget...")
-            from eric7.Cooperation.ChatWidget import ChatWidget  # noqa: I101
+            from eric7.Cooperation.ChatWidget import ChatWidget  # noqa: I-101
 
             self.cooperation = ChatWidget(self)
         else:
@@ -924,7 +924,7 @@
         if Preferences.getUI("ShowIrc"):
             # Create the IRC part of the user interface
             logging.getLogger(__name__).debug("Creating IRC Widget...")
-            from eric7.Network.IRC.IrcWidget import IrcWidget  # noqa: I101
+            from eric7.Network.IRC.IrcWidget import IrcWidget  # noqa: I-101
 
             self.irc = IrcWidget(self)
         else:
@@ -934,7 +934,7 @@
         if Preferences.getUI("ShowMicroPython"):
             # Create the MicroPython part of the user interface
             logging.getLogger(__name__).debug("Creating MicroPython Widget...")
-            from eric7.MicroPython.MicroPythonWidget import (  # noqa: I101
+            from eric7.MicroPython.MicroPythonWidget import (  # noqa: I-101
                 MicroPythonWidget,
             )
 
@@ -946,7 +946,7 @@
         if Preferences.getUI("ShowNumbersViewer"):
             # Create the numbers viewer
             logging.getLogger(__name__).debug("Creating Numbers Viewer...")
-            from .NumbersWidget import NumbersWidget  # noqa: I101
+            from .NumbersWidget import NumbersWidget  # noqa: I-101
 
             self.numbersViewer = NumbersWidget()
         else:
@@ -976,7 +976,7 @@
         self.__replaceFileDialog = None
         if Preferences.getUI("ShowFindFileWidget"):
             # Create the find in files widget
-            from .FindFileWidget import FindFileWidget  # noqa: I101
+            from .FindFileWidget import FindFileWidget  # noqa: I-101
 
             logging.getLogger(__name__).debug("Creating Find/Replace Pane...")
             self.__findFileWidget = FindFileWidget(self.project, self)
@@ -994,7 +994,7 @@
         self.__findLocationDialog = None
         if Preferences.getUI("ShowFindLocationWidget"):
             # Create the find location (file) widget
-            from .FindLocationWidget import FindLocationWidget  # noqa: I101
+            from .FindLocationWidget import FindLocationWidget  # noqa: I-101
 
             logging.getLogger(__name__).debug("Creating Find File Pane...")
             self.__findLocationWidget = FindLocationWidget(self.project, self)
@@ -1021,7 +1021,7 @@
         ):
             # Create the embedded help viewer
             logging.getLogger(__name__).debug("Creating Internal Help Viewer...")
-            from eric7.HelpViewer.HelpViewerWidget import HelpViewerWidget  # noqa: I101
+            from eric7.HelpViewer.HelpViewerWidget import HelpViewerWidget  # noqa:I-101
 
             self.__helpViewerWidget = HelpViewerWidget(self)
         else:
@@ -4630,14 +4630,14 @@
         # PyQt versions
         versionInfo.append(f"<tr><td><b>PyQt6</b></td><td>{PYQT_VERSION_STR}</td></tr>")
         with contextlib.suppress(ImportError, AttributeError):
-            from PyQt6 import QtCharts  # __IGNORE_WARNING_I10__
+            from PyQt6 import QtCharts  # __IGNORE_WARNING_I-10__
 
             versionInfo.append(
                 "<tr><td><b>PyQt6-Charts</b></td>"
                 f"<td>{QtCharts.PYQT_CHART_VERSION_STR}</td></tr>"
             )
         with contextlib.suppress(ImportError, AttributeError):
-            from PyQt6 import QtWebEngineCore  # __IGNORE_WARNING_I10__
+            from PyQt6 import QtWebEngineCore  # __IGNORE_WARNING_I-10__
 
             versionInfo.append(
                 "<tr><td><b>PyQt6-WebEngine</b></td>"
@@ -4653,7 +4653,7 @@
 
         # webengine (chromium) version
         with contextlib.suppress(ImportError):
-            from eric7.WebBrowser.Tools import (  # __IGNORE_WARNING_I101__
+            from eric7.WebBrowser.Tools import (  # __IGNORE_WARNING_I-101__
                 WebBrowserTools,
             )
 
@@ -5744,7 +5744,7 @@
         """
         if self.__layoutType == "Toolboxes":
             self.hToolboxDock.show()
-            self.hToolboxDock.setCurrentWidget(self.shellAssembly)
+            self.hToolbox.setCurrentWidget(self.shellAssembly)
         elif self.__layoutType == "Sidebars":
             self.bottomSidebar.show()
             self.bottomSidebar.setCurrentWidget(self.shellAssembly)
@@ -7455,7 +7455,7 @@
         )
 
         with contextlib.suppress(ImportError, AttributeError):
-            from eric7.EricWidgets.EricSpellCheckedTextEdit import (  # noqa: I101
+            from eric7.EricWidgets.EricSpellCheckedTextEdit import (  # noqa: I-101
                 SpellCheckMixin,
             )
 
@@ -7505,7 +7505,7 @@
         Preferences.convertPasswords(oldPassword, newPassword)
         variant = Globals.getWebBrowserSupport()
         if variant == "QtWebEngine":
-            from eric7.WebBrowser.Passwords.PasswordManager import (  # noqa: I101
+            from eric7.WebBrowser.Passwords.PasswordManager import (  # noqa: I-101
                 PasswordManager,
             )
 
--- a/src/eric7/Utilities/BackgroundClient.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/BackgroundClient.py	Sat Mar 01 15:52:40 2025 +0100
@@ -250,4 +250,4 @@
     backgroundClient.run()
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/Utilities/BackgroundService.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/BackgroundService.py	Sat Mar 01 15:52:40 2025 +0100
@@ -77,7 +77,7 @@
             else self.__hostAddress
         )
         print("Background Service listening on: {0}:{1:d}".format(hostAddressStr, port))
-        # __IGNORE_WARNING_M801__
+        # __IGNORE_WARNING_M-801__
 
         interpreter = self.__getPythonInterpreter()
         if interpreter:
--- a/src/eric7/Utilities/ClassBrowsers/__init__.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/ClassBrowsers/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -227,7 +227,7 @@
         for p in path:  # search in path
             pathname = os.path.join(p, name)
             if os.path.exists(pathname):
-                return (open(pathname), pathname, (ext, "r", sourceType))  # noqa: Y115
+                return (open(pathname), pathname, (ext, "r", sourceType))  # noqa: Y-115
         raise ImportError
     else:
         # standard Python module file
@@ -239,7 +239,8 @@
             raise ImportError
         if isinstance(spec.loader, importlib.machinery.SourceFileLoader):
             ext = os.path.splitext(spec.origin)[-1]
-            return (open(spec.origin), spec.origin, (ext, "r", PY_SOURCE))  # noqa: Y115
+            return (open(spec.origin), spec.origin, (ext, "r", PY_SOURCE))
+            # noqa: Y-115
 
     raise ImportError
 
--- a/src/eric7/Utilities/ClassBrowsers/rbclbr.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/ClassBrowsers/rbclbr.py	Sat Mar 01 15:52:40 2025 +0100
@@ -302,7 +302,7 @@
         self.setPrivate()
 
 
-def readmodule_ex(module, searchPath=None, isTypeFile=False):  # noqa: U100
+def readmodule_ex(module, searchPath=None, isTypeFile=False):  # noqa: U-100
     """
     Read a Ruby file and return a dictionary of classes, functions and modules.
 
--- a/src/eric7/Utilities/GetSysPath.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/GetSysPath.py	Sat Mar 01 15:52:40 2025 +0100
@@ -17,4 +17,4 @@
     sys.exit(0)
 
 #
-# eflag: noqa = M701, M801
+# eflag: noqa = M701, M-801
--- a/src/eric7/Utilities/ModuleParser.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/ModuleParser.py	Sat Mar 01 15:52:40 2025 +0100
@@ -584,7 +584,7 @@
 
         @param src the source text to be scanned
         @type str
-        """  # __IGNORE_WARNING_D234__
+        """  # __IGNORE_WARNING_D-234__
 
         def calculateEndline(lineno, lines, indent):
             """
@@ -1743,7 +1743,7 @@
             moduleType = PTL_SOURCE
         elif extension == ".rb":
             moduleType = RB_SOURCE
-        elif extension in _extensions:  # noqa: Y106
+        elif extension in _extensions:  # noqa: Y-106
             moduleType = PY_SOURCE
         else:
             raise ImportError
@@ -1835,20 +1835,20 @@
                     if ext == ".ptl":
                         # Quixote page template
                         return (
-                            open(pathname),  # noqa: Y115
+                            open(pathname),  # noqa: Y-115
                             pathname,
                             (".ptl", "r", PTL_SOURCE),
                         )
                     elif ext == ".rb":
                         # Ruby source file
                         return (
-                            open(pathname),  # noqa: Y115
+                            open(pathname),  # noqa: Y-115
                             pathname,
                             (".rb", "r", RB_SOURCE),
                         )
                     else:
                         return (
-                            open(pathname),  # noqa: Y115
+                            open(pathname),  # noqa: Y-115
                             pathname,
                             (ext, "r", PY_SOURCE),
                         )
@@ -1863,7 +1863,7 @@
         raise ImportError
     if isinstance(spec.loader, importlib.machinery.SourceFileLoader):
         ext = os.path.splitext(spec.origin)[-1]
-        return (open(spec.origin), spec.origin, (ext, "r", PY_SOURCE))  # noqa: Y115
+        return (open(spec.origin), spec.origin, (ext, "r", PY_SOURCE))  # noqa: Y-115
 
     raise ImportError
 
--- a/src/eric7/Utilities/__init__.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/__init__.py	Sat Mar 01 15:52:40 2025 +0100
@@ -47,7 +47,7 @@
 
 
 def __showwarning(
-    message, category, filename, lineno, file=None, line=None  # noqa: U100
+    message, category, filename, lineno, file=None, line=None  # noqa: U-100
 ):
     """
     Module function to raise a SyntaxError for a SyntaxWarning.
@@ -84,7 +84,7 @@
     (1, re.compile(r"""<\?xml.*\bencoding\s*=\s*['"]([-\w_.]+)['"]\?>""")),
 ]
 
-supportedCodecs = [  # noqa: U200
+supportedCodecs = [  # noqa: U-200
     "utf-8",
     "iso-8859-1",
     "iso-8859-2",
@@ -1065,21 +1065,21 @@
     info.append(f"  Qt {qVersion()}")
     info.append(f"  PyQt6 {PYQT_VERSION_STR}")
     try:
-        from PyQt6 import QtCharts  # noqa: I101, I102
+        from PyQt6 import QtCharts  # noqa: I-101, I-102
 
         info.append(f"  PyQt6-Charts {QtCharts.PYQT_CHART_VERSION_STR}")
     except (AttributeError, ImportError):
         info.append("  PyQt6-Charts not installed")
     try:
-        from PyQt6 import QtWebEngineCore  # noqa: I101, I102
+        from PyQt6 import QtWebEngineCore  # noqa: I-101, I-102
 
         info.append(f"  PyQt6-WebEngine {QtWebEngineCore.PYQT_WEBENGINE_VERSION_STR}")
     except (AttributeError, ImportError):
         info.append("  PyQt6-WebEngine not installed")
     info.append(f"  PyQt6-QScintilla {QSCINTILLA_VERSION_STR}")
     info.append(f"  sip {sip_version_str}")
-    if bool(importlib.util.find_spec("PyQt6.QtWebEngineWidgets")):
-        from eric7.WebBrowser.Tools import WebBrowserTools  # noqa: I101
+    if bool(importlib.util.find_spec("PyQt6.QtWebEngineCore")):
+        from eric7.WebBrowser.Tools import WebBrowserTools  # noqa: I-101
 
         (
             chromiumVersion,
--- a/src/eric7/Utilities/uic.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/Utilities/uic.py	Sat Mar 01 15:52:40 2025 +0100
@@ -100,9 +100,9 @@
     @param uiheadername UI file name to be placed in the header (defaults to "")
     @type str ((optional)
     """
-    from PyQt6.QtCore import PYQT_VERSION_STR  # noqa: I102
-    from PyQt6.uic.compile_ui import _display_code, _header  # noqa: I102
-    from PyQt6.uic.Compiler import compiler, indenter  # noqa: I102
+    from PyQt6.QtCore import PYQT_VERSION_STR  # noqa: I-102
+    from PyQt6.uic.compile_ui import _display_code, _header  # noqa: I-102
+    from PyQt6.uic.Compiler import compiler, indenter  # noqa: I-102
 
     if uiheadername:
         uifname = uiheadername
--- a/src/eric7/VCS/ProjectHelper.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/VCS/ProjectHelper.py	Sat Mar 01 15:52:40 2025 +0100
@@ -164,7 +164,7 @@
         menu.addAction(self.vcsAddAct)
         menu.addSeparator()
 
-    def initToolbar(self, ui, toolbarManager):  # noqa: U100
+    def initToolbar(self, ui, toolbarManager):  # noqa: U-100
         """
         Public slot to initialize the VCS toolbar.
 
@@ -175,7 +175,7 @@
         @return the toolbar generated
         @rtype QToolBar
         """
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
     def initBasicToolbar(self, ui, toolbarManager):
         """
--- a/src/eric7/VCS/VersionControl.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/VCS/VersionControl.py	Sat Mar 01 15:52:40 2025 +0100
@@ -695,7 +695,7 @@
         """
         raise NotImplementedError("Not implemented")
 
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
     def vcsGetProjectHelper(self, project):
         """
@@ -710,7 +710,7 @@
         """
         raise NotImplementedError("Not implemented")
 
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
     #####################################################################
     ## methods above need to be implemented by a subclass
@@ -1127,7 +1127,7 @@
         if self.statusMonitorThread is not None:
             self.statusMonitorThread.clearCachedState(name)
 
-    def _createStatusMonitorThread(self, interval, project):  # noqa: U100
+    def _createStatusMonitorThread(self, interval, project):  # noqa: U-100
         """
         Protected method to create an instance of the VCS status monitor
         thread.
@@ -1142,4 +1142,4 @@
         @return reference to the monitor thread
         @rtype QThread
         """
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
--- a/src/eric7/ViewManager/ViewManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/ViewManager/ViewManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -361,7 +361,7 @@
         """
         raise NotImplementedError("Not implemented")
 
-        return None  # __IGNORE_WARNING_M831__
+        return None  # __IGNORE_WARNING_M-831__
 
     def _removeAllViews(self):
         """
@@ -7209,7 +7209,7 @@
         @param zoomingWidget reference to the widget triggering the slot
         @type Editor or Shell
         """
-        if QApplication.focusWidget() == ericApp().getObject("Shell"):  # noqa: Y108
+        if QApplication.focusWidget() == ericApp().getObject("Shell"):  # noqa: Y-108
             aw = ericApp().getObject("Shell")
         else:
             aw = (
--- a/src/eric7/VirtualEnv/VirtualenvManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/VirtualEnv/VirtualenvManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -71,7 +71,7 @@
         )
 
         venvString = Preferences.getSettings().value(
-            "PyVenv/VirtualEnvironments", "{}"  # __IGNORE_WARNING_M613__
+            "PyVenv/VirtualEnvironments", "{}"  # __IGNORE_WARNING_M-613__
         )
         environments = json.loads(venvString)
 
--- a/src/eric7/VirtualEnv/VirtualenvManagerWidgets.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/VirtualEnv/VirtualenvManagerWidgets.py	Sat Mar 01 15:52:40 2025 +0100
@@ -215,7 +215,7 @@
             selectedInterpreters = [env[1] for env in dlg.getSelection()]
 
             nameTemplate = "Environment #{0} added " + datetime.datetime.now().strftime(
-                # noqa: M305
+                # noqa: M-305
                 "%Y-%m-%d %H:%M"
             )
             for interpreter in selectedInterpreters:
--- a/src/eric7/WebBrowser/AdBlock/AdBlockRule.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/AdBlock/AdBlockRule.py	Sat Mar 01 15:52:40 2025 +0100
@@ -1006,7 +1006,7 @@
         @return flag indicating a end of string match filter
         @rtype bool
         """
-        for index, filterChar in enumerate(filterString):  # noqa: Y111
+        for index, filterChar in enumerate(filterString):  # noqa: Y-111
             if filterChar in ["^", "*"]:
                 return False
             elif filterChar == "|":
--- a/src/eric7/WebBrowser/Bookmarks/BookmarksManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Bookmarks/BookmarksManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -446,11 +446,11 @@
                 fpath = fpath.with_suffix(ex)
 
         if fpath.suffix == ".html":
-            from .NsHtmlWriter import NsHtmlWriter  # __IGNORE_WARNING_I101__
+            from .NsHtmlWriter import NsHtmlWriter  # __IGNORE_WARNING_I-101__
 
             writer = NsHtmlWriter()
         else:
-            from .XbelWriter import XbelWriter  # __IGNORE_WARNING_I101__
+            from .XbelWriter import XbelWriter  # __IGNORE_WARNING_I-101__
 
             writer = XbelWriter()
         if not writer.write(str(fpath), self.__bookmarkRootNode):
--- a/src/eric7/WebBrowser/Download/DownloadManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Download/DownloadManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -584,7 +584,7 @@
         @rtype QWinTaskbarButton or None
         """
         if OSUtilities.isWindowsPlatform():
-            from PyQt6.QtWinExtras import QWinTaskbarButton  # __IGNORE_WARNING_I10__
+            from PyQt6.QtWinExtras import QWinTaskbarButton  # __IGNORE_WARNING_I-10__
 
             if self.__winTaskbarButton is None:
                 window = WebBrowserWindow.mainWindow()
--- a/src/eric7/WebBrowser/Network/NetworkManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Network/NetworkManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -99,7 +99,7 @@
         )
 
         if engine:
-            from eric7.QtHelpInterface.QtHelpSchemeHandler import (  # noqa: I101
+            from eric7.QtHelpInterface.QtHelpSchemeHandler import (  # noqa: I-101
                 QtHelpSchemeHandler,
             )
 
--- a/src/eric7/WebBrowser/OpenSearch/OpenSearchEngineModel.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/OpenSearch/OpenSearchEngineModel.py	Sat Mar 01 15:52:40 2025 +0100
@@ -92,7 +92,7 @@
         else:
             return self.__manager.enginesCount()
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public method to get the number of columns of the model.
 
--- a/src/eric7/WebBrowser/Passwords/PasswordManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Passwords/PasswordManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -425,7 +425,7 @@
         )
         progress.setMinimumDuration(0)
         progress.setWindowTitle(self.tr("Passwords"))
-        count = 0  # noqa: Y113
+        count = 0  # noqa: Y-113
 
         # step 1: do the logins
         for key in self.__logins:
--- a/src/eric7/WebBrowser/Passwords/PasswordModel.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Passwords/PasswordModel.py	Sat Mar 01 15:52:40 2025 +0100
@@ -111,7 +111,7 @@
         else:
             return self.__manager.sitesCount()
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public method to get the number of columns of the model.
 
--- a/src/eric7/WebBrowser/Sync/FtpSyncHandler.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Sync/FtpSyncHandler.py	Sat Mar 01 15:52:40 2025 +0100
@@ -111,7 +111,7 @@
                 self.__initialSync()
                 self.__state = "idle"
                 self.__idleTimer.start()
-        except ftplib.all_errors + (EricFtpProxyError,) as err:  # noqa: M530
+        except ftplib.all_errors + (EricFtpProxyError,) as err:  # noqa: M-530
             self.syncError.emit(str(err))
 
     def __connectAndLogin(self):
--- a/src/eric7/WebBrowser/Sync/SyncManager.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Sync/SyncManager.py	Sat Mar 01 15:52:40 2025 +0100
@@ -78,11 +78,11 @@
 
         if self.syncEnabled():
             if Preferences.getWebBrowser("SyncType") == SyncGlobals.SyncTypeFtp:
-                from .FtpSyncHandler import FtpSyncHandler  # __IGNORE_WARNING_I101__
+                from .FtpSyncHandler import FtpSyncHandler  # __IGNORE_WARNING_I-101__
 
                 self.__handler = FtpSyncHandler(self)
             elif Preferences.getWebBrowser("SyncType") == SyncGlobals.SyncTypeDirectory:
-                from .DirectorySyncHandler import (  # __IGNORE_WARNING_I101__
+                from .DirectorySyncHandler import (  # __IGNORE_WARNING_I-101__
                     DirectorySyncHandler,
                 )
 
--- a/src/eric7/WebBrowser/Tools/Scripts.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Tools/Scripts.py	Sat Mar 01 15:52:40 2025 +0100
@@ -75,7 +75,7 @@
 
 }})()"""
 
-    from eric7.WebBrowser.WebBrowserPage import (  # __IGNORE_WARNING_I101__
+    from eric7.WebBrowser.WebBrowserPage import (  # __IGNORE_WARNING_I-101__
         WebBrowserPage,
     )
 
--- a/src/eric7/WebBrowser/Tools/WebBrowserTools.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Tools/WebBrowserTools.py	Sat Mar 01 15:52:40 2025 +0100
@@ -226,7 +226,7 @@
     @rtype tuple of (str, str, str)
     """
     try:
-        from PyQt6.QtWebEngineCore import (  # __IGNORE_WARNING_I10__
+        from PyQt6.QtWebEngineCore import (  # __IGNORE_WARNING_I-10__
             qWebEngineChromiumSecurityPatchVersion,
             qWebEngineChromiumVersion,
             qWebEngineVersion,
@@ -237,7 +237,7 @@
         webengineVersion = qWebEngineVersion()
     except ImportError:
         # backwards compatibility for PyQt < 6.3.1
-        from PyQt6.QtWebEngineCore import QWebEngineProfile  # __IGNORE_WARNING_I10__
+        from PyQt6.QtWebEngineCore import QWebEngineProfile  # __IGNORE_WARNING_I-10__
 
         useragent = QWebEngineProfile.defaultProfile().httpUserAgent()
         match = re.search(r"""Chrome/([\d.]+)""", useragent)
--- a/src/eric7/WebBrowser/Tools/WebIconProvider.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/Tools/WebIconProvider.py	Sat Mar 01 15:52:40 2025 +0100
@@ -110,7 +110,7 @@
         if not self.__loaded:
             return
 
-        from eric7.WebBrowser.WebBrowserWindow import (  # __IGNORE_WARNING_I101__
+        from eric7.WebBrowser.WebBrowserWindow import (  # __IGNORE_WARNING_I-101__
             WebBrowserWindow,
         )
 
--- a/src/eric7/WebBrowser/UserAgent/UserAgentModel.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/UserAgent/UserAgentModel.py	Sat Mar 01 15:52:40 2025 +0100
@@ -92,7 +92,7 @@
         else:
             return self.__manager.hostsCount()
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public method to get the number of columns of the model.
 
--- a/src/eric7/WebBrowser/WebAuth/WebBrowserWebAuthDialog.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/WebAuth/WebBrowserWebAuthDialog.py	Sat Mar 01 15:52:40 2025 +0100
@@ -340,7 +340,7 @@
             )
         elif (
             requestFailureReason
-            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorRemovedDuringPinEntry  # noqa: E501
+            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorRemovedDuringPinEntry  # noqa: E-501
         ):
             errorMsg = self.tr(
                 "Security key removed during verification. Please reinsert and try"
@@ -348,17 +348,17 @@
             )
         elif (
             requestFailureReason
-            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorMissingResidentKeys  # noqa: E501
+            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorMissingResidentKeys  # noqa: E-501
         ):
             errorMsg = self.tr("Security key does not have resident key support.")
         elif (
             requestFailureReason
-            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorMissingUserVerification  # noqa: E501
+            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorMissingUserVerification  # noqa: E-501
         ):
             errorMsg = self.tr("Security key is missing user verification.")
         elif (
             requestFailureReason
-            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorMissingLargeBlob  # noqa: E501
+            == QWebEngineWebAuthUxRequest.RequestFailureReason.AuthenticatorMissingLargeBlob  # noqa: E-501
         ):
             errorMsg = self.tr("Security key is missing Large Blob support.")
         elif (
--- a/src/eric7/WebBrowser/WebBrowserPage.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/WebBrowserPage.py	Sat Mar 01 15:52:40 2025 +0100
@@ -73,7 +73,7 @@
 
     sslConfigurationChanged = pyqtSignal()
 
-    if QtUtilities.qVersionTuple() >= (6, 8, 0):  # noqa: Y108
+    if QtUtilities.qVersionTuple() >= (6, 8, 0):  # noqa: Y-108
         PermissionTypeQuestions = {
             QWebEnginePermission.PermissionType.Geolocation: QCoreApplication.translate(
                 "WebBrowserPage",
--- a/src/eric7/WebBrowser/WebBrowserView.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/WebBrowserView.py	Sat Mar 01 15:52:40 2025 +0100
@@ -251,7 +251,7 @@
             self.__rwhvqt.grabGesture(Qt.GestureType.PinchGesture)
             self.__rwhvqt.installEventFilter(self)
         else:
-            print("Focus proxy is null!")  # __IGNORE_WARNING_M801__
+            print("Focus proxy is null!")  # __IGNORE_WARNING_M-801__
 
     def __currentEngineChanged(self):
         """
@@ -2622,7 +2622,7 @@
             @param accessRequest reference to the file system access request object
             @type QWebEngineFileSystemAccessRequest
             """
-            from PyQt6.QtWebEngineCore import (  # __IGNORE_WARNING_I102__
+            from PyQt6.QtWebEngineCore import (  # __IGNORE_WARNING_I-102__
                 QWebEngineFileSystemAccessRequest,
             )
 
--- a/src/eric7/WebBrowser/WebBrowserWindow.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/WebBrowserWindow.py	Sat Mar 01 15:52:40 2025 +0100
@@ -4020,7 +4020,7 @@
         Private slot to manage the QtHelp documentation database.
         """
         if WebBrowserWindow._useQtHelp:
-            from eric7.QtHelpInterface.QtHelpDocumentationConfigurationDialog import (  # noqa: I101
+            from eric7.QtHelpInterface.QtHelpDocumentationConfigurationDialog import (  # noqa: I-101
                 QtHelpDocumentationConfigurationDialog,
             )
 
@@ -4119,7 +4119,7 @@
         help database.
         """
         if WebBrowserWindow._useQtHelp:
-            from eric7.QtHelpInterface.HelpDocsInstaller import (  # noqa: I101
+            from eric7.QtHelpInterface.HelpDocsInstaller import (  # noqa: I-101
                 HelpDocsInstaller,
             )
 
@@ -4300,7 +4300,7 @@
         """
         if QtUtilities.qVersionTuple() >= (6, 8, 0):
             # Qt 6.8+
-            from .FeaturePermissions.FeaturePermissionsDialog import (  # noqa: I101
+            from .FeaturePermissions.FeaturePermissionsDialog import (  # noqa: I-101
                 FeaturePermissionsDialog,
             )
 
--- a/src/eric7/WebBrowser/ZoomManager/ZoomValuesModel.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/WebBrowser/ZoomManager/ZoomValuesModel.py	Sat Mar 01 15:52:40 2025 +0100
@@ -92,7 +92,7 @@
         else:
             return self.__manager.sitesCount()
 
-    def columnCount(self, parent=None):  # noqa: U100
+    def columnCount(self, parent=None):  # noqa: U-100
         """
         Public method to get the number of columns of the model.
 
--- a/src/eric7/eric7_api.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/eric7_api.py	Sat Mar 01 15:52:40 2025 +0100
@@ -84,7 +84,7 @@
         "-o",
         "--output",
         default="",
-        help="Write the API information to the named file. A '%%L'"  # noqa: M601
+        help="Write the API information to the named file. A '%%L'"  # noqa: M-601
         " placeholder is replaced by the language of the API file (see --language).",
         required=True,
     )
@@ -315,4 +315,4 @@
     main()
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/eric7_browser.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/eric7_browser.py	Sat Mar 01 15:52:40 2025 +0100
@@ -60,7 +60,7 @@
         app.exec()
     sys.exit(100)
 
-from eric7.EricWidgets.EricApplication import EricApplication  # noqa: NO101
+from eric7.EricWidgets.EricApplication import EricApplication  # noqa: NO-101
 from eric7.Toolbox import Startup
 from eric7.WebBrowser.WebBrowserSingleApplication import (
     WebBrowserSingleApplicationClient,
@@ -126,7 +126,7 @@
             sys.exit(0)
         elif res < 0:
             print("eric7_browser: {0}".format(client.errstr()))
-            # __IGNORE_WARNING_M801__
+            # __IGNORE_WARNING_M-801__
             sys.exit(res)
 
     res = Startup.appStartup(args, createMainWidget, installErrorHandler=True, app=app)
--- a/src/eric7/eric7_doc.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/eric7_doc.py	Sat Mar 01 15:52:40 2025 +0100
@@ -483,4 +483,4 @@
     main()
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/eric7_ide.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/eric7_ide.py	Sat Mar 01 15:52:40 2025 +0100
@@ -231,7 +231,7 @@
 
     elif res < 0:
         print("eric7: {0}".format(client.errstr()))
-        # __IGNORE_WARNING_M801__
+        # __IGNORE_WARNING_M-801__
         sys.exit(res)
 
 
@@ -296,7 +296,7 @@
         qWarning(warning)
     else:
         warning = notice + msg + versionInfo
-        print(warning)  # __IGNORE_WARNING_M801__
+        print(warning)  # __IGNORE_WARNING_M-801__
 
 
 def uiStartUp():
@@ -359,7 +359,7 @@
     app = EricApplication(args)
 
     logging.getLogger(__name__).debug("Importing Preferences")
-    from eric7 import Preferences  # __IGNORE_WARNING_I101__
+    from eric7 import Preferences  # __IGNORE_WARNING_I-101__
 
     if Preferences.getUI("SingleApplicationMode"):
         handleSingleApplication()
@@ -371,7 +371,7 @@
     Startup.initializeResourceSearchPath(app)
 
     # generate and show a splash window, if not suppressed
-    from eric7.UI.SplashScreen import (  # __IGNORE_WARNING_I101__
+    from eric7.UI.SplashScreen import (  # __IGNORE_WARNING_I-101__
         NoneSplashScreen,
         SplashScreen,
     )
@@ -402,7 +402,7 @@
     loc = Startup.loadTranslators(qtTransDir, app, ("qscintilla",))
 
     # generate a graphical error handler
-    from eric7.EricWidgets import EricErrorMessage  # __IGNORE_WARNING_I101__
+    from eric7.EricWidgets import EricErrorMessage  # __IGNORE_WARNING_I-101__
 
     eMsg = EricErrorMessage.qtHandler(
         minSeverity=Preferences.getUI("MinimumMessageTypeSeverity")
@@ -410,7 +410,7 @@
     eMsg.setMinimumSize(600, 400)
 
     # Initialize SSL stuff
-    from eric7.EricNetwork.EricSslUtilities import initSSL  # __IGNORE_WARNING_I101__
+    from eric7.EricNetwork.EricSslUtilities import initSSL  # __IGNORE_WARNING_I-101__
 
     initSSL()
 
@@ -419,7 +419,7 @@
 
     # We can only import these after creating the EricApplication because they
     # make Qt calls that need the EricApplication to exist.
-    from eric7.UI.UserInterface import UserInterface  # __IGNORE_WARNING_I101__
+    from eric7.UI.UserInterface import UserInterface  # __IGNORE_WARNING_I-101__
 
     splash.showMessage(
         QCoreApplication.translate("eric7_ide", "Generating Main Window...")
--- a/src/eric7/eric7_post_install.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/eric7_post_install.py	Sat Mar 01 15:52:40 2025 +0100
@@ -66,7 +66,7 @@
     @rtype Any
     """
     try:
-        import winreg  # __IGNORE_WARNING_I10__
+        import winreg  # __IGNORE_WARNING_I-10__
     except ImportError:
         return None
 
@@ -126,8 +126,8 @@
     @param iconPath path of the icon file
     @type str
     """
-    from pywintypes import com_error  # __IGNORE_WARNING_I102__
-    from win32com.client import Dispatch  # __IGNORE_WARNING_I102__
+    from pywintypes import com_error  # __IGNORE_WARNING_I-102__
+    from win32com.client import Dispatch  # __IGNORE_WARNING_I-102__
 
     with contextlib.suppress(com_error):
         shell = Dispatch("WScript.Shell")
--- a/src/eric7/eric7_server.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/eric7_server.py	Sat Mar 01 15:52:40 2025 +0100
@@ -97,4 +97,4 @@
     main()
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/eric7_trpreviewer.py	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/eric7_trpreviewer.py	Sat Mar 01 15:52:40 2025 +0100
@@ -131,4 +131,4 @@
     main()
 
 #
-# eflag: noqa = M801
+# eflag: noqa = M-801
--- a/src/eric7/i18n/eric7_cs.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_cs.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3940,77 +3940,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
+      <source>Async Functions</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation type="unfinished">Dokumentace</translation>
+      <source>Code Complexity</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation type="unfinished">Chyby</translation>
+      <source>Documentation</source>
+      <translation type="unfinished">Dokumentace</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation type="unfinished" />
+      <source>Errors</source>
+      <translation type="unfinished">Chyby</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
+      <source>Imports</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
+      <source>Logging</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
+      <source>Miscellaneous</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
+      <source>Naming</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation type="unfinished">Bezpečnost</translation>
+      <source>'pathlib' Usage</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation type="unfinished">Bezpečnost</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5107,7 +5112,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation type="unfinished" />
     </message>
@@ -6132,59 +6137,59 @@
       <translation type="unfinished">Filtr</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation type="unfinished">Chyby</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation type="unfinished">Chyby: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation type="unfinished">Žádné problémy nenalezeny.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation type="unfinished">Žádné problémy nenalezeny.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished">{0} - {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6254,146 +6259,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation type="unfinished">
         <numerusform />
@@ -6402,7 +6407,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation type="unfinished">
         <numerusform />
@@ -6411,73 +6416,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <source>Comparison to None/True/False corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
+      <source>'{0}' argument added.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -12568,7 +12573,7 @@
       <translation>Zrušit komentář</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation type="unfinished" />
@@ -12851,7 +12856,7 @@
       <translation type="unfinished">Pravopis</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Zatrhnout kontrolu...</translation>
@@ -12912,7 +12917,7 @@
       <translation>Editovat breakpoint...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Aktivovat breakpoint</translation>
@@ -13156,382 +13161,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Autodoplňování</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>Autodoplňování není dostupné protože zdrojová část autodoplňování nebyla nalezena.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Deaktivovat breakpoint</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>Pokrytí kódu</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>Pokrytí kódu</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>Prosím, vyberte soubor s pokrytím kódu</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>Zobrazit poznámky pokrytí kódu</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Všechny řádky byly pokryty.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>Zobrazit poznámky pokrytí kódu</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Všechny řádky byly pokryty.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>Soubor s pokrytím není dostupný.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Profilovat data</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Profilovat data</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Prosím, vyberte soubor s profilem</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Chyba syntaxe</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Chyba syntaxe</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>Hlášení syntaktické chyby není dostupné.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation type="unfinished">Varování</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation type="unfinished">Chyby: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Název makra</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Vyberte název makra:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Načíst soubor makra</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>Macro soubory (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Chyba při načítání makra</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Chyba při načítání makra</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; nelze načíst.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Soubor s makrem &lt;b&gt;{0}&lt;/b&gt; je poškozen.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Uložit soubor s makrem</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Uložit makro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Uložit makro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Chyba při ukládání makra</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Chyba při ukládání makra</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;So souboru s makrem &lt;b&gt;{0}&lt;/b&gt; nelze zapisovat.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Spustit záznam makra</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Spustit záznam makra</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>Nahrávání makra již probíhá. Spustit nové?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Záznam makra</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Záznam makra</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Vložte název makra:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation>{0} (ro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>Soubor změněn</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>Zahodit chybu</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>Zahodit chybu</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; není soubor.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Zdroje</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Přidat soubor...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Přidat soubory...</translation>
+      <source>Add file...</source>
+      <translation>Přidat soubor...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Přidat soubory...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Přidat zástupce souboru...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Přidat lokalizované resource...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>Přidat resource frame</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Přidat soubor resource</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Přidat soubory resource</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Přidat zástupce souboru resource</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Přidat zástupce souboru resource</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation>Zástupce pro soubor &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Diagram balíčku</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Diagram balíčku</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>Včetně atributů třídy?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Importovat diagram</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Importovat diagram</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>Zahrnout importy z externích modulů?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Diagram aplikace</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Diagram aplikace</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>Včetně jmen modulů?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Přidat do slovníku</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Ignorovat vše</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
-      <source>EditorConfig Properties</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9977" />
+      <source>EditorConfig Properties</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52799,18 +52804,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -56054,17 +56059,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56119,7 +56124,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56139,7 +56144,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56179,7 +56184,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56193,156 +56198,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58453,21 +58473,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59626,164 +59646,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60544,6 +60564,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60693,18 +60723,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -60885,13 +60915,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished">neznámý</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -61011,6 +61041,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62352,18 +62397,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Předvolby exportu</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Předvolby importu</translation>
     </message>
@@ -69258,6 +69303,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74232,343 +74315,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -76993,10 +77061,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77153,22 +77221,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87501,7 +87574,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -89961,133 +90034,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -106315,406 +106388,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
+      <source>expected an indented block</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
+      <source>multiple spaces before operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
+      <source>multiple spaces after operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
+      <source>block comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
+      <source>missing whitespace after keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
+      <source>module level import not at top of file</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
+      <source>line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
+      <source>the backslash is redundant between brackets</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
+      <source>{0}: {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_de.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3917,77 +3917,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation>Annotationen</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation>Async Funktionen</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
-      <translation>Code-Komplexität</translation>
+      <source>Async Functions</source>
+      <translation>Async Funktionen</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation>Dokumentation</translation>
+      <source>Code Complexity</source>
+      <translation>Code-Komplexität</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation>Fehler</translation>
+      <source>Documentation</source>
+      <translation>Dokumentation</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation>Importe</translation>
+      <source>Errors</source>
+      <translation>Fehler</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
-      <translation>Logging</translation>
+      <source>Imports</source>
+      <translation>Importe</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
-      <translation>Verschiedenes</translation>
+      <source>Logging</source>
+      <translation>Logging</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
-      <translation>Benennung</translation>
+      <source>Miscellaneous</source>
+      <translation>Verschiedenes</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
-      <translation>Namensreihenfolge</translation>
+      <source>Naming</source>
+      <translation>Benennung</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
-      <translation>'pathlib' Verwendung</translation>
+      <source>Name Order</source>
+      <translation>Namensreihenfolge</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation>Sicherheit</translation>
+      <source>'pathlib' Usage</source>
+      <translation>'pathlib' Verwendung</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation>'pydantic' und 'dataclass' Verwendung</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation>Sicherheit</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation>Ungenutzt</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation>Warnungen</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation>Code-Vereinfachungen</translation>
     </message>
@@ -5089,7 +5094,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation>Keine Nachricht für '{0}' definiert.</translation>
     </message>
@@ -6117,59 +6122,59 @@
       <translation>Filter</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation>PEP-257</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation>Eric</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation>Eric (Black Tool)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation>Fehler</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation>Fehler: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation>{0} (ignoriert)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation>Keine Probleme gefunden.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation>Keine Probleme gefunden.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation>Keine Dateien gefunden (überprüfe die Ignorierliste).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation>{0} – {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation>'Commented Code' Whitelist Muster</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation>Ein 'Commented Code' Whitelist Muster eingeben</translation>
     </message>
@@ -6239,146 +6244,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation>Dreifache Einfachanführungszeichen in dreifache Doppelanführungszeichen umgewandelt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation>Einleitende Anführungszeichen in {0}""" korrigiert</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation>Einzeiligen Docstring auf eine Zeile gebracht.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation>Punkt an die Zusammenfassungszeile angefügt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation>Leerzeile vor Funktions-/Methodendocstring entfernt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation>Leerzeile vor Klassendocstring eingefügt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation>Leerzeile nach Klassendocstring eingefügt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation>Leerzeile nach Docstring Zusammenfassung eingefügt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation>Leerzeile nach letztem Abschnitt des Docstring eingefügt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation>Einleitende Anführungszeichen auf separate Zeile gesetzt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation>Schließende Anführungszeichen auf separate Zeile gesetzt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation>Leerzeile vor Klassendocstring entfernt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation>Leerzeile nach Klassendocstring entfernt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation>Leerzeile nach Funktions-/Methodendocstring entfernt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation>Leerzeile nach letzten Abschnitt entfernt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation>Tabulator in 4 Leerzeichen gewandelt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation>Einrückung auf ein Vielfaches von vier korrigiert.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation>Einrückung der Fortsetzungszeile korrigiert.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation>Einrückung der schließenden Klammer korrigiert.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation>Fehlende Einrückung der Fortsetzungszeile korrigiert.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation>Schließende Klammer an öffnender Klammer ausgerichtet.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation>Einrückungsebene geändert.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation>Einrückungsebene der hängenden Einrückung geändert.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation>Visuelle Einrückung korrigiert.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation>Überzählige Leerzeichen gelöscht.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation>Fehlende Leerzeichen eingefügt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation>Leerzeichen um Kommentarzeichen korrigiert.</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation>
         <numerusform>Eine Leerzeile eingefügt.</numerusform>
@@ -6386,7 +6391,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation>
         <numerusform>Eine überflüssige Zeile gelöscht</numerusform>
@@ -6394,73 +6399,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation>Überflüssige Leerzeilen gelöscht.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation>Überflüssige Leerzeilen nach Funktionsdekorator gelöscht.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation>Imports wurden auf separate Zeilen verteilt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation>Lange Zeilen wurden gekürzt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation>Redundante Backslashes in Klammern entfernt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation>Compund Statement korrigiert.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation>Vergleich mit None/True/False korrigiert.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation>'{0}' Argument hinzugefügt.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation>'{0}' Argument entfernt.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation>Leerzeichen am Zeilenende entfernt.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
-      <translation>Zeilenvorschub am Dateiende angefügt.</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
+      <translation>Compund Statement korrigiert.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
-      <translation>Überflüssige Leerzeilen am Dateiende gelöscht.</translation>
+      <source>Comparison to None/True/False corrected.</source>
+      <translation>Vergleich mit None/True/False korrigiert.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
-      <translation>„&lt;&gt;“ durch „!=“ ersetzt.</translation>
+      <source>'{0}' argument added.</source>
+      <translation>'{0}' Argument hinzugefügt.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation>'{0}' Argument entfernt.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation>Leerzeichen am Zeilenende entfernt.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation>Zeilenvorschub am Dateiende angefügt.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation>Überflüssige Leerzeilen am Dateiende gelöscht.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation>„&lt;&gt;“ durch „!=“ ersetzt.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation>Datei konnte nicht gespeichert werden! Ursache: {0}</translation>
     </message>
@@ -12552,7 +12557,7 @@
       <translation>Kommentar entfernen</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation>Docstring erzeugen</translation>
@@ -12835,7 +12840,7 @@
       <translation>Rechtschreibung</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Rechtschreibprüfung...</translation>
@@ -12896,7 +12901,7 @@
       <translation>Haltepunkt bearbeiten...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Haltepunkt aktivieren</translation>
@@ -13140,370 +13145,370 @@
       <translation>Gib den vollständigen Dateipfad auf dem Gerät ein:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Automatische Vervollständigung</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>Die automatische Vervollständigung ist nicht verfügbar, da keine Quelle gesetzt ist.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation>Provider für automatische Vervollständigungen</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation>Provider für automatische Vervollständigungen</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation>Der Provider für automatische Vervollständigungen namens '{0}' ist bereits registriert. Die Wiederholung wird ignoriert.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation>Calltipps-Provider</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation>Calltipps-Provider</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation>Der Calltipps-Provider namens '{0}' ist bereits registriert. Die Wiederholung wird ignoriert.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Haltepunkt deaktivieren</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>Quelltext Abdeckung</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>Quelltext Abdeckung</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>Bitte wählen Sie eine Datei mit Abdeckungsdaten</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation>Coverage Daten laden</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation>Coverage Daten laden</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Coverage Daten konnten nicht aus der Datei &lt;b&gt;{0}&lt;/b&gt; geladen werden.&lt;/p&gt;&lt;p&gt;Ursache: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>Zeilen ohne Abdeckung Markieren</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Alle Zeilen sind abgedeckt.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>Zeilen ohne Abdeckung Markieren</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Alle Zeilen sind abgedeckt.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>Es gibt keine Datei mit Abdeckungsinformationen.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Profildaten</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Profildaten</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Bitte wählen Sie eine Datei mit Profildaten</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Syntaxfehler</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Syntaxfehler</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>Keine Syntaxfehlermeldung verfügbar.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation>Warnung</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation>Keine Warnmeldungen verfügbar.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation>Info: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>Fehler: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation>Stil: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>Warnung: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Makro Name</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Wähle einen Makro Namen:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Lade Makrodatei</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>Makrodateien (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Fehler beim Makro Laden</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Die Makrodatei &lt;b&gt;{0}&lt;/b&gt; kann nicht gelesen werden.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Fehler beim Makro Laden</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Die Makrodatei &lt;b&gt;{0}&lt;/b&gt; kann nicht gelesen werden.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Makrodatei &lt;b&gt;{0}&lt;/b&gt; ist zerstört.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Makrodatei schreiben</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Makro speichern</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Makro speichern</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Makrodatei &lt;b&gt;{0}&lt;/b&gt; existiert bereits. Überschreiben?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Fehler beim Makro speichern</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Fehler beim Makro speichern</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Makrodatei &lt;b&gt;{0}&lt;/b&gt; kann nicht geschrieben werden.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Makroaufzeichnung starten</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Makroaufzeichnung starten</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>Eine Makroaufzeichnung ist bereits aktiv. Neu starten?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Makroaufzeichnung</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Makroaufzeichnung</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Gib einen Namen für das Makro ein:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation>{0} (ro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die Datei &lt;b&gt;{0}&lt;/b&gt; wurde geändert, während sie in eric geöffnet war. Neu einlesen?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation>&lt;br&gt;&lt;b&gt;Warnung:&lt;/b&gt; Vorgenommenen Änderungen gehen beim neu einlesen verloren.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>Datei geändert</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation>Datei neu laden</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation>Datei neu laden</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Der Editor enthält ungesicherte Änderungen.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warnung:&lt;/b&gt; Alle Änderung gehen beim Laden verloren.&lt;/p&gt;&lt;p&gt;Soll der Editor wirklich neu geladen werden?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>Drop Fehler</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>Drop Fehler</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; ist keine Datei.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Ressourcen</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Datei hinzufügen...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Dateien hinzufügen...</translation>
+      <source>Add file...</source>
+      <translation>Datei hinzufügen...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Dateien hinzufügen...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Aliased-Datei hinzufügen...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Lokalisierte Ressource hinzufügen...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>Ressourcenrahmen hinzufügen</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Dateiressource hinzufügen</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Dateiressourcen hinzufügen</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Aliased-Dateiressourcen hinzufügen</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Aliased-Dateiressourcen hinzufügen</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation>Alias für Datei &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Package-Diagramm</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Package-Diagramm</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>Klassenattribute anzeigen?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Imports Diagramm</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Imports Diagramm</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>Imports externer Module anzeigen?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Applikations-Diagramm</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Applikations-Diagramm</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>Modulnamen anzeigen?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Zum Wörterbuch hinzufügen</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Alle ignorieren</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation>Zeilen sortieren</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation>Zeilen sortieren</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation>Die Auswahl enthält für eine numerische Sortierung ungültige Daten.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation>Maus Klick Handler registrieren</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation>Maus Klick Handler registrieren</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation>Ein Maus Klick Handler für "{0}" wurde bereits durch "{1}" registriert. Die Anfrage durch "{2}" wird abgebrochen...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation>{0:4d}    {1}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
@@ -13511,12 +13516,12 @@
     =&gt;  {2}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
+      <location filename="../QScintilla/Editor.py" line="9977" />
       <source>EditorConfig Properties</source>
       <translation>EditorConfig Eigenschaften</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9977" />
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die EditorConfig Eigenschaften für die Datei &lt;b&gt;{0}&lt;/b&gt; konnten nicht geladen werden.&lt;/p&gt;</translation>
     </message>
@@ -52813,18 +52818,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation>Generisches MicroPython Board</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation>RP2040/RP2350 basiert</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation>Unbekanntes Gerät</translation>
     </message>
@@ -56085,18 +56090,18 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
-      <translation>return/continue/break innerhalb eines finally Blocks unterdrückt Ausnahmen. Ausnahmen sollten in except Blöcken behandelt werden. Kontrollanweisungen können aus dem finally Block verschoben werden.</translation>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
+      <translation>return/continue/break innerhalb eines finally Blocks unterdrückt Ausnahmen. Ausnahmen sollten in except{0} Blöcken behandelt werden. Kontrollanweisungen können aus dem finally Block verschoben werden.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
-      <translation>Ein Tuple der Länge eins ist redundant. Schreibe 'except {0}:' anstelle 'except ({0},):'.</translation>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
+      <translation>Ein Tuple der Länge eins ist redundant. Schreibe 'except{1} {0}:' anstelle 'except{1} ({0},):'.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
-      <translation>Redundante Ausnahmetypen in 'except ({0}){1}:'. Schreibe 'except {2}{1}:', was die exakt gleichen Ausnahmen behandelt.</translation>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
+      <translation>Redundante Ausnahmetypen in 'except{3} ({0}){1}:'. Schreibe 'except{3} {2}{1}:', was die exakt gleichen Ausnahmen behandelt.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
@@ -56150,8 +56155,8 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
-      <translation>Die Ausnahme '{0}' wurde mehrfach abgefangen. Nur das erste 'except' wird berücksichtigt und alle anderen 'except' Blöcke können entfernt werden.</translation>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
+      <translation>Die Ausnahme '{0}' wurde mehrfach abgefangen. Nur das erste 'except{1}' wird berücksichtigt und alle anderen 'except{1}' Blöcke können entfernt werden.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
@@ -56170,8 +56175,8 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
-      <translation>Die Verwendung von 'except ():' mit eine leeren Tuple fangt nichts ab. Füge zu behandelnde Exceptions hinzu.</translation>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <translation>Die Verwendung von 'except{0} ():' mit eine leeren Tuple fangt nichts ab. Füge zu behandelnde Exceptions hinzu.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="447" />
@@ -56210,7 +56215,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation>'__init__' Methoden einer Klasse dürfen keinen Wert zurückgeben oder yielden.</translation>
     </message>
     <message>
@@ -56224,156 +56229,171 @@
       <translation>Ausnahme mit hinzugefügtem Hinweis nicht verwendet. Wurde vergessen, sie auszulösen?</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation>Wiederholtes Schlüssel-Wert-Paar in Dictionary Literal.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation>Die Bearbeitung der veränderbaren Iterablen einer Schleife führt oft zu unerwarteten Ergebnissen/Fehlern.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation>unnötige f-Zeichenkette</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation>unnötige f-Zeichenkette</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation>als erstes Argument von 'super()' kann nicht 'self.__class__' verwendet werden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation>{0} Format gefunden</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
-      <translation>Formatstring enthält nicht indizierte Parameter</translation>
+      <source>found {0} formatter</source>
+      <translation>{0} Format gefunden</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation>Dokumentationsstring enthält nicht indizierte Parameter</translation>
+      <source>format string does contain unindexed parameters</source>
+      <translation>Formatstring enthält nicht indizierte Parameter</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
-      <translation>Anderer String enthält nicht indizierte Parameter</translation>
+      <source>docstring does contain unindexed parameters</source>
+      <translation>Dokumentationsstring enthält nicht indizierte Parameter</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
-      <translation>Format Aufruf enthält zu großen Index ({0})</translation>
+      <source>other string does contain unindexed parameters</source>
+      <translation>Anderer String enthält nicht indizierte Parameter</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation>Format Aufruf verwendet fehlendes Schlüsselwort ({0})</translation>
+      <source>format call uses too large index ({0})</source>
+      <translation>Format Aufruf enthält zu großen Index ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
-      <translation>Format Aufruf verwendet Schlüsselwort Argumente, enthält aber keine benannten Einträge</translation>
+      <source>format call uses missing keyword ({0})</source>
+      <translation>Format Aufruf verwendet fehlendes Schlüsselwort ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
-      <translation>Format Aufruf verwendet variable argumente, enthält aber keine nummerierten Einträge</translation>
+      <source>format call uses keyword arguments but no named entries</source>
+      <translation>Format Aufruf verwendet Schlüsselwort Argumente, enthält aber keine benannten Einträge</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
-      <translation>Format Aufruf verwendet sowohl implizite als auch explizite Indizes</translation>
+      <source>format call uses variable arguments but no numbered entries</source>
+      <translation>Format Aufruf verwendet variable argumente, enthält aber keine nummerierten Einträge</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
-      <translation>Format Aufruf verwendet ungenutzten Index ({0})</translation>
+      <source>format call uses implicit and explicit indexes together</source>
+      <translation>Format Aufruf verwendet sowohl implizite als auch explizite Indizes</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation>Format Aufruf verwendet ungenutzten Index ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation>Format Aufruf verwendet ungenutztes Schlüsselwort ({0})</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation>erwartete __future__ Imports: {0}; aber nur {1} gefunden</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation>erwartete __future__ Imports: {0}; aber nur {1} gefunden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation>erwartete __future__ Imports: {0}; jedoch keine gefunden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation>gettext Import mit Alias _ entdeckt: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation>print Statement gefunden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation>Tuple mit einem Element gefunden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation>veränderbares Standardargument des Typs {0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation>veränderbares Standardargument des Typs {0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation>Funktionsaufruf '{0}' als veränderbares Standardargument</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation>None sollte nicht zu einem return hinzugefügt werden, wenn die Funktion keinen Rückgabewert außer None besitzt</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation>ein expliziter Wert sollte jedem return hinzugefügt werden, wenn eine Funktion einen Rückgabewert außer None besitzt</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation>ein expliziter Rückgabewert sollte am Ende einer Funktion hinzugefügt werden, wenn sie einen Rückgabewert außer None besitzt</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation>einer Variable sollte kein Wert zugewiesen werden, wenn sie nur als Rückgabewert verwendet wird</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation>ziehe eine implizite Zeilenfortsetzung innerhalb von Klammern gegenüber einem Backslash (\) vor</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation>implizit verkettete String- oder Bytes-Literale in einer Zeile</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
-      <translation>implizit verkettete String- oder Byte-Literale über die Fortsetzungszeile</translation>
+      <source>implicitly concatenated string or bytes literals on one line</source>
+      <translation>implizit verkettete String- oder Bytes-Literale in einer Zeile</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation>implizit verkettete String- oder Byte-Literale über die Fortsetzungszeile</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation>explizit verkettete Zeichenfolgen oder Bytes sollten implizit verkettet werden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation>auskommentierte Codezeilen sollten entfernt werden</translation>
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation>Prüfung auf einen Standardwert sollte eine `ValueError`-Ausnahme auslösen</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation>Prüfung auf einen Standardwert sollte kein `return`-Statement vor einer `ValueError`-Ausnahme besitzen</translation>
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58451,21 +58471,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation>os.path.splitext('foo.bar') sollte durch foo_path.suffix ersetzt werden</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation>os.path.splitext('foo.bar') sollte durch foo_path.stem und foo_path.suffix ersetzt werden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation>os.path.relpath('/bar/foo', start='bar') sollte durch foo_path.relative_to('/bar') ersetzt werden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation>open('foo') sollte durch Path('foo').open() ersetzt werden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation>py.path.local ist im Wartungsmodus. Verwende stattdessen pathlib</translation>
     </message>
@@ -59626,164 +59646,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation>python endete mit einem Fehler ({0}).</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation>python endete nicht innerhalb 30 Sekunden.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation>python konnte nicht gestarted werden.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation>&lt;Projekt&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation>Interpreter für virtuelle Umgebung</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation>Interpreter für virtuelle Umgebung</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation>Für die gewählte virtuelle Umgebung ist kein Interpreter konfiguriert.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation>PIP installieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation>PIP reparieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation>Pakete aktualisieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation>Es sind keine Pakete außer 'eric-ide' und 'PyQt6' für eine Aktualisierung übrig.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation>Pakete installieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation>Pakete gem. Anforderungen installieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation>Projekt installieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation>Abhängigkeiten gem. 'pyproject' installieren</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation>Die ausgewählte 'pyproject.toml' Datei enthält keinen 'project.dependencies' Abschnitt. Abbruch...</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation>Abhängigkeiten gem. 'pyproject' installieren</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation>Die ausgewählte 'pyproject.toml' Datei enthält keinen 'project.dependencies' Abschnitt. Abbruch...</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die ausgewählte 'pyproject.toml' Datei konnte nicht gelesen werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation>Pakete gem. 'pyproject.toml' installieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation>Pakete deinstallieren</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation>Pakete deinstallieren</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation>Sollen diese Pakete wirklich deinstalliert werden?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation>Pakete gem. Anforderungen deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation>Abhängigkeiten gem. 'pyproject' deinstallieren</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation>Abhängigkeiten gem. 'pyproject' deinstallieren</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Die ausgewählte 'pyproject.toml' Datei konnte nicht gelesen werden.&lt;/p&gt;&lt;p&gt;Ursache: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation>Pakete gem. 'pyproject.toml' deinstallieren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation>Zwischenspeicherinformationen</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation>Liste zwischengespeicherte Dateien</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation>Gib ein Dateinamenmuster ein (leer für alle):</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation>Zwischengespeicherte Dateien Löschen</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation>Gib ein Dateinamenmuster ein:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation>Zwischenspeicher Leeren</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation>Soll der pip Zwischenspeicher wirklich geleert werden? Alle Dateien müssen neu heruntergeladen werden.</translation>
     </message>
@@ -60544,6 +60564,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation>Gib den Paketsuchtext ein</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation>Paketsuche</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation>Ansichtstyp</translation>
     </message>
@@ -60693,18 +60723,18 @@
       <translation>Ermittle veraltete Pakete...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation>Environment bereinigen</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation>Die Bereinigung des Environments war erfolgreich.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation>Einige übrig gebliebene Paketverzeichnisse konnten nicht entfernt werden. Lösche diese manuell.</translation>
     </message>
@@ -60885,13 +60915,13 @@
       <translation>Advisory:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation>unbekannt</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation>beliebig</translation>
     </message>
@@ -60991,6 +61021,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation>'Conda' Umgebungen nicht anzeigen</translation>
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation>Liste der Abhängigkeiten</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation>Suchmarkenhintergrund:</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation>Wähle die Farbe für die Suchmarke der Abhängigkeitsliste.</translation>
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62336,18 +62381,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Einstellungen exportieren</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation>Properties-Dateien (*.ini);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Einstellungen importieren</translation>
     </message>
@@ -69256,6 +69301,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation>Positionsargument für Field Argument 'default'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation>nicht annotiertes Attribut im Pydantic Modell</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation>überflüssiger Field Aufruf, um den Standardwert anzugeben</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation>'default' Argument in 'Annotated' spezifiziert</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation>Feldname überschreibt eine Annotation</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation>doppelter Feldname</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation>Verwendung von '__pydantic_config__'; verwende den 'with_config' Dekorator</translation>
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74269,343 +74352,328 @@
       <translation>'contextlib.suppress()' entdeckt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation>Aufruf von {0} ohne Timeout.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation>Aufruf von {0} mit Timeout auf None gesetzt.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation>Eine Flask Anwendung scheint mit debug=True ausgeführt zu werden. Dies öffnet den Werkzeug Debugger und erlaubt die Ausführung beliebigen Codes.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation>Verwendung von  'tarfile.extractall(members=function(tarfile))'. Stelle sicher, dass die Funktion gefährliche Elemente ordnungsgemäß aussortiert ({0}).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation>'tarfile.extractall(members=?)' gefunden, konnte aber den Typ der Elemente nicht identifizieren. Prüfe, ob die Elemente ordnungsgemäß validiert wurden ({0}).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation>'tarfile.extractall()' ohne jegliche Validierung verwendet. Bitte überprüfe und verwerfe gefährliche Elemente.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation>Pickle und Module, die es einbinden, können unsicher sein, wenn es verwendet wird, um nicht vertrauenswürdige Daten zu deserialisieren; mögliches Sicherheitsproblemk.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation>Deserialisierung mit dem marshal Modul ist möglicherweise unsicher.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation>Verwendung einer unsicheren MD2, MD4, MD5 oder SHA1 Hashfunktion.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation>Verwendung der unsicheren Verschlüsselung '{0}'. Ersetze sie durch eine bekannt sichere Verschlüsselung wie z.B. AES.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation>Verwendung des unsicheren Verschlüsselungsmodus '{0}'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation>Verwendung einer unsicher und abgekündigten Funktion (mktemp).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation>Verwendung einer möglicherweise unsicheren Funktion - verwende besser ast.literal_eval.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation>Verwendung von mark_safe() kann eine Cross Site Scripting Schwäche eröffnen und sollte vermieden werden.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation>Überprüfe 'url open' auf zugelassene Schemata. Das Zulassen von file:/ oder eigenen Schemata ist oft unerwartet.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation>Standardzufallszahlengeneratoren sind ungeeignet für den Einsatz im Bereich Sicherheit/Kryptographie.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation>Telnet-Funktionen werden verwendet. Telnet wird als unsicher angesehen. Verwende SSH oder ein anderes verschlüsseltes Protokoll.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation>Verwendung von '{0}', um nicht vertrauenswürdige XML Daten zu parsen, ist bekannt für XML Attacken. Ersetze '{0}' mit ihrer äquivalenten defusedxml Funktion oder stelle den Aufruf von defusedxml.defuse_stdlib() sicher.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation>Verwendung von '{0}', um nicht vertrauenswürdige XML Daten zu parsen, ist bekannt für XML Attacken. Ersetze '{0}' mit ihrer äquivalenten defusedxml Funktion.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation>FTP-Funktionen werden verwendet. FTP wird als unsicher angesehen. Verwende SSH/SFTP/SCP oder ein anderes verschlüsseltes Protokoll.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation>Die input Method von Python 2 liest Eingaben von der Standardeingabe, verarbeitet sie und führt die resultierende Zeichenkette als Python Quelltext aus. Dies ist vergleichbat und in manchen Fällen schlimmer als die Verwendung von eval(). Verwende mit Python 2 raw_input(). input() ist in Python3 sicher.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation>Standardmäßig erzeugt Python einen sicheren, verifizierten SSL Kontext zur Verwendung in Klassen wie HTTPSConnection. Allerdings ist immer noch die Verwendung eines unsicheren Kontextes via _create_unverified_context() möglich. Dies kehrt zum alten Verhalten ohne Validierung von Zertifikaten und Prüfung des Hostnamens zurück.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation>Verwendung der unsicheren Hashfunktion {0}.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation>Verwendung eines unsicheren {0}-Hashes für die Sicherheit. Verwende 'usedforsecurity=False'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation>Ein telnet verwandtes Modul wird eingebunden. Telnet wird als unsicher angesehen. Verwende SSH oder ein anderes verschlüsseltes Protokoll.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation>Ein FTP verwandtes Modul wird eingebunden. FTP wird als unsicher angesehen. Verwende SSH/SFTP/SCP oder ein anderes verschlüsseltes Protokoll.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation>Überprüfe mögliche Sicherheitsauswirkungen, die mit dem '{0}' Modul verbunden sind.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation>Verwendung von '{0}', um nicht vertrauenswürdige XML Daten zu parsen, ist bekannt für XML Attacken. Ersetze '{0}' mit ihrer äquivalenten defusedxml Paket oder stelle den Aufruf von defusedxml.defuse_stdlib() sicher.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation>Verwendung von '{0}', um nicht vertrauenswürdige XML Daten zu parsen, ist bekannt für XML Attacken. Ersetze '{0}' mit ihrer äquivalenten defusedxml Paket.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation>Verwendung von '{0}', um nicht vertrauenswürdige XML Daten zu parsen, ist bekannt für XML Attacken. Verwende die defusedxml.xmlrpc.monkey_patch().Funktion, um die xmlrpclib zu patchen und XML Verwundbarkeiten abzuschwächen.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation>Überprüfe mögliche Sicherheitsauswirkungen, die mit dem '{0}' Modul verbunden sind.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation>Die pyCrypto Bibliothek und ihr Modul '{0}' werden nicht mehr länger gepflegt und sind veraltet. Setze die pyca/cryptography Bibliothek ein.</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation>Es wird ein IPMI-bezogenes Modul importiert. IPMI gilt als unsicher. Verwende ein verschlüsseltes Protokoll.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation>'requests' Aufruf mit verify=False schaltet SSL Zertifikatsprüfungen aus; Sicherheitsproblem.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation>'ssl.wrap_socket' Aufruf mit unsicherer SSL/TLS Protokollversion erkannt; Sicherheitsproblem.</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation>Es wird ein IPMI-bezogenes Modul importiert. IPMI gilt als unsicher. Verwende ein verschlüsseltes Protokoll.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation>'requests' Aufruf mit verify=False schaltet SSL Zertifikatsprüfungen aus; Sicherheitsproblem.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation>'ssl.wrap_socket' Aufruf mit unsicherer SSL/TLS Protokollversion erkannt; Sicherheitsproblem.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation>'SSL.Context' Aufruf mit unsicherer SSL/TLS Protokollversion erkannt; Sicherheitsproblem.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation>Funktionsaufruf mit unsicherer SSL/TLS Protokollversion erkannt; Sicherheitsproblem.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation>Funktionsdefinition mit unsicherer SSL/TLS Protokollversion als Standardwert; Sicherheitsproblem.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation>'ssl.wrap_socket' Aufruf mit keiner Angabe der SSL/TLS Protokollversion. Der Standardwert 'SSLv23' könnte unsicher sein. Mögliches Sicherheitsproblem.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation>{0} Schlüssellängen kleiner {1:d} Bit werden als knackbar angesehen.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation>Verwendung der unsicheren 'yaml.load()' Funktion. Sie erlaubt die Erzeugung beliebiger Objekte. Verwende 'yaml.safe_load()'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation>Paramiko Aufruf mit einer gesetzte Policy, die automatisch einem unbekannten Host vertraut.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation>Die Verwendung von SNMPv1 und SNMPv2 ist unsicher. Wenn möglich sollte SNMPv3 verwendet werden.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation>SNMPv3 sollte nicht ohne Verschlüsselung verwendet werden. noAuthNoPriv &amp; authNoPriv ist unsicher.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation>Mögliche Shell Injection über einen 'Paramiko' Aufruf. Prüfe, dass Eingaben korrekt abgesichert werden.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation>'subprocess' Aufruf mit shell=True erscheint sicher, mag sich aber zukünftig ändern. Schreibe ihn ohne shell um</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation>'subprocess' Aufruf mit shell=True erkannt; Sicherheitsproblem.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation>'subprocess' Aufruf - überprüfe auf Ausführung nicht vertrauenswürdiger Eingaben.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation>Funktionsaufruf mit shell=True erkannt; mögliches Sicherheitsproblem.</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation>Erzeugung eines Prozesses mit einer Shell: erscheint sicher, mag sich aber in Zukunft ändern. Schreibe ihn ohne Shell Verwendung um</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation>Erzeugung eines Prozesses mit einer Shell, mögliche Injektion erkannt; Sicherheitsproblem.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation>Starten eines Prozesses ohne Shell.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation>Starten eines Prozesses mit einem teilweisen Programmpfad.</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
-      <translation>Erzeugung eines Prozesses mit einer Shell: erscheint sicher, mag sich aber in Zukunft ändern. Schreibe ihn ohne Shell Verwendung um</translation>
+      <source>Possible SQL injection vector through string-based query construction.</source>
+      <translation>Mögliche SQL Injektion durch Zeichenketten basierten Aufbau einer Abfrage.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation>Erzeugung eines Prozesses mit einer Shell, mögliche Injektion erkannt; Sicherheitsproblem.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation>Starten eines Prozesses ohne Shell.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation>Starten eines Prozesses mit einem teilweisen Programmpfad.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation>Mögliche SQL Injektion durch Zeichenketten basierten Aufbau einer Abfrage.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation>Mögliche Wildcard Injektion im Aufruf: {0}</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation>Verwendung von 'extra()' eröffnet einen möglichen SQL Angriffsvektor.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation>Verwendung von 'RawSQL()' eröffnet einen möglichen SQL Angriffsvektor.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation>Verwendung eines unsicheren 'logging.config.listen()' Aufrufes entdeckt.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation>Die Python Quelledatei enthält bidirektionale Kontrollzeichen ({0}).</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation>Verwendung von 'extra()' eröffnet einen möglichen SQL Angriffsvektor.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation>Verwendung von 'RawSQL()' eröffnet einen möglichen SQL Angriffsvektor.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation>Verwendung eines unsicheren 'logging.config.listen()' Aufrufes entdeckt.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
-      <translation>Die Python Quelledatei enthält bidirektionale Kontrollzeichen ({0}).</translation>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation>Verwendung von unsicherem PyTorch 'load' oder 'save'.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation>Verwendung von Jinja Templates mit 'autoescape=False' ist gefährlich und führt zu XSS. Verwende 'autoescaoe=True' oder wähle die 'select_autoescape' Funktion zur Abschwächung von XSS Verwundbarkeiten.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation>Als Standard setzt Jinja2 'autoescape' auf False. Verwende 'autoescaoe=True' oder wähle die 'select_autoescape' Funktion zur Abschwächung von XSS Verwundbarkeiten.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation>Verwendung von unsicherem PyTorch 'load' oder 'save'.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation>Verwendung von Jinja Templates mit 'autoescape=False' ist gefährlich und führt zu XSS. Verwende 'autoescaoe=True' oder wähle die 'select_autoescape' Funktion zur Abschwächung von XSS Verwundbarkeiten.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation>Als Standard setzt Jinja2 'autoescape' auf False. Verwende 'autoescaoe=True' oder wähle die 'select_autoescape' Funktion zur Abschwächung von XSS Verwundbarkeiten.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation>Mako Templates als Standard das Rendering von HTML/JS und sind damit offen für XSS Angriffe. Stelle sicher, dass alle in Templates verwendeten Variablen über die 'n', 'h' oder 'x' Flags abgesichert sind (abhängig vom Kontext). Verwende z.B. zur Absicherung der HTML Variablen 'data' den Ausdruck '${{ data |h }}.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation>Potentielle XSS auf die 'mark_safe()' Funktion.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation>Mögliche einprogrammierte AWS Zugriffsschlüssel-ID: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation>Möglicher einprogrammierter geheimer AWS Zugriffsschlüssel: {0}</translation>
     </message>
@@ -77048,10 +77116,10 @@
       <translation>Verwende "all({0} for {1} in {2})"</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77208,22 +77276,27 @@
       <translation>Verwende Keyword Argument anstatt 'Magic Number'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation>f-Zeichenketten sollten nicht verschachtelt werden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation>Initialisiere Dictionary "{0}" direkt</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation>Verwende "Optional[{0}]" anstatt "{1}"</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation>Verwende "Optional[{0}]" anstatt "{1}"</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation>Reflexive Zuordnung "{0}" entfernen</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation>Verwende "{0}.items() anstelle von "zip({0}.keys(), {0}.values())"</translation>
     </message>
@@ -87585,7 +87658,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Um Variablen in einer Vorlage zu verwenden, muss der Variablenname mit einem $-Zeichen umschlossen werden. Wenn die Vorlage angewandt wird, wird nach einem Wert für diese Variable gefragt.&lt;/p&gt;&lt;p&gt;Beispiel: Dies ist eine $Variable$&lt;/p&gt;&lt;p&gt;Wenn diese Vorlage angewandt wird, wird nach einem Wert für die Variable $Variable$ gefragt. Jedes Vorkommen von $Variable$ wird dann durch den eingegebenen Text ersetzt.&lt;/p&gt;&lt;p&gt;Wird in der Vorlage ein einzelnes $-Zeichen, das keine Variable umschließt, benötigt, so muss dies als $$ (zwei Dollar Zeichen) geschrieben werden. Bei der Anwendung der Vorlage wird dies automatisch zu einem $-Zeichen.&lt;/p&gt;&lt;p&gt;Soll der Wert einer Variablen speziell behandelt werden, so muss dem Variablennamen ein „:“ und eine Formatangabe folgen (z.B. $Variable:ml$). Die unterstützten Formatangaben sind:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Gibt ein mehrzeiliges Format an. Der ersten Zeile des Variablenwertes wird die Zeichenkette vor der Variablen der gleichen Zeile in der Vorlage vorangestellt. Allen anderen wird soviel Leerraum vorangestellt, wie die Zeile der Variablen.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Gibt ein wiederholendes Format an. Jede Zeile des Variablenwertes wird die Zeichenkette vor der Variablen der gleichen Zeile in der Vorlage vorangestellt.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Die folgenden vordefinierten Variablen können in einer Vorlage verwendet werden:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;das aktuelle Datum im ISO-Format (JJJJ-MM-TT)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;das aktuelle Jahr&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;die aktuelle Zeit im ISO-Format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;der Name des Projektes (falls vorhanden)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;der Pfad des Projektes (falls vorhanden)/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;voller Pfadname der aktuellen Datei&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;Pfadname der aktuellen Datei relativ zum Projekt&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;voller Pfadname des Verzeichnisses der aktuellen Datei&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;Pfadname des Verzeichnisses der aktuellen Datei relativ zum Projekt&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;Dateiname der aktuellen Datei (ohne Verzeichnis)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;wie &lt;i&gt;file_name&lt;/i&gt;, aber ohne Erweiterung&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;die Erweiterung der aktuellen Datei&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;der aktuell ausgewählte Text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Setzt den Cursor an diese Stelle nachdem das Template eingefügt wurde.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Setzt die Auswahl nachdem das Template eingefügt wurde (verwendet zusammen mit „select_end“).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Setzt die Auswahl nachdem das Template eingefügt wurde (verwendet zusammen mit „select_start“).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;der Text der Zwischenablage&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Soll das einen Variablennamen umschließende Zeichen geändert werden, so kann dies im Konfigurationsdialog geschehen.&lt;/p&gt;</translation>
     </message>
   </context>
@@ -90065,133 +90138,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h3&gt;CircuitPython Gerät&lt;/h3&gt;&lt;p&gt;Um das Gerät zum Flashen vorzubereiten, folgen sie den folgenden Schritten:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Aktiviere den 'Bootloader' Modus durch zweimaliges Drücken des Reset Knopfes.&lt;/li&gt;&lt;li&gt;Warten sie, bis das Gerät den 'Bootloader' Modus eingenommen hat.&lt;/li&gt;&lt;li&gt;(Falls dies nicht erfolgt, versuchen sie es mit einer kürzeren oder längeren Pause zwischen den Drücken.)&lt;/li&gt;&lt;li&gt;Stellen sie sicher, dass der Boot Datenträger verfügbar ist (evtl. ist er zu mounten).&lt;/li&gt;&lt;li&gt;Wählen sie die zu flashende Firmwaredatei und klicken sie den Flash Knopf.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h3&gt;Pi Pico (RP2040/RP2350) Gerät&lt;/h3&gt;&lt;p&gt;Um das Gerät zum Flashen vorzubereiten, folgen sie den folgenden Schritten:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;'Bootloader' Modus aktivieren (Gerät &lt;b&gt;ohne&lt;/b&gt; RESET Knopf):&lt;ul&gt;&lt;li&gt;Verbinden sie das Gerät während der BOOTSEL Knopf gedrückt gehalten wird.&lt;/li&gt;&lt;/ul&gt;'Bootloader' Modus aktivieren (Gerät &lt;b&gt;mit&lt;/b&gt; RESET Knopf):&lt;ul&gt;&lt;li&gt;RESET drücken und halten&lt;/li&gt;&lt;li&gt;BOOTSEL drücken und halten&lt;/li&gt;&lt;li&gt;RESET loslassen&lt;/li&gt;&lt;li&gt;BOOTSEL loslassen&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Warten sie, bis das Gerät den 'Bootloader' Modus eingenommen hat.&lt;/li&gt;&lt;li&gt;Stellen sie sicher, dass der Boot Datenträger verfügbar ist (evtl. ist er zu mounten).&lt;/li&gt;&lt;li&gt;Wählen sie die zu flashende Firmwaredatei und klicken sie den Flash Knopf.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation>MicroPython/CircuitPython Dateien (*.uf2);;Alle Dateien (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation>Manuelle Auswahl</translation>
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation>Reset Instruktionen:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Kein bekanntes Gerät erkannt.&lt;/h4&gt;&lt;p&gt;Folgen sie den entsprechenden Anweisungen, um &lt;b&gt;ein&lt;/b&gt; Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation>&lt;h4&gt;{0} Firmware flashen&lt;/h4&gt;&lt;p&gt;Folgen sie den Anweisungen, um &lt;b&gt;ein&lt;/b&gt; Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;&lt;hr/&gt;{1}</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation>Reset Instruktionen:</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Kein bekanntes Gerät erkannt.&lt;/h4&gt;&lt;p&gt;Folgen sie den entsprechenden Anweisungen, um &lt;b&gt;ein&lt;/b&gt; Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation>&lt;h4&gt;{0} Firmware flashen&lt;/h4&gt;&lt;p&gt;Folgen sie den Anweisungen, um &lt;b&gt;ein&lt;/b&gt; Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;&lt;hr/&gt;{1}</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>&lt;h4&gt;Potentiell UF2 fähige Geräte gefunden&lt;/h4&gt;&lt;p&gt;Es wurde folgende potentiell UF2 fähige Geräte gefunden:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Folgen sie den Anweisungen, um &lt;b&gt;ein&lt;/b&gt; Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>&lt;h4&gt;Keine bekannten Geräte erkannt.&lt;/h4&gt;&lt;p&gt;Folgen sie den Anweisungen, um &lt;b&gt;ein&lt;/b&gt; Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation>Flash Instruktionen:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h4&gt;Flash Method 'manuell' ausgewählt.&lt;/h4&gt;Folgen sie den Anweisungen, um ein Gerät mit manueller Eingabe der Parameter zu flashen.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Bringen sie das Gerät in den 'Bootloader' Modus.&lt;/li&gt;&lt;li&gt;Warten sie, bis das Gerät den 'Bootloader' Modus eingenommen hat.&lt;/li&gt;&lt;li&gt;Stellen sie sicher, dass der Boot Datenträger verfügbar ist (evtl. ist er zu mounten).&lt;/li&gt;&lt;li&gt;Wählen sie die zu flashende Firmwaredatei und klicken sie den Flash Knopf.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation>Boot Datenträger nicht gefunden:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation>&lt;h4&gt;Es wurde kein Boot Datenträger gefunden.&lt;/h4&gt;&lt;p&gt;Bitte stellen sie sicher, dass der Boot Datenträger für das zu flashende Gerät verfügbar ist. </translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>Dieser Datenträger sollte die Bezeichnung &lt;b&gt;{0}&lt;/b&gt; haben. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>Dieser Datenträger sollte eine dieser Bezeichnungen haben.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Reset Instruktionen&lt;/h4&gt;&lt;p&gt;Folgen sie den Anweisungen, um das Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Reset Instruktionen&lt;/h4&gt;&lt;p&gt;Folgen sie den Anweisungen, um das Gerät in den 'Bootloader' Modus zu versetzen. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation>Mehrere Boot Datenträger erkannt:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Mehrere Boot Datenträger wurden erkannt&lt;/h4&gt;&lt;p&gt;Diese Datenträgerpfade wurden erkannt.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Bitte stellen sie sicher, dass nur ein Gerät zum Flashen bereit ist. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Mehrere Boot Datenträger wurden erkannt&lt;/h4&gt;&lt;p&gt;Diese Datenträgerpfade wurden erkannt.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Bitte stellen sie sicher, dass nur ein Gerät zum Flashen bereit ist. Drücken sie &lt;b&gt;Aktualisieren&lt;/b&gt;, wenn sie bereit sind.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation>Flashe Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Flashe die ausgewählte Firmware auf das Gerät. Bitte warten Sie bis sich das Gerät automatisch resettet.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation>Flashe {0}</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Flashe die {0} Firmware auf das Gerät. Bitte warten sie, bis sich das Gerät automatisch resettet.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation>UF2 Gerät flashen</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation>Keine 'boot' Verzeichnisse für UF2 Gerät gefunden.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation>Wähle das Bootverzeichnis des Gerätes:</translation>
     </message>
@@ -106458,406 +106531,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation>Einrückung enthält einen Mix aus Leerzeichen und Tabulatoren</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation>Einrückung ist kein Mehrfaches von Vier</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation>ein eingerückter Block wurde erwartet</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
-      <translation>unerwartete Einrückung</translation>
+      <source>expected an indented block</source>
+      <translation>ein eingerückter Block wurde erwartet</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation>unerwartete Einrückung</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation>Einrückung ist kein Mehrfaches von Vier (Kommentar)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation>ein eingerückter Block wurde erwartet (Kommentar)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation>unerwartete Einrückung (Kommentar)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation>zu weit eingerückt</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation>zu weit eingerückt</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation>Einrückung der Fortsetzungszeile ist kein Vielfaches von Vier</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation>fehlende Einrückung der Fortsetzungzeile oder sie wurde ausgerückt</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation>Einrückung der schließenden Klammer ungleich der Zeile der öffnenden Klammer</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation>schließende Klammer passt nicht zur visuellen Einrückung</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation>Einrückung der Fortsetzungszeile unterscheidet sich nicht von der nächsten logischen Zeile</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation>Fortsetzungszeile zu weit eingerückt für hängende Einrückung</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation>Fortsetzungszeile zu weit eingerückt für visuelle Einrückung</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation>Fortsetzungszeile zu wenig eingerückt für visuelle Einrückung</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation>visuelle Einrückung identisch mit der Einrückung der nächsten logischen Zeile</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation>Fortsetzungszeile für hängenden Einrückung nicht richtig ausgerichtet</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation>Einrückung bei schließender Klammer fehlt</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation>Leerzeichen nach „{0}“</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation>Leerzeichen vor „{0}“</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation>Leerzeichen vor „{0}“</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation>Leerzeichen nach Dekorator '@'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation>mehrfache Leerzeichen vor Operator</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation>mehrfache Leerzeichen nach Operator</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation>Tabulator vor Operator</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
-      <translation>Tabulator nach Operator</translation>
+      <source>multiple spaces before operator</source>
+      <translation>mehrfache Leerzeichen vor Operator</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
-      <translation>fehlende Leerzeichen um Operator</translation>
+      <source>multiple spaces after operator</source>
+      <translation>mehrfache Leerzeichen nach Operator</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation>Tabulator vor Operator</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation>Tabulator nach Operator</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation>fehlende Leerzeichen um Operator</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation>fehlende Leerzeichen um Arithmetikoperator</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation>fehlende Leerzeichen um Bit- oder Shiftoperator</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation>fehlende Leerzeichen um Modulooperator</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation>fehlende Leerzeichen nach „{0}“</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation>mehrfache Leerzeichen nach „{0}“</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation>Tabulator nach „{0}“</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation>unerwartete Leerzeichen um Schlüsselwort- / Parameter-Gleichheitszeichen</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
-      <translation>fehlende Leerzeichen um Parameter-Gleichheitszeichen</translation>
+      <source>missing whitespace around modulo operator</source>
+      <translation>fehlende Leerzeichen um Modulooperator</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation>fehlende Leerzeichen nach „{0}“</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
+      <translation>mehrfache Leerzeichen nach „{0}“</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation>Tabulator nach „{0}“</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation>unerwartete Leerzeichen um Schlüsselwort- / Parameter-Gleichheitszeichen</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation>fehlende Leerzeichen um Parameter-Gleichheitszeichen</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation>mindestens zwei Leerzeichen vor einem Inline-Kommentar</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation>Inline-Kommentar sollte mit „# “ beginnen</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation>Blockkommentar soll mit '# ' beginnen</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation>zu viele führende '#' für einen Blockkommentar</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation>mehrfache Leerzeichen nach Schlüsselwort</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation>mehrfache Leerzeichen vor Schlüsselwort</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation>Tabulator nach Schlüsselwort</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
-      <translation>Tabulator vor Schlüsselwort</translation>
+      <source>block comment should start with '# '</source>
+      <translation>Blockkommentar soll mit '# ' beginnen</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation>fehlende Leerzeichen nach Schlüsselwort</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation>zu viele führende '#' für einen Blockkommentar</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
-      <translation>erwartete {0} leere Zeilen, {1} gefunden</translation>
+      <source>multiple spaces after keyword</source>
+      <translation>mehrfache Leerzeichen nach Schlüsselwort</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation>mehrfache Leerzeichen vor Schlüsselwort</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation>Tabulator nach Schlüsselwort</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
+      <translation>Tabulator vor Schlüsselwort</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation>zu viele leere Zeilen ({0}), erwartete {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
-      <translation>leere Zeile nach Funktionsdekorator gefunden</translation>
+      <source>missing whitespace after keyword</source>
+      <translation>fehlende Leerzeichen nach Schlüsselwort</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation>erwartete {0} leere Zeilen, {1} gefunden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation>zu viele leere Zeilen ({0}), erwartete {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation>leere Zeile nach Funktionsdekorator gefunden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation>erwartete {0} Leerzeilen nach Klassen- oder Funktionsdefinition, {1} gefunden</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation>erwartete {0} Leerzeilen vor einer geschachtelten Definition, {1} gefunden</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation>zu viele leere Zeilen ({0}) vor einer geschachtelten Definition, erwartete {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation>zu viele leere Zeilen ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation>mehrfache Importe in einer Zeile</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
-      <translation>Modul Import nicht am Dateianfang</translation>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
+      <translation>erwartete {0} Leerzeilen vor einer geschachtelten Definition, {1} gefunden</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation>Zeile zu lang ({0} &gt; {1} Zeichen)</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
-      <translation>Backslash ist redundant innerhalb von Klammern</translation>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation>zu viele leere Zeilen ({0}) vor einer geschachtelten Definition, erwartete {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation>zu viele leere Zeilen ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
+      <translation>mehrfache Importe in einer Zeile</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
-      <translation>mehrere Anweisungen in einer Zeile (Doppelpunkt)</translation>
+      <source>module level import not at top of file</source>
+      <translation>Modul Import nicht am Dateianfang</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
-      <translation>mehrere Anweisungen in einer Zeile (Semikolon)</translation>
+      <source>line too long ({0} &gt; {1} characters)</source>
+      <translation>Zeile zu lang ({0} &gt; {1} Zeichen)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
-      <translation>Anweisung endet mit einem Semikolon</translation>
+      <source>the backslash is redundant between brackets</source>
+      <translation>Backslash ist redundant innerhalb von Klammern</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
-      <translation>mehrere Anweisungen in einer Zeile (def)</translation>
+      <source>multiple statements on one line (colon)</source>
+      <translation>mehrere Anweisungen in einer Zeile (Doppelpunkt)</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
+      <translation>mehrere Anweisungen in einer Zeile (Semikolon)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
-      <translation>Vergleich mit {0} sollte {1} sein</translation>
+      <source>statement ends with a semicolon</source>
+      <translation>Anweisung endet mit einem Semikolon</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation>Test auf Nicht-Mitgliederschaft soll mit 'not in' erfolgen</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
-      <translation>Test auf Ungleichheit der Objekte soll mit 'is not' erfolgen</translation>
+      <source>multiple statements on one line (def)</source>
+      <translation>mehrere Anweisungen in einer Zeile (def)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation>vergleiche keine Typen; für eine genaue Typprüfung verwende 'is' / 'is not', für eine Instanzprüfung verwende 'isinstance()'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
-      <translation>verwende kein leeres 'except'</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation>Vergleich mit {0} sollte {1} sein</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
+      <translation>Test auf Nicht-Mitgliederschaft soll mit 'not in' erfolgen</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
-      <translation>weise keine Lambda Ausdrücke zu, nutze def</translation>
+      <source>test for object identity should be 'is not'</source>
+      <translation>Test auf Ungleichheit der Objekte soll mit 'is not' erfolgen</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation>vergleiche keine Typen; für eine genaue Typprüfung verwende 'is' / 'is not', für eine Instanzprüfung verwende 'isinstance()'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation>verwende kein leeres 'except'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation>weise keine Lambda Ausdrücke zu, nutze def</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation>mehrdeutiger Variablenname '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation>mehrdeutige Klassenbezeichnung '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation>mehrdeutige Funktionsbezeichnung '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation>{0}: {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation>{0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
-      <translation>Einrückung enthält Tabulatoren</translation>
+      <source>{0}: {1}</source>
+      <translation>{0}: {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation>{0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation>Einrückung enthält Tabulatoren</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation>abschließende Leerzeichen</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation>kein Zeilenumbruch am Dateiende</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation>leere Zeile enthält Leerzeichen</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation>leere Zeile am Dateiende</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation>Zeilenumbruch vor Binäroperator</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation>Zeilenumbruch nach Binäroperator</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation>kein Zeilenumbruch am Dateiende</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation>leere Zeile enthält Leerzeichen</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation>leere Zeile am Dateiende</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation>Zeilenumbruch vor Binäroperator</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation>Zeilenumbruch nach Binäroperator</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation>Dokumentationszeile zu lang ({0} &gt; {1} Zeichen)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation>ungültige Escape-Sequenz '\{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation>'async' und 'await' sind ab Python 3.7 reservierte Schlüsselwörter</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_empty.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3883,77 +3883,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
+      <source>Async Functions</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
+      <source>Code Complexity</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
+      <source>Documentation</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
+      <source>Errors</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
+      <source>Imports</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
+      <source>Logging</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
+      <source>Miscellaneous</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
+      <source>Naming</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
+      <source>'pathlib' Usage</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5048,7 +5053,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation type="unfinished" />
     </message>
@@ -6073,59 +6078,59 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6195,226 +6200,226 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation type="unfinished">
         <numerusform />
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <source>Comparison to None/True/False corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
+      <source>'{0}' argument added.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -12465,7 +12470,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation type="unfinished" />
@@ -12748,7 +12753,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation type="unfinished" />
@@ -12809,7 +12814,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation type="unfinished" />
@@ -13053,382 +13058,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
+      <source>Add file...</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
-      <source>EditorConfig Properties</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9977" />
+      <source>EditorConfig Properties</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52563,18 +52568,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -55816,17 +55821,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55881,7 +55886,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55901,7 +55906,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55941,7 +55946,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55955,156 +55960,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58179,21 +58199,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59352,164 +59372,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60270,6 +60290,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60419,18 +60449,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -60611,13 +60641,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -60717,6 +60747,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62057,18 +62102,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation type="unfinished" />
     </message>
@@ -68897,6 +68942,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -73810,343 +73893,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -76570,10 +76638,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -76730,22 +76798,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87042,7 +87115,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -89494,133 +89567,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -105782,406 +105855,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
+      <source>expected an indented block</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
+      <source>multiple spaces before operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
+      <source>multiple spaces after operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
+      <source>block comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
+      <source>missing whitespace after keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
+      <source>module level import not at top of file</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
+      <source>line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
+      <source>the backslash is redundant between brackets</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
+      <source>{0}: {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_en.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_en.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3884,77 +3884,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
+      <source>Async Functions</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
+      <source>Code Complexity</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
+      <source>Documentation</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
+      <source>Errors</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
+      <source>Imports</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
+      <source>Logging</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
+      <source>Miscellaneous</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
+      <source>Naming</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
+      <source>'pathlib' Usage</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5049,7 +5054,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation type="unfinished" />
     </message>
@@ -6074,59 +6079,59 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6196,146 +6201,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation>
         <numerusform>%n blank line inserted.</numerusform>
@@ -6343,7 +6348,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation>
         <numerusform>%n superfluous line removed</numerusform>
@@ -6351,73 +6356,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <source>Comparison to None/True/False corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
+      <source>'{0}' argument added.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -12481,7 +12486,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation type="unfinished" />
@@ -12764,7 +12769,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation type="unfinished" />
@@ -12825,7 +12830,7 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation type="unfinished" />
@@ -13069,382 +13074,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
+      <source>Add file...</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
-      <source>EditorConfig Properties</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9977" />
+      <source>EditorConfig Properties</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52606,18 +52611,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -55866,17 +55871,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55931,7 +55936,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55951,7 +55956,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -55991,7 +55996,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56005,156 +56010,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58229,21 +58249,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59404,164 +59424,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60322,6 +60342,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60471,18 +60501,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -60663,13 +60693,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -60769,6 +60799,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62109,18 +62154,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation type="unfinished" />
     </message>
@@ -68951,6 +68996,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -73864,343 +73947,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -76624,10 +76692,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -76784,22 +76852,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87097,7 +87170,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -89554,133 +89627,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -105847,406 +105920,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
+      <source>expected an indented block</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
+      <source>multiple spaces before operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
+      <source>multiple spaces after operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
+      <source>block comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
+      <source>missing whitespace after keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
+      <source>module level import not at top of file</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
+      <source>line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
+      <source>the backslash is redundant between brackets</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
+      <source>{0}: {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_es.qm has changed
--- a/src/eric7/i18n/eric7_es.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_es.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3914,77 +3914,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation>Anotaciones</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation>Funciones Async</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
-      <translation>Complejidad del Código</translation>
+      <source>Async Functions</source>
+      <translation>Funciones Async</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation>Documentación</translation>
+      <source>Code Complexity</source>
+      <translation>Complejidad del Código</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation>Errores</translation>
+      <source>Documentation</source>
+      <translation>Documentación</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation>Imports</translation>
+      <source>Errors</source>
+      <translation>Errores</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
-      <translation>Logging</translation>
+      <source>Imports</source>
+      <translation>Imports</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
-      <translation>Miscelanea</translation>
+      <source>Logging</source>
+      <translation>Logging</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
-      <translation>Nomenclatura</translation>
+      <source>Miscellaneous</source>
+      <translation>Miscelanea</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
-      <translation>Orden de Nombre</translation>
+      <source>Naming</source>
+      <translation>Nomenclatura</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
-      <translation>Uso de 'pathlib'</translation>
+      <source>Name Order</source>
+      <translation>Orden de Nombre</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation>Seguridad</translation>
+      <source>'pathlib' Usage</source>
+      <translation>Uso de 'pathlib'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation>Uso de 'pydantic' y 'dataclass'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation>Seguridad</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation>Sin utilizar</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation>Advertencias</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation>Simplificar Código</translation>
     </message>
@@ -5086,7 +5091,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation>No hay mensaje definido para el código '{0}'.</translation>
     </message>
@@ -6113,59 +6118,59 @@
       <translation>Filtrar</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation>Muestra el progreso de la comprobación del estilo de código</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation>Eric</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation>Eric (Oscurecido)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation>Errores</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation>Error: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation>{0} (ignorado)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation>No se han encontrado problemas.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation>No se han encontrado problemas.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation>No se han encontrado archivos (comprobar lista de ignorados).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation>{0} - {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation>Patrón de lista blanca para comentarios en código</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation>Introducir un patrón de lista blanca para comentarios en código</translation>
     </message>
@@ -6235,146 +6240,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation>Triple comilla simple convertida a triple comilla doble.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation>Comillas introductorias corregidas para ser {0}"""</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation>Docstrings de una sola línea puestos en una sola línea.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation>Coma añadida a la línea de resumen.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation>Línea en blanco antes de docstring de función/método eliminada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation>Linea en blanco insertada delante de docstring de clase.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation>Linea en blanco insertada detrás de docstring.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation>Linea en blanco insertada detrás de docstring de resumen.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation>Linea en blanco insertada detrás de último párrafo de docstring.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation>Comillas iniciales puestas en línea separada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation>Comillas finales puestas en línea separada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation>Línea en blanco antes de docstring de clase eliminada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation>Línea en blanco detrás de docstring eliminada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation>Línea en blanco detrás de docstring de función/método eliminada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation>Linea en blanco detrás de último párrafo eliminada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation>Tabulador convertido a 4 espacios.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation>Indentación ajustada para ser un múltiplo de cuatro.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation>Indentación de línea de continuación corregida.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation>Indentación de llave de cierre corregida.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation>Indentación inexistente en línea de continuación corregida.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation>Llave de cierre alineada a llave de apertura.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation>Nivel de indentación corregida.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation>Nivel de indentación de indentación colgante corregida.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation>Indentación visual corregida.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation>Eliminado espacio en blanco extraño.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation>Añadido espacio en blanco que faltaba.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation>Espacio en blanco alrededor de signo de comentario corregido.</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation>
         <numerusform>Insertada %n línea en blanco.</numerusform>
@@ -6382,7 +6387,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation>
         <numerusform>Eliminada %n línea en blanco sobrante</numerusform>
@@ -6390,73 +6395,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation>Eliminadas líneas en blanco sobrantes.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation>Eliminadas líneas en blanco sobrantes después de decorador de función.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation>Imports estaban puestos en líneas separadas.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation>Líneas largas se han acortado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation>Backslash redundante en llaves eliminado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation>Sentencia compuesta corregida.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation>Comparación a None/True/False corregida.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation>Añadido el argumento '{0}'.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation>Eliminado el argumento '{0}'.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation>Espacio eliminado del final de la línea.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
-      <translation>Carácter de nueva línea añadido al final del archivo.</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
+      <translation>Sentencia compuesta corregida.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
-      <translation>Eliminadas líneas en blanco sobrantes de final de archivo.</translation>
+      <source>Comparison to None/True/False corrected.</source>
+      <translation>Comparación a None/True/False corregida.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
-      <translation>'&lt;&gt;' reemplazado por '!='.</translation>
+      <source>'{0}' argument added.</source>
+      <translation>Añadido el argumento '{0}'.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation>Eliminado el argumento '{0}'.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation>Espacio eliminado del final de la línea.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation>Carácter de nueva línea añadido al final del archivo.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation>Eliminadas líneas en blanco sobrantes de final de archivo.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation>'&lt;&gt;' reemplazado por '!='.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation>¡No se ha podido guardar el archivo! Va a ser omitido. Razón: {0}</translation>
     </message>
@@ -12549,7 +12554,7 @@
       <translation>Sacar de comentario</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation>Generar Docstring</translation>
@@ -12832,7 +12837,7 @@
       <translation>Corrección ortográfica</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Corrección ortográfica...</translation>
@@ -12893,7 +12898,7 @@
       <translation>Editar punto de interrupción...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Activar punto de interrupción</translation>
@@ -13137,370 +13142,370 @@
       <translation>Introducir la ruta completa de archivo del dispositivo:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Autocompletar</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>Autocompletar no está disponible porque no hay origen de datos para autocompletar.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation>Proveedor de Autocompletado</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation>Proveedor de Autocompletado</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation>El proveedor de lista de completado'{0}' ya está registrado. Se ignora la solicitud duplicada.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation>Proveedor de Call-Tips</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation>Proveedor de Call-Tips</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation>El proveedor de call-tips'{0}' ya está registrado. Se ignora la solicitud duplicada.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Deshabilitar punto de interrupción</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>Cobertura de codigo</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>Cobertura de codigo</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>Por favor seleccione un archivo de cobertura</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation>Cargar Datos de Cobertura</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation>Cargar Datos de Cobertura</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Los datos de cobertura no se han podido cargar desde el archivo &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Razón {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>Mostrar Anotaciones de Cobertura de Código</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Todas las líneas han sido cubiertas.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>Mostrar Anotaciones de Cobertura de Código</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Todas las líneas han sido cubiertas.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>No hay archivo de cobertura disponible.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Datos de profiling</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Datos de profiling</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Por favor seleccione un archivo de profiling</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Error de sintaxis</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Error de sintaxis</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>No hay mensajes de error de sintaxis disponibles.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation>Advertencia</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation>No hay mensajes de advertencia disponibles.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation>Info: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>Error: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation>Estilo: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>Advertencia: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Nombre de macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Seleccione un nombre de macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Cargar archivo de macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>Archivos de Macro  (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Error al cargar macro</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; no se puede leer.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Error al cargar macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; no se puede leer.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; está dañado&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Guardar archivo de macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Guardar macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Guardar macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de macro &lt;b&gt;{0}&lt;/b&gt; ya existe. ¿Desea sobreescribirlo?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Error al guardar macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Error al guardar macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo de macro  &lt;b&gt;{0}&lt;/b&gt; no se puede escribir.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Comenzar grabación de macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Comenzar grabación de macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>Grabación de macro ya está activada. ¿Comenzar una nueva?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Grabando macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Grabando macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Introduzca el nombre de la macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation>{0} (ro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo &lt;b&gt;{0}&lt;/b&gt; ha cambiado mientras estaba abierto en eric. ¿Desea volver a cargarlo?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation>&lt;br&gt;&lt;b&gt;Advertencia:&lt;/b&gt; Perderá los cambios si lo reabre.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>Archivo modificado</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation>Recargar Archivo</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation>Recargar Archivo</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation>&lt;p&gt;El editor contiene modificacopmes sin guardar.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Advertencia:&lt;/b&gt; Los cambios se perderán al recargar.&lt;/p&gt;&lt;p&gt;¿Desea realmente recargar el editor?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>Error al soltar</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>Error al soltar</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; no es un archivo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Recursos</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Añadir archivo...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Añadir archivos...</translation>
+      <source>Add file...</source>
+      <translation>Añadir archivo...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Añadir archivos...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Añadir archivo con un alias...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Añadir recursos localizados...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>Añadir ventana de recursos</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Añadir archivo de recursos</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Añadir archivo de recursos</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Añadir archivo de recursos con un alias</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Añadir archivo de recursos con un alias</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation>Alias para el archivo &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Digrama de paquetes</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Digrama de paquetes</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>¿Incluir atributos de clase?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Diagrama de imports</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Diagrama de imports</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>¿Incluir los imports de módulos externos?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Diagrama de aplicación</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Diagrama de aplicación</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>¿Incluir nombres de módulos?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Añadir al diccionario</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Ignorar Todo</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation>Ordenar Líneas</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation>Ordenar Líneas</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation>La selección contiene datos ilegales para una ordenación numérica.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation>Registrar Manejador de Clicks de Ratón</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation>Registrar Manejador de Clicks de Ratón</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation>Un manejador de clicks de ratón para "{0}" ya está registrado por "{1}". Abortando solicitud por "{2}"...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation>{0:4d}    {1}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
@@ -13508,12 +13513,12 @@
     =&gt;  {2}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
+      <location filename="../QScintilla/Editor.py" line="9977" />
       <source>EditorConfig Properties</source>
       <translation>Propiedades de EditorConfig</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9977" />
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Las propiedades de EditorConfig para el archivo &lt;b&gt;{0}&lt;/b&gt; no se ha podido cargar.&lt;/p&gt;</translation>
     </message>
@@ -52817,18 +52822,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation>Placa Genérica MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation>Basada en RP2040/RP2350</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation>Dispositivo Desconocido</translation>
     </message>
@@ -56089,18 +56094,18 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
-      <translation>return/continue/break dentro de bloques finally hace que las excepciones se silencien. Las excepciones se deben silenciar en bloques except. Las sentencias de control se pueden extraer a un bloque finally.</translation>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
+      <translation>return/continue/break dentro de bloques finally causan que se silencien las excepciones. Las excepciones se deben silenciar en bloques except{0}. Las sentencias de control se pueden mover fuera del bloque finally.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
-      <translation>Un literal de tupla de longitud uno es redundante. Escribir 'except {0}:' en lugar de 'except ({0},):'.</translation>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
+      <translation>Una tupla literal de longitud uno es redundante. Escribir 'except{1} {0}:' en lugar de 'except{1} ({0},):'.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
-      <translation>Tipos de excepcion redundantes en 'except ({0}){1}:'. Escribir 'except {2}{1}:', que captura exactamente las mismas excepciones.</translation>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
+      <translation>Tipos de excepción redundantes en 'except{3} ({0}){1}:'. Escribir 'except{3} {2}{1}:', que captura exactamente las mismas excepciones.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
@@ -56154,8 +56159,8 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
-      <translation>La excepción '{0}' se ha capturado múltiples veces. Solamente la primera sera tomada en consideracion y todas las demas capturas de excepcion se pueden eliminar de modo seguro.</translation>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
+      <translation>La excepción '{0}' se ha capturado múltiples veces. Solo se considerará el primer except{1} y todos los otros except{1} catches se pueden eliminar de manera segura.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
@@ -56174,8 +56179,8 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
-      <translation>El uso de 'except ():' con una tupla vacía no gestiona/captura nada. Añadir excepciones a gestionar.</translation>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <translation>Usar 'except{0} ():' con una tupla vacía no maneja/captura nada. Añadir excepciones a manejar.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="447" />
@@ -56214,8 +56219,8 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
-      <translation>Los métodos '__init__' de clase no deben retornar (o hacer yield) de ningún valor.</translation>
+      <source>Class '__init__' methods must not return or yield any values.</source>
+      <translation>Métodos de clase '__init__' no deben retornar o ceder ningún valor.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="484" />
@@ -56228,156 +56233,171 @@
       <translation>Excepción con nota añadida no usada. ¿Ha olvidado lanzarla?</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation>Par clave valor repetido en literal de diccionario.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation>Editar un mutable iterable de un bucle a menudo conduce a resultados inesperados/errores.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation>f-string innecesaria</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation>f-string innecesaria</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation>no se puede usar 'self.__class__' como primer argumento de la llamada 'super()'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation>encontrado formateador {0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
-      <translation>cadena de formato que contiene parámetros sin indexar</translation>
+      <source>found {0} formatter</source>
+      <translation>encontrado formateador {0}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation>docstring cque contiene parámetros sin indexar</translation>
+      <source>format string does contain unindexed parameters</source>
+      <translation>cadena de formato que contiene parámetros sin indexar</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
-      <translation>otra cadena contiene parámetros sin indexar</translation>
+      <source>docstring does contain unindexed parameters</source>
+      <translation>docstring cque contiene parámetros sin indexar</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
-      <translation>llamada de formato usa un índice demasiado largo ({0})</translation>
+      <source>other string does contain unindexed parameters</source>
+      <translation>otra cadena contiene parámetros sin indexar</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation>llamada de formato usa una palabra clave desaparecida ({0})</translation>
+      <source>format call uses too large index ({0})</source>
+      <translation>llamada de formato usa un índice demasiado largo ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
-      <translation>llamada de formato usa argumentos de palabra clave pero sin entradas con nombre</translation>
+      <source>format call uses missing keyword ({0})</source>
+      <translation>llamada de formato usa una palabra clave desaparecida ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
-      <translation>llamada de formato usa argumentos de variable pero sin entradas numeradas</translation>
+      <source>format call uses keyword arguments but no named entries</source>
+      <translation>llamada de formato usa argumentos de palabra clave pero sin entradas con nombre</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
-      <translation>llamada de formato usa juntos índices implícitos y explícitos</translation>
+      <source>format call uses variable arguments but no numbered entries</source>
+      <translation>llamada de formato usa argumentos de variable pero sin entradas numeradas</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
-      <translation>llamada de formato proporciona índice que no se usa ({0})</translation>
+      <source>format call uses implicit and explicit indexes together</source>
+      <translation>llamada de formato usa juntos índices implícitos y explícitos</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation>llamada de formato proporciona índice que no se usa ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation>llamada de formato proporciona palabra clave que no se usa ({0})</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation>se esperaban estos __future__ imports: {0} pero solamente hay: {1}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation>se esperaban estos __future__ imports: {0} pero solamente hay: {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation>se esperaban estos __future__ imports: {0}; but no hay ninguno</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation>encontrado gettext import con alias _ : {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation>encontrada sentencia print</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation>tupla de un elemento encontrada</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation>argumento por defecto mutable de tipo {0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation>argumento por defecto mutable de tipo {0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation>argumento por defecto mutable de llamada a función {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation>None no se debería añadir a ningún return si la función no tiene valor de retorno excepto None</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation>un valor explícito se debería añadir a cada return si la función tiene un valor de retorno excepto None</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation>un return explícito se debería añadir al final de cada función si tiene un valor de retorno excepto None</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation>no se debería añadir un valor a una variable si se va a usar como valor de retorno solamente</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation>es preferible la continuación implícita de la línea entre paréntesis, corchetes y llaves al uso de la barra invertida</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation>cadena o literales de bytes implícitamente concatenados en una línea</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
-      <translation>cadena o literales de bytes implícitamente concatenados sobre línea de continuación</translation>
+      <source>implicitly concatenated string or bytes literals on one line</source>
+      <translation>cadena o literales de bytes implícitamente concatenados en una línea</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation>cadena o literales de bytes implícitamente concatenados sobre línea de continuación</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation>cadena o literales de bytes explícitamente concatenados deben estar conectados implícitamente</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation>las líneas de código comentadas se deberían eliminar</translation>
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation>concordar un valor por defecto debería generar una excepción `ValueError`</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation>concordar un valor por defecto no debería contener una sentencia `return` antes de generar una excepción `ValueError`</translation>
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58454,21 +58474,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation>os.path.splitext('foo.bar') debe reemplazarse por foo_path.suffix</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation>os.path.splitext('foo.bar') se debe reemplazar por foo_path.stem y foo_path.suffix</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation>os.path.relpath('/bar/foo', start='bar') debe reemplazarse por foo_path.relative_to('/bar')</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation>open('foo') debe reemplazarse por Path('foo').open()</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation>py.path.local está en modo de mantenimiento, usar pathlib en su lugar</translation>
     </message>
@@ -59629,164 +59649,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation>python ha salido con un error ({0}).</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation>python no ha terminado en 30 segundos.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation>No se ha podido iniciar python.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation>&lt;project&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation>Intérprete para el Entorno Virtual</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation>Intérprete para el Entorno Virtual</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation>No se ha configurado ningún intérprete para el entorno virtual seleccionado.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation>Instalar PIP</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation>Reparar PIP</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation>Actualizar Packages</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation>No hay packages excepto 'eric-ide' o 'PyQt6' dejados por actualizar.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation>Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation>Instalar Packages a partir de Requisitos</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation>Instalar Proyecto</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation>Instalar Dependencias de 'pyproject'</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation>El archivo seleccionado 'pyproject.toml' no contiene una sección 'project.dependencies'. Abortando...</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation>Instalar Dependencias de 'pyproject'</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation>El archivo seleccionado 'pyproject.toml' no contiene una sección 'project.dependencies'. Abortando...</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo 'pyproject.toml' seleccionado no se ha podido leer. .&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation>Instalar Packages desde 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation>Desinstalar Packages</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation>Desinstalar Packages</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation>¿Realmente desea desinstalar estos packages?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation>Desinstalar Packages a partir de Requisitos</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation>Desinstalar Dependencias de 'pyproject'</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation>Desinstalar Dependencias de 'pyproject'</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;El archivo 'pyproject.toml' seleccionado no se ha podido leer. .&lt;/p&gt;&lt;p&gt;Razón: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation>Desinstalar Packages desde 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1197" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation>Info de Cache</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1223" />
-      <location filename="../PipInterface/Pip.py" line="1214" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation>Listar Archivos en Cache</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1215" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation>Introducir un patrón de archivo (dejar en blanco para todos):</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1247" />
-      <location filename="../PipInterface/Pip.py" line="1240" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation>Eliminar Archivos en Cache</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1241" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation>Introducir un patrón de archivo:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1272" />
-      <location filename="../PipInterface/Pip.py" line="1264" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation>Purgar Cache</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1265" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation>Desear realmente purgar la cache de pip? Todos los archivos necesitarán descargarse de nuevo.</translation>
     </message>
@@ -60547,6 +60567,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation>Introducir el término de búsqueda para packages</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation>Búsqueda de Package</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation>Ver Tipo</translation>
     </message>
@@ -60696,205 +60726,205 @@
       <translation>Obteniendo packages antiguos...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation>Limpieza de Entorno</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation>La limpieza de entorno ha tenido éxito.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation>Algunos directorios residuales de package no se han podido eliminar. Borrarlos manualmente.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="832" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="834" />
       <source>Search PyPI</source>
       <translation>Buscar PyPI</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="833" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="835" />
       <source>&lt;p&gt;No package details info for &lt;b&gt;{0}&lt;/b&gt; available.&lt;/p&gt;</source>
       <translation>&lt;p&gt;No hay info de detalles de package disponible para &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="852" />
-      <source>Pip</source>
-      <translation>Pip</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="854" />
+      <source>Pip</source>
+      <translation>Pip</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="856" />
       <source>Install Pip</source>
       <translation>Instalar Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="857" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="859" />
       <source>Install Pip to User-Site</source>
       <translation>Instalar Pip en el Sitio de Usuario</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="860" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="862" />
       <source>Repair Pip</source>
       <translation>Reparar Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="867" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="869" />
       <source>Install</source>
       <translation>Instalar</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1046" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="869" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1048" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="871" />
       <source>Install Packages</source>
       <translation>Instalar Packages</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="872" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="874" />
       <source>Install Local Package</source>
       <translation>Instalar Package Local</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="875" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="877" />
       <source>Re-Install Selected Packages</source>
       <translation>Reinstalar los Packages Seleccionados</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="882" />
-      <source>Requirements/Constraints</source>
-      <translation>Requisitos/Restricciones</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="884" />
+      <source>Requirements/Constraints</source>
+      <translation>Requisitos/Restricciones</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="886" />
       <source>Install Requirements</source>
       <translation>Instalar Requisitos</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="887" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="889" />
       <source>Uninstall Requirements</source>
       <translation>Desinstalar Requisitos</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="890" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="892" />
       <source>Generate Requirements...</source>
       <translation>Generar Requisitos...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="894" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="896" />
       <source>Install from 'pyproject.toml'</source>
       <translation>Instalar desde 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="898" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="900" />
       <source>Uninstall from 'pyproject.toml'</source>
       <translation>Desinstalar desde 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="903" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="905" />
       <source>Generate Constraints...</source>
       <translation>Generar Restricciones...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="910" />
-      <source>Cache</source>
-      <translation>Caché</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="912" />
+      <source>Cache</source>
+      <translation>Caché</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="914" />
       <source>Show Cache Info...</source>
       <translation>Mostrar info de Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="915" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="917" />
       <source>Show Cached Files...</source>
       <translation>Mostrar Archivos en Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="918" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="920" />
       <source>Remove Cached Files...</source>
       <translation>Eliminar Archivos en Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="921" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="923" />
       <source>Purge Cache...</source>
       <translation>Purgar Cache...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="938" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="940" />
       <source>Show Licenses...</source>
       <translation>Mostrar Licencias...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="942" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="944" />
       <source>Check Vulnerabilities</source>
       <translation>Comprobar Vulnerabilidades</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="946" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="948" />
       <source>Update Vulnerability Database</source>
       <translation>Actualizar Base de Datos de Vulnerabilidades</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="950" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="952" />
       <source>Create SBOM file</source>
       <translation>Crear archivo SBOM</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="957" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="959" />
       <source>Edit User Configuration...</source>
       <translation>Editar Configuración de Usuario...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="960" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="962" />
       <source>Edit Environment Configuration...</source>
       <translation>Editar Configuración de Entorno...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="965" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="967" />
       <source>Configure...</source>
       <translation>Configurar...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1185" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1211" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1198" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
       <source>Edit Configuration</source>
       <translation>Editar Configuración</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1197" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1186" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
       <source>No valid configuration path determined. Aborting</source>
       <translation>No hay una ruta válida de configuración determinada. Abortando</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1419" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1421" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation>{0} {1}</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1440" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1442" />
       <source>Affected Version:</source>
       <translation>Versión Afectada:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1443" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1445" />
       <source>Advisory:</source>
       <translation>Recomendatorio:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1578" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1553" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation>desconocido</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1575" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation>cualquiera</translation>
     </message>
@@ -60994,6 +61024,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation>No mostrar entornos 'Conda'</translation>
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation>Lista de Dependencias</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation>Buscar Fondo para el Marcador:</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation>Seleccionar el color para resaltar la búsqueda de la lista de dependencias.</translation>
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62338,18 +62383,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Exportar Preferencias</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation>Archivo de Propiedades (*.ini);;Todos los archivos (*)</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Importar Preferencias</translation>
     </message>
@@ -69234,6 +69279,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation>argumento posicional para argumento de Campo por defecto</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation>attributo no anotado dentro de modelo Pydantic</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation>Llamada a Campo innecesaria para especificar un valor por defecto</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation>argumento por defecto especificado en anotado</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation>nombre de campo sobreescribe anotación</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation>nombre de campo duplicado</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation>uso de __pydantic_config__; considerar uso de decorador `with_config`</translation>
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74253,343 +74336,328 @@
       <translation>detectado 'contextlib.suppress()'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation>Llamada a {0} sin timeout.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation>Llamada a {0} con timeout establecido como None.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation>Una apliación Flask parece ejecutada con debug=True, lo que expone la herramienta de depuración y permite la ejecución de código arbitrario.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation>Uso de 'tarfile.extractall(members=function(tarfile))'. Asegurar que la función descarta con propiedad miembros peligrosos({0}).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation>Hallado 'tarfile.extractall(members=?)' pero no se ha podido identificar el tipo de miembros. Comprobar que los miembros se han validado correctamente ({0}).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation>'tarfile.extractall()' usado sin ninguna validación. Por favor comprobar y descartar miembros peligrosos.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation>Pickle y módulos que lo envuelven puede ser inseguro cuando se utiliza para deserializar datos no confiables, posible problema de seguridad.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation>La deserialización con el módulo marshal es posiblemente peligrosa.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation>Uso de función de hash MD2, MD4, MD5, o SHA1 inseguro.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation>Uso de cifrado '{0}' inseguro. Reemplazar con un cifrado seguro conocido como AES.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation>Uso de modo de cifrado inseguro '{0}'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation>Uso de función insegura y deprecada (mktemp).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation>Uso de función posiblemente insegura - considerar uso más seguro de ast.literal_eval.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation>El uso de mark_safe() puede exponer vulnerabilidades de cross-site scripting y debería revisarse.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation>Auditar url abierta a esquemas permitidos. PErmitir el uso de file:// o esquemas personalizados es a menudo inesperado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation>Los generadores pseudo-random estándar no son adecuados para propósitos de seguridad/criptografía.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation>Invocación de funciones relacionadas con Telner. Telnet se considera como inseguro. Utilizar SSH o algún otro protocolo encriptado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation>El uso de '{0}' para interpretar datos XML no fiables es conocido como vector de ataques XML. Reemplazar '{0}' con su función equivalente defusedxml o asegurar que se está invocando defusedxml.defuse_stdlib().</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation>El uso de '{0}' para interpretar datos XML no fiables es conocido como vector de ataques XML. Reemplazar '{0}' con su función equivalente defusedxml.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation>Invocación de funciones relacionadas con FTP. FTP se considera inseguro. Utilizar SSH/SFTP/SCP u otro protocolo encriptado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation>El método input en Python 2 lee desde el input estándar, evaluando y ejecutando la cadena resultante como código fuente Python. Esto es similar, aunque peor, al uso de eval. Con Python 2, utilizar raw_input en su logar, input es seguro con Python 3.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation>Por defecto Python creará un contexto SSL seguro y verificado para utilizar en clases como HTTPSConnection. Sin embargo, aún así permite el uso de contextos inseguros a través de _create_unverified_context que revierte al comportamient anterior sin validación de certificados o comprobación de hostname.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation>Uso de función de hash {0} insegura.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation>Uso de hash inseguro {0} para seguridad for security. Considerar 'usedforsecurity=False'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation>Se está importando un módulo relacionado con telnet.  Telnet se considera inseguro. Utilizar SSH u otro protocolo encriptado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation>Se está importando un módulo relacionado con FTP.  FTP se considera inseguro. Usar SSH/SFTP/SCP u otro protocolo encriptado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation>Considerar las posibles implicaciones de seguridad asociadas con el módulo '{0}'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation>El uso de '{0}' para interpretar datos XML no fiables es conocido como vector de ataques XML. Reemplazar '{0}' con su package equivalente defusedxml o asegurar que se está invocando defusedxml.defuse_stdlib().</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation>El uso de '{0}' para interpretar datos XML no fiables es conocido como vector de ataques XML. Reemplazar '{0}' con package equivalente defusedxml.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation>El uso de '{0}' para interpretar datos XML que no son de confianza se sabe es una vulnerabilidad a ataques XML. Usar la función defusedxml.xmlrpc.monkey_patch() function para parchear xmlrpclib y mitigar vulnerabilidades XML.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation>Considerar las posibles implicaciones de seguridad asociadas con el módulo '{0}'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation>La biblioteca pyCrypto y su módulo '{0}' ya no tienen mantenimiento y se han deprecado. Considerar el uso de la biblioteca pyca/cryptography.</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation>Se va a importar un módulo relacionado con IPMI. Se considera IPMI inseguro. Usar un protocolo encriptado.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation>Llamada 'requests' con verify=False deshabilitando comprobaciones de certificado SSL, problema de seguridad.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation>Llamada 'ssl.wrap_socket' con versión de protocolo SSL/TLS insegura identificada, problema de seguridad.</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation>Se va a importar un módulo relacionado con IPMI. Se considera IPMI inseguro. Usar un protocolo encriptado.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation>Llamada 'requests' con verify=False deshabilitando comprobaciones de certificado SSL, problema de seguridad.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation>Llamada 'ssl.wrap_socket' con versión de protocolo SSL/TLS insegura identificada, problema de seguridad.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation>Llamada 'SSL.Context' con versión de protocolo SSL/TLS insegura identificada, problema de seguridad.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation>Llamada a Function con versión de protocolo SSL/TLS insegura identificada, problema de seguridad.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation>Definición de función con versión de protocolo SSL/TLS insegura identificada, posible problema de seguridad.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation>Llamada 'ssl.wrap_socket' sin versión de protocolo SSL/TLS especificada, el valor por defecto 'SSLv23' puede ser inseguro, posible problema de seguridad.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation>Tamaños {0} de clave por debajo de {1:d} bits se consideran frágiles.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation>Uso de 'yaml.load()' no seguro. Permite la instanciación de objetos arbitrarios. Considerar 'yaml.safe_load()'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation>Llamada Paramiko con política de asignar automáticamente relación de confianza a una clave de host desconocido.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation>El uso de SNMPv1 y SNMPv2 es inseguro. Deberia utilizarse SNMPv3 si es posible.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation>No se deberia usar SNMPv3 sin encripción. noAuthNoPriv &amp; authNoPriv es inseguro.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation>Posible inyección de shell vía llamada 'Paramiko', comprobar que las entradas se han sanitizado adecuadamente.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation>La llamada 'subprocess' con shell=True parece segura, pero puede cambiar en el futuro, considerar reimplementación sin shell</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation>Llamada 'subprocess' sin shell=True identificada, problema de seguridad.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation>Llamada 'subprocess' - comprobar la ejecución de inputs de no confianza.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation>Llamada a función con parámetro shell=True identificada, posible problema de seguridad.</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation>Inicio de un proceso con una shell: Aparentemente seguro, pero esto puede cambiar en el futuro, considerar reimplementación sin shell</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation>Iniciar un proceso con una shell, posible inyeción detectada, problema de seguridad.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation>Iniciar un proceso sin una shell.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation>Iniciar un proceso con una ruta parcialmente ejecutable.</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
-      <translation>Inicio de un proceso con una shell: Aparentemente seguro, pero esto puede cambiar en el futuro, considerar reimplementación sin shell</translation>
+      <source>Possible SQL injection vector through string-based query construction.</source>
+      <translation>Posible vector de inyección de SQL a través de construcción de query basada en cadenas.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation>Iniciar un proceso con una shell, posible inyeción detectada, problema de seguridad.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation>Iniciar un proceso sin una shell.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation>Iniciar un proceso con una ruta parcialmente ejecutable.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation>Posible vector de inyección de SQL a través de construcción de query basada en cadenas.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation>Posible inyección de wildcard en llamada: {0}</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation>Uso de'extra()' abre un vector potencial de ataque SQL.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation>El uso de 'RawSQL()' abre un vector potencial de ataque SQL.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation>Uso inseguro de logging.config.listen() detectado.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation>El archivo de código fuente Python contiene caracteres de control bidireccionales ({0}).</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation>Uso de'extra()' abre un vector potencial de ataque SQL.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation>El uso de 'RawSQL()' abre un vector potencial de ataque SQL.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation>Uso inseguro de logging.config.listen() detectado.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
-      <translation>El archivo de código fuente Python contiene caracteres de control bidireccionales ({0}).</translation>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation>Uso inseguro de cargar o guardar de PyTorch.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation>El uso de plantillas jinja2 con 'autoescape=False' es peligroso y puede conducir a XSS. Usar 'autoescape=True' o usar la función 'select_autoescape' para mitigar vulnerabilidades XSS.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation>Por defecto, jinja2 establece 'autoescape' a False. Considerar el uso de 'autoescape=True' o de la función 'select_autoescape' para mitigar vulnerabilidades XSS.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation>Uso inseguro de cargar o guardar de PyTorch.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation>El uso de plantillas jinja2 con 'autoescape=False' es peligroso y puede conducir a XSS. Usar 'autoescape=True' o usar la función 'select_autoescape' para mitigar vulnerabilidades XSS.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation>Por defecto, jinja2 establece 'autoescape' a False. Considerar el uso de 'autoescape=True' o de la función 'select_autoescape' para mitigar vulnerabilidades XSS.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation>Las plantillas Mako permiten dibujado de HTML/JS por defecto y son inherentemente abiertas a ataques XSS. Asegurar que las variables en todas las plantillas se sanitizan apropiadamente con la flags 'n', 'h' o 'x' (dependiendo del contexto). Por ejemplo, para hacer un HTML escape de la avariable 'data', hacer ${{ data |h }}.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation>Potencial XSS en la función 'mark_safe()'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation>Posible clave de acceso a AWS con código duro: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation>Posible clave secreta de acceso a AWS con código duro: {0}</translation>
     </message>
@@ -77033,10 +77101,10 @@
       <translation>Usar "all({0} for {1} in {2})"</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77193,22 +77261,27 @@
       <translation>Usar argumentos de palabra clave en lugar de número mágico</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation>No anidar f-strings</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation>Inicializar diccionario "{0}" directamente</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation>Usar "Optional[{0}]" en lugar de "{1}"</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation>Usar "Optional[{0}]" en lugar de "{1}"</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation>Eliminar assignacion reflexiva "{0}"</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation>Usar "{0}.items()" en lugar de "zip({0}.keys(), {0}.values())"</translation>
     </message>
@@ -87562,7 +87635,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Para utilizar variables en una plantilla, solamente tiene que delimitar el nombre de variable con carácteres $. Al utilizar la plantilla, se le solicitará un valor para esta variable.&lt;/p&gt;&lt;p&gt;Ejemplo de plantilla: esto es una $VAR$&lt;/p&gt;&lt;p&gt;Al utilizar esta plantilla se le solicitará un valor para la variable $VAR$. Todas las ocurrencias de $VAR$ serán entonces reemplazadas con el valor introducido.&lt;/p&gt;&lt;p&gt;Si necesita utilizar el caracter $ que no vaya a ser utilizado para delimitar una variable en una plantilla, teclee $$ (dos carácteres dólar). Se reemplazarán automáticamente con un carácter $ único al utilizar la plantilla.&lt;/p&gt;&lt;p&gt;Si desea tratar específicamente los contenidos de alguna variable, el nombre de variable debe ser seguido por un ':' y un especificador de formato.(por ejemplo $VAR:ml$). Los especificadores soportados son:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Especifica formato de multilínea. A la primera línea de los contenidos de la variable se le antepone la cadena que hay antes de la variable en la misma línea de la plantilla. Al resto de las líneas se les antepone la misma cantidad de espacios en blanco que la línea que contiene la variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Especifica un formato de repetición de líneas. A cada línea de los contenidos de la variable se le antepone la cadena que hay antes de la variable en la misma línea de la plantilla.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Las siguientes variables predefinidas se pueden utilizar en una plantilla:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;fecha actual formato ISO (AAAA-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;el año actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;el nombre del proyecto (si existe)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;ruta completa del archivo actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;ruta completa del directorio padre&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;nombre del archivo actual (sin directorio)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;como &lt;i&gt;file_name&lt;/i&gt;, pero sin extensión&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;la extensión del archivo actual&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;el texto seleccionado actualmente&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Establece punto de inserción para el cursor despues de insertar la plantilla.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Establece intervalo de texto seleccionado en la plantilla tras ser ésta insertada (usado junto a 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Establece intervalo de texto seleccionado en la plantilla tras ser ésta insertada (usado junto a 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;el texto del portapapeles&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Si desea cambiar el delimitador a otro distinto, por favor utilice el diálogo de configuración para hacerlo.&lt;/p&gt;</translation>
     </message>
   </context>
@@ -90040,133 +90113,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h3&gt;Placa CircuitPython&lt;/h3&gt;&lt;p&gt;Para preparar la placa para flashear seguir estos pasos:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Cambiar el dispositivo a modo 'bootloader' pulsando dos veces el botón de reset.&lt;/li&gt;&lt;li&gt;Esperar hasta que el dispositivo entre en modo 'bootloader'.&lt;/li&gt;&lt;li&gt;(Si esto no ocurre, intentar pausas entre pulsado más largas o más cortas.)&lt;/li&gt;&lt;li&gt;Asegurar que el volumen de arranque está disponible (esto puede requerir de su montaje).&lt;/li&gt;&lt;li&gt;Seleccionar el archivo de firmware a flashear y hacer click en el botón de flash.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h3&gt;Placa Pi Pico (RP2040/RP2350)&lt;/h3&gt;&lt;p&gt;Para preparar la placa para flashing seguir estos pasos:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Entrar en modo 'bootloader' (placa &lt;b&gt;sin&lt;/b&gt; botón RESET):&lt;ul&gt;&lt;li&gt;Conectar la placa mientras se mantiene pulsado el botón BOOTSEL.&lt;/li&gt;&lt;/ul&gt;Entrar en modo 'bootloader' (placa &lt;b&gt;con&lt;/b&gt; botón RESET):&lt;ul&gt;&lt;li&gt;mantener pulsado RESET&lt;/li&gt;&lt;li&gt;mantener pulsado BOOTSEL&lt;/li&gt;&lt;li&gt;soltar RESET&lt;/li&gt;&lt;li&gt;soltar BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Esperar hasta que el dispositivo haya entrado en modo 'bootloader'.&lt;/li&gt;&lt;li&gt;Asegurar que el volumen de arranque está disponible (esto puedo requerir su montaje).&lt;/li&gt;&lt;li&gt;Seleccionar el archivo de firmware a flashear y hacer click en el botón de flash.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation>Archivos MicroPython/CircuitPython(*.uf2);;Todos los Archivos (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation>Selección Manual</translation>
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation>Instrucciones de Reset:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;No se han detectado dispositivos conocidos.&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones apropiadas debajo para establecer &lt;b&gt;una&lt;/b&gt; placa en modo 'bootloader'. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation>&lt;h4&gt;Flashear {0} Firmware&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones de bajo para establecer &lt;b&gt;una&lt;/b&gt; placa en modo 'bootloader'. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;&lt;hr/&gt;{1}</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation>Instrucciones de Reset:</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;No se han detectado dispositivos conocidos.&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones apropiadas debajo para establecer &lt;b&gt;una&lt;/b&gt; placa en modo 'bootloader'. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation>&lt;h4&gt;Flashear {0} Firmware&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones de bajo para establecer &lt;b&gt;una&lt;/b&gt; placa en modo 'bootloader'. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;&lt;hr/&gt;{1}</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>&lt;h4&gt;Encontrados dispositivos con capacidad potencial UF2&lt;/h4&gt;&lt;p&gt;Encontrados estos dispositivos con capacidad potencial UF2:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Seguir las instrucciones debajo para establecer &lt;b&gt;una&lt;/b&gt; placa en modo 'bootloader' mode. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>&lt;h4&gt;No se han detectado dispositivos conocidos.&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones apropiadas debajo para establecer &lt;b&gt;una&lt;/b&gt; placa en modo 'bootloader'. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation>Instrucciones de Flash:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h4&gt;Seleccionado método 'manual' de Flash.&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones debajo para flashear un dispositivo introduciendo manualmente los datos.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Cambiar el dispositivo a modo 'bootloader'.&lt;/li&gt;&lt;li&gt;Esperar hasta que el dispositivo haya entrado en modo 'bootloader'.&lt;/li&gt;&lt;li&gt;Asegurar que el volumen de arranque está disponible (esto puede requerir de su montaje) y seleccionar su ruta.&lt;/li&gt;&lt;li&gt;Seleccionar el archivo de firmware a flashear y hacer click en el botón de flashear.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation>Volumen de Arranque no encontrado:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation>&lt;h4&gt;No se ha encontrado un Volumen de Arranque.&lt;/h4&gt;&lt;p&gt;Por favor, asegurar que el volumen de arranque del dispositivo a flashear está disponible. </translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>Este volumen se debería llamar &lt;b&gt;{0}&lt;/b&gt;. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>Este volumen debería tener uno de los siguientes nombres.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Instrucciones para Restablecer&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones de debajo para establecer la placa en modo 'bootloader'. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Instrucciones para Restablecer&lt;/h4&gt;&lt;p&gt;Seguir las instrucciones de debajo para establecer la placa en modo 'bootloader'. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation>Múltiples Volúmenes de Arranque encontrados:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Se han encontrado múltiples Volúmes de Arranque&lt;/h4&gt;&lt;p&gt;Esas rutas de volumen se han encontrado.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Por favor, asegurar que solamente un dispositivo de cada tipo está listo para flashear. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Se han encontrado múltiples Volúmes de Arranque&lt;/h4&gt;&lt;p&gt;Esas rutas de volumen se han encontrado.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Por favor, asegurar que solamente un dispositivo de cada tipo está listo para flashear. Pulsar &lt;b&gt;Actualizar&lt;/b&gt; cuando esté listo.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation>Flasheando Firmware</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Flasheando el firmware seleccionado al dispositivo. Por favor, esperar hasta que el dispositivo haga reset automáticamente.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation>Flasheando {0}</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Flasheando el firmware {0} al dispositivo. Por favor, esperar hasta que el dispositivo haga reset automáticamente.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation>Flashear Dispositivo UF2</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation>No se han encontrado volúmenes de arranque del dispositivo UF2.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation>Seleccionar el Volumen de Arranque del dispositivo:</translation>
     </message>
@@ -106438,406 +106511,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation>la indentación contiene espacios y tabuladores mezclados</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation>la indentación no es un múltiplo de cuatro</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation>se esperaba un bloque indentado</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
-      <translation>indentación inesperada</translation>
+      <source>expected an indented block</source>
+      <translation>se esperaba un bloque indentado</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation>indentación inesperada</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation>la indentación no es un múltiplo de cuatro (comentario)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation>se esperaba un bloque indentado (comentario)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation>indentación inesperada (comentario)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation>sobre-indentado</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation>sobre-indentado</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation>indentación de línea de continuación no es múltiplo de cuatro</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation>línea de continuación sin indentación o bien con indentación inversa</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation>llave de cierre no coincide con la indentación de la línea de la llave de apertura</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation>llave de cierre no coincide con indentación visual</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation>indentación de línea de continuación como la siguiente línea lógica</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation>línea de continuación sobre-indentada por indentación colgada</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation>línea de continuación sobre indentada para indentación visual</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation>línea de continuación poco indentada para indentación visual</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation>línea visualmente indentada con la misma indentación que la siguiente línea lógica</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation>línea de continuación sin alinear debido a indentación pendiente</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation>llave de cierre a la que falta indentación</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation>espacio en blanco después de'{0}'</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation>espacio en blanco antes de'{0}'</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation>espacio en blanco antes de'{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation>espacio en blanco tras decorator '@'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation>múltiples espacios antes de operador</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation>múltiples espacios después de operador</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation>tabulador antes de operador</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
-      <translation>tabulador después de operador</translation>
+      <source>multiple spaces before operator</source>
+      <translation>múltiples espacios antes de operador</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
-      <translation>falta espacio en blanco alrededor de un operador</translation>
+      <source>multiple spaces after operator</source>
+      <translation>múltiples espacios después de operador</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation>tabulador antes de operador</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation>tabulador después de operador</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation>falta espacio en blanco alrededor de un operador</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation>falta espacio en blanco alrededor de operador aritmético</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation>falta espacio en blanco alrededor de operador a nivel de bit o shift</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation>falta espacio en blanco alrededor de operador módulo</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation>falta espacio en blanco después de {0}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation>múltiples espacios en blanco después de '{0}'</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation>tabulador después de '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation>espacios inesperados alrededor de palabra clave / parámetro igual a</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
-      <translation>faltan espacios en blanco alrededor de igual en parámetros</translation>
+      <source>missing whitespace around modulo operator</source>
+      <translation>falta espacio en blanco alrededor de operador módulo</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation>falta espacio en blanco después de {0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
+      <translation>múltiples espacios en blanco después de '{0}'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation>tabulador después de '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation>espacios inesperados alrededor de palabra clave / parámetro igual a</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation>faltan espacios en blanco alrededor de igual en parámetros</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation>al menos dos espacios antes de comentario inline</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation>un comentario inline debe comenzar con '#'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation>comentarios de bloque debería comenzar con '# '</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation>demasiados '#' al principio para comentario de bloque</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation>múltiples espacios después de palabra clave</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation>múltiples espacios antes de palabra clave</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation>tabulador despues de palabra clave</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
-      <translation>tabulador antes de palabra clave</translation>
+      <source>block comment should start with '# '</source>
+      <translation>comentarios de bloque debería comenzar con '# '</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation>demasiados '#' al principio para comentario de bloque</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
-      <translation>se esperaban {0} líneas en blanco, se han encontrado {1}</translation>
+      <source>multiple spaces after keyword</source>
+      <translation>múltiples espacios después de palabra clave</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation>múltiples espacios antes de palabra clave</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation>tabulador despues de palabra clave</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
+      <translation>tabulador antes de palabra clave</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation>demasiadas líneas en blanco ({0}), se esperaban {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
-      <translation>líneas en blanco encontradas después de decorador de función</translation>
+      <source>missing whitespace after keyword</source>
+      <translation />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation>se esperaban {0} líneas en blanco, se han encontrado {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation>demasiadas líneas en blanco ({0}), se esperaban {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation>líneas en blanco encontradas después de decorador de función</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation>se esperaban {0} líneas en blanco después de definición de clase o función, se han encontrado {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation>se esperaban {0} líneas en blanco antes de una definición anidada, se han encontrado {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation>demasiadas líneas en blanco ({0}) antes de definición anidada, se esperaban {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation>demasiadas líneas en blanco ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation>múltiples import en una línea</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
-      <translation>import a nivel de módulo no al principio del archivo</translation>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
+      <translation>se esperaban {0} líneas en blanco antes de una definición anidada, se han encontrado {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation>línea demasiado larga ({0} &gt; {1} caracteres)</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
-      <translation>el backslash es redundante entre llaves</translation>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation>demasiadas líneas en blanco ({0}) antes de definición anidada, se esperaban {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation>demasiadas líneas en blanco ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
+      <translation>múltiples import en una línea</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
-      <translation>múltiples sentencias en una línea (dos puntos)</translation>
+      <source>module level import not at top of file</source>
+      <translation>import a nivel de módulo no al principio del archivo</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
-      <translation>múltiples sentencias en una línea (punto y coma)</translation>
+      <source>line too long ({0} &gt; {1} characters)</source>
+      <translation>línea demasiado larga ({0} &gt; {1} caracteres)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
-      <translation>sentencia termina en punto y coma</translation>
+      <source>the backslash is redundant between brackets</source>
+      <translation>el backslash es redundante entre llaves</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
-      <translation>múltiples sentencias en una línea (def)</translation>
+      <source>multiple statements on one line (colon)</source>
+      <translation>múltiples sentencias en una línea (dos puntos)</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
+      <translation>múltiples sentencias en una línea (punto y coma)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
-      <translation>comparación con {0} debe ser {1}</translation>
+      <source>statement ends with a semicolon</source>
+      <translation>sentencia termina en punto y coma</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation>comprobación de 'miembro de' debería ser 'not in'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
-      <translation>comprobación para identidad del objeto debería ser 'is not'</translation>
+      <source>multiple statements on one line (def)</source>
+      <translation>múltiples sentencias en una línea (def)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation>no comparar tipos, para comprobaciones exactas usar 'is' / 'is not', para comprobaciones de instancia usar 'isinstance()'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
-      <translation>no usar except sin tipo</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation>comparación con {0} debe ser {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
+      <translation>comprobación de 'miembro de' debería ser 'not in'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
-      <translation>no asignar una expresión lambda, utilizar un def</translation>
+      <source>test for object identity should be 'is not'</source>
+      <translation>comprobación para identidad del objeto debería ser 'is not'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation>no comparar tipos, para comprobaciones exactas usar 'is' / 'is not', para comprobaciones de instancia usar 'isinstance()'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation>no usar except sin tipo</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation>no asignar una expresión lambda, utilizar un def</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation>nombre de variable ambiguo '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation>definición ambigua de clase '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation>definición ambigua de función '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation>{0}: {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation>{0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
-      <translation>la indentación contiene tabuladores</translation>
+      <source>{0}: {1}</source>
+      <translation>{0}: {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation>{0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation>la indentación contiene tabuladores</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation>espacio en blanco por detrás</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation>no hay carácter de nueva línea al final del archivo</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation>línea en blanco con espacios en blanco</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation>línea en blanco al final del archivo</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation>nueva línea antes de operador binario</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation>nueva línea después de operador binario</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation>no hay carácter de nueva línea al final del archivo</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation>línea en blanco con espacios en blanco</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation>línea en blanco al final del archivo</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation>nueva línea antes de operador binario</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation>nueva línea después de operador binario</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation>doc line demasiado larga ({0} &gt; {1} carácteres)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation>secuencia de escape no válida'\{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation>'async' y 'await' son palabras reservadas a partir de Python 3.7</translation>
     </message>
--- a/src/eric7/i18n/eric7_fr.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_fr.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3952,77 +3952,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation>Annotations</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
-      <translation>Complexité du code</translation>
+      <source>Async Functions</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation>Documentation</translation>
+      <source>Code Complexity</source>
+      <translation>Complexité du code</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation>Erreurs</translation>
+      <source>Documentation</source>
+      <translation>Documentation</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation type="unfinished">Imports</translation>
+      <source>Errors</source>
+      <translation>Erreurs</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
-      <translation type="unfinished" />
+      <source>Imports</source>
+      <translation type="unfinished">Imports</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
-      <translation>Divers</translation>
+      <source>Logging</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
-      <translation>Nommage</translation>
+      <source>Miscellaneous</source>
+      <translation>Divers</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
-      <translation type="unfinished" />
+      <source>Naming</source>
+      <translation>Nommage</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation>Sécurité</translation>
+      <source>'pathlib' Usage</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation>Sécurité</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished">Non utilisé</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation>Warnings</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5121,7 +5126,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation>Pas de message défini pour le code '{0}'.</translation>
     </message>
@@ -6146,59 +6151,59 @@
       <translation type="unfinished">Filtrer</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation>PEP-257</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation>Eric</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation>Erreurs</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation>Erreur : {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation>{0} (ignoré)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation>Pas d'erreur trouvée.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation>Pas d'erreur trouvée.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation>Pas de fichier trouvé (vérifier votre liste d'ignorés).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished">{0} - {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6268,146 +6273,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation>Tabulation convertie en 4 espaces.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation>Indentation ajustée pour être un multiple de quatre.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation>Niveau d'indentation modifié.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation>Indentation visuel corrigée.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation>
         <numerusform>%n ligne vide insérée.</numerusform>
@@ -6415,7 +6420,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation>
         <numerusform>%n ligne superflue supprimée</numerusform>
@@ -6423,73 +6428,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation>Lignes superflues vides supprimées.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation>Les longues lignes ont été raccourcies.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation>'{0}' argument ajouté.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation>'{0}' argument supprimé.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <source>Comparison to None/True/False corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
-      <translation>'&lt;&gt;' remplacé par '!='.</translation>
+      <source>'{0}' argument added.</source>
+      <translation>'{0}' argument ajouté.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation>'{0}' argument supprimé.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation>'&lt;&gt;' remplacé par '!='.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -12584,7 +12589,7 @@
       <translation>Décommenter</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation type="unfinished" />
@@ -12867,7 +12872,7 @@
       <translation type="unfinished">Orthographe</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Correction orthographique...</translation>
@@ -12928,7 +12933,7 @@
       <translation>Éditer le point d'arrêt...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Activer le point d'arrêt</translation>
@@ -13172,382 +13177,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Autocompletion</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>L'autocompletion n'est pas disponible car aucune source d'autocomplétion n'est définie.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Désactiver le point d'arrêt</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>Code Coverage</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>Code Coverage</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>Sélectionner un fichier coverage</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>Afficher les annotations de Code Coverage</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Toutes les lignes ont été executées.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>Afficher les annotations de Code Coverage</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Toutes les lignes ont été executées.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>Impossible de trouver le fichier de coverage.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Profiler de données</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Profiler de données</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Sélectionner un fichier profile</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Erreur de syntaxe</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Erreur de syntaxe</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>Aucun message d'erreur de syntaxe..</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation>Warning</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation>Pas de message d'alerte disponible.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>Erreur : {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation>Style : {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>Alerte : {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Nom de la macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Sélectionner un nom de macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Charger un fichier macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>Fichier Macro (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Erreur lors du chargement de la macro</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Le fichier macro &lt;b&gt;{0}&lt;/b&gt; ne peut être lu.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Erreur lors du chargement de la macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Le fichier macro &lt;b&gt;{0}&lt;/b&gt; ne peut être lu.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le fichier macro &lt;b&gt;{0}&lt;/b&gt; est corrompu.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Enregistrer le fichier macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Enregistrer la macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Enregistrer la macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le fichier macro &lt;b&gt;{0}&lt;/b&gt;existe déjà. Écraser ?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Erreur lors de l'enregistrement de la macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Erreur lors de l'enregistrement de la macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Le fichier macro &lt;b&gt;{0}&lt;/b&gt; ne peut être écrit.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Démarrer l'enregistrement de la macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Démarrer l'enregistrement de la macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>L'enregistrement de macro est déjà actif. En démarrer une nouvelle ?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Enregistrement de macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Enregistrement de macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Entrer le nom de la macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation type="unfinished">{0} (ro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation>&lt;br&gt;&lt;b&gt;Alerte :&lt;/b&gt; Vous allez perdre vos modifications à la réouverture.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>Fichier modifié</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>Erreur de suppression</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>Erreur de suppression</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; n'est pas un fichier.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Ressources</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Ajouter un fichier...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Ajouter des fichiers...</translation>
+      <source>Add file...</source>
+      <translation>Ajouter un fichier...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Ajouter des fichiers...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Ajouter un fichier alias...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Ajouter une ressource localisée...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>Ajouter un cadre ressource</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Ajoute un fichier ressource</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Ajoute des fichiers ressources</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Ajoute un alias de fichier ressource</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Ajoute un alias de fichier ressource</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Diagramme de package</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Diagramme de package</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>Inclure les attributs de classes ?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Diagramme des modules</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Diagramme des modules</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>Inclure l'importation de modules externes?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Diagramme de l'application</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Diagramme de l'application</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>Inclure les noms de modules ?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Ajouter au dictionnaire</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Tout ignorer</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation>La sélection contient des données illégales pour un tri numérique.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
+      <location filename="../QScintilla/Editor.py" line="9977" />
       <source>EditorConfig Properties</source>
       <translation>Propriétés d'EditorConfig</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9977" />
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Les propriétés d'EditorConfig du fichier &lt;b&gt;{0}&lt;/b&gt; n'ont pas pu être chargées.&lt;/p&gt;</translation>
     </message>
@@ -52847,18 +52852,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -56101,17 +56106,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56166,7 +56171,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56186,7 +56191,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56226,7 +56231,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56240,156 +56245,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation>les lignes de code commentées devraient être supprimées</translation>
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58610,21 +58630,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59783,164 +59803,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation>python a quitté avec l'erreur ({0}).</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation>python n'a pas terminé dans les 30 secondes.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation>python n'a pas pu être démarré.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation>Installer PIP</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation>Réparer PIP</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation>Mise à jour des packages</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation>Installer des packages</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation>Désinstaller les packages</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation>Désinstaller les packages</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation>Voulez-vous vraiment désinstaller ces packages ?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60701,6 +60721,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60850,18 +60880,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -61042,13 +61072,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished">inconnu</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -61183,6 +61213,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62524,18 +62569,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Export des préférences</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation>Fichier propriétés (*.ini);;Tous les fichiers (*)</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Import des préférences</translation>
     </message>
@@ -69444,6 +69489,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74428,343 +74511,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -77202,10 +77270,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77362,22 +77430,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87730,7 +87803,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -90200,133 +90273,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished">Sélection Manuelle</translation>
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -106592,406 +106665,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation>l'indentation contient un mélange d'espaces et tabulations</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation>l"indentation n'est pas un multiple de 4</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation>bloc indenté attendu</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
-      <translation>indentation inattendue</translation>
+      <source>expected an indented block</source>
+      <translation>bloc indenté attendu</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation>indentation inattendue</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation>l'indentation n'est pas un multiple de quatre (commentaire)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation>bloc endenté attendu (commentaire)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation>indentation inattendue (commentaire)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
+      <source>multiple spaces before operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
+      <source>multiple spaces after operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation>tabulation après '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation>tabulation après '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
+      <source>block comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
-      <translation>{0} lignes vides attendues, {1} trouvées</translation>
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
+      <source>missing whitespace after keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation>{0} lignes vides attendues, {1} trouvées</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
+      <source>module level import not at top of file</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
+      <source>line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
+      <source>the backslash is redundant between brackets</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation>{0}: {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation>{0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
-      <translation>l'indentation contient des tabulations</translation>
+      <source>{0}: {1}</source>
+      <translation>{0}: {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation>{0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation>l'indentation contient des tabulations</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_it.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3947,77 +3947,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation type="unfinished">Annotazioni</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
+      <source>Async Functions</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation type="unfinished">Documentazione</translation>
+      <source>Code Complexity</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation type="unfinished">Errori</translation>
+      <source>Documentation</source>
+      <translation type="unfinished">Documentazione</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation type="unfinished" />
+      <source>Errors</source>
+      <translation type="unfinished">Errori</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
+      <source>Imports</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
+      <source>Logging</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
+      <source>Miscellaneous</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
+      <source>Naming</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation type="unfinished">Sicurezza</translation>
+      <source>'pathlib' Usage</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation type="unfinished">Sicurezza</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation type="unfinished">Warnings</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5116,7 +5121,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation type="unfinished" />
     </message>
@@ -6143,59 +6148,59 @@
       <translation type="unfinished">Filtro</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation>PEP-257</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation>Eric</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation type="unfinished">Errori</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation>Errore: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation>Nessun problema trovato.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation>Nessun problema trovato.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished">{0} - {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6265,146 +6270,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation>Triple virgolette singole convertite in triple virgolette doppie.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation>Virgolette introduttive corrette in {0}"""</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation>Singole righe documentazione raggruppate su una sola.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation>Aggiunto punto alla riga sommario.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation>Riga vuota prima della stringa di documentazione funzione/metodo rimossa.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation>Riga vuota inserita prima della stringa di documentazione della classe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation>Linea vuota inserita dopo la stringa di documentazione della classe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation>Linea vuota inserita dopo la stringa di documentazione del sommario.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation>Linea vuota inserita dopo l'ultimo paragrafo della stringa di documentazione.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation>Le virgolette di testa messe su una riga separata.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation>Le virgolette di coda messe su una riga separata.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation>Rimossa riga vuota prima della stringa di documentazione.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation>Rimossa riga vuota dopo della stringa di documentazione.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation>Riga vuota dopo la stringa di documentazione funzione/metodo rimossa.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation>Rimossa riga vuota dopo l'ultimo paragrafo.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation>Convertita Tabulazione in 4 spazi.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation>Identazione portata ad un multiplo di quattro.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation>Identazione di continuazione riga corretta.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation>Identazione di parentesi chiusa corretta.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation>Corretta la mancanza di indentazione della continuazione riga.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation>Parentesi chiusa allineata con quella d'apertura.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation>Livello di indentazione modificato.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation>Modificato il livello di indentazione dell'indentazione pendente.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation>Spazio non pertinente eliminato.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation>Spazi mancanti aggiunti.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation>Corretto spazio vicino al segno di commento.</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation type="unfinished">
         <numerusform>%n riga vuota inserita.</numerusform>
@@ -6412,7 +6417,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation type="unfinished">
         <numerusform>%n riga superflua eliminata</numerusform>
@@ -6420,73 +6425,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation>Righe vuote superflue eliminate.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation>Righe vuote superflue eliminate dopo a dichiarazione della funzione.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation>Import messi su righe separate.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation>Accorciate righe lughe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation>Rimossi barre rovesciate ridondanti.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation>Corretta istruzione composta.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation>Corretta comparazione con None/True/False.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation>'{0}' argumento aggiunto.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation>'{0}' argumento rimosso.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation>Eliminati gli spazi alla fine della linea.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
-      <translation>Aggiunta una nuova riga alla fine del file.</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
+      <translation>Corretta istruzione composta.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
-      <translation>Rghe vuote superflue eliminate dalla fine del file.</translation>
+      <source>Comparison to None/True/False corrected.</source>
+      <translation>Corretta comparazione con None/True/False.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
-      <translation>'&lt;&gt;' sostituito da '!='.</translation>
+      <source>'{0}' argument added.</source>
+      <translation>'{0}' argumento aggiunto.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation>'{0}' argumento rimosso.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation>Eliminati gli spazi alla fine della linea.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation>Aggiunta una nuova riga alla fine del file.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation>Rghe vuote superflue eliminate dalla fine del file.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation>'&lt;&gt;' sostituito da '!='.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -12576,7 +12581,7 @@
       <translation>Annulla commenta</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation type="unfinished" />
@@ -12859,7 +12864,7 @@
       <translation type="unfinished">Spelling</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Controllo sillabazione...</translation>
@@ -12920,7 +12925,7 @@
       <translation>Modifica Breakpoint...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Abilita breakpoint</translation>
@@ -13164,382 +13169,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Autocompletamento</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>L'autocomplentamento non è disponibile perchè non ci sono fonti impostate.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Disabilita breakpoint</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>Analisi codice</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>Analisi codice</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>Per favore seleziona un file per l'analisi</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>Mostra le annotazioni dell'analisi del codice</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Tutte le linee sono state analizzate.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>Mostra le annotazioni dell'analisi del codice</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Tutte le linee sono state analizzate.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>Non ci sono file di analisi disponibili.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Profilazione dati</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Profilazione dati</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Per favore seleziona un file per la profilazione</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Errore di sintassi</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Errore di sintassi</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>Nessun messaggio degli errori di sintassi disponibile.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation>Attenzione</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation>Nessun messaggio di attenzione disponibile.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>Errore: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation>Stile: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>Attenzione: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Nome Macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Seleziona un nome per la macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Carica un file di macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>File Macro (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Errore nel caricamento della macro</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Il file macro &lt;b&gt;{0}&lt;/b&gt; non può essere letto.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Errore nel caricamento della macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Il file macro &lt;b&gt;{0}&lt;/b&gt; non può essere letto.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il file macro &lt;b&gt;{0}&lt;/b&gt; è danneggiato.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Salva un file di macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Salva macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Salva macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il file  delle macro &lt;b&gt;{0}&lt;/b&gt; esiste già.Sovrascriverlo ?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Errore nel salvataggio della macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Errore nel salvataggio della macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Il file macro &lt;b&gt;{0}&lt;/b&gt; non può essere scritto.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Avvia registrazione della macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Avvia registrazione della macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>Registrazione macro già attiva. Avvia nuovamente ?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Registrazione Macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Registrazione Macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Inserisci un nome per la macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation>{0} (ro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation>&lt;br&gt;&lt;b&gt;Attenzione:&lt;/b&gt; con la riapertura le modifiche andranno perse.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>File modificato</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>Errore Drop</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>Errore Drop</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; non è un file.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Risorse</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Aggiungi file...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Aggiungi files...</translation>
+      <source>Add file...</source>
+      <translation>Aggiungi file...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Aggiungi files...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Aggiungi file sinonimo...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Aggiungi una risorsa localizzata...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>Aggiungi riquadro delle risorse</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Aggiungi un file risorse</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Aggiundi dei file risorse</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Aggiungi file sinonimo delle risorse</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Aggiungi file sinonimo delle risorse</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation>Alias per il file &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Diagrammi del package</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Diagrammi del package</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>Includi gli attributi della classe ?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Importa diagrammi</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Importa diagrammi</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>Includi gli import dai moduli esterni ?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Diagrammi dell'applicazione</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Diagrammi dell'applicazione</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>Includi i nomi dei moduli ?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Aggiungi al dizionario</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Ignora tutto</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation>Righe ordinate</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation>Righe ordinate</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation>La selezione contiene dati non validi per un ordinamento numerico.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
-      <source>EditorConfig Properties</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9977" />
+      <source>EditorConfig Properties</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52836,18 +52841,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -56090,17 +56095,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56155,7 +56160,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56175,7 +56180,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56215,7 +56220,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56229,156 +56234,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58518,21 +58538,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59691,164 +59711,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60609,6 +60629,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60758,18 +60788,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -60950,13 +60980,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished">sconosciuto</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -61075,6 +61105,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62420,18 +62465,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Esporta Preferenze</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation>File proprietà (*.ini);;Tutti i file(*)</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Importa Preferenze</translation>
     </message>
@@ -69327,6 +69372,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74302,343 +74385,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -77064,10 +77132,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77224,22 +77292,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87600,7 +87673,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -90070,133 +90143,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -106427,406 +106500,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation type="unfinished">indentazione contiene spazi e tab mischiati</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation type="unfinished">identazione non è un multiplo di quattro</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation type="unfinished">atteso un blocco identato</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
-      <translation type="unfinished">identazione non attesa</translation>
+      <source>expected an indented block</source>
+      <translation type="unfinished">atteso un blocco identato</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation type="unfinished">identazione non attesa</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished">spazio dopo '{0}'</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished">spazio prima '{0}'</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished">spazio prima '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished">spazi multipli prima dell'operatore</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished">spazi multipli dopo l'operatore</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished">tab prima dell'operatore</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
-      <translation type="unfinished">tab dopo l'operatore</translation>
+      <source>multiple spaces before operator</source>
+      <translation type="unfinished">spazi multipli prima dell'operatore</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
-      <translation type="unfinished">spazi intorno all'operatore mancanti</translation>
+      <source>multiple spaces after operator</source>
+      <translation type="unfinished">spazi multipli dopo l'operatore</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished">tab prima dell'operatore</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished">tab dopo l'operatore</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished">spazi intorno all'operatore mancanti</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished">spazi dopo '{0}' mancanti</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished">spazi multipli dopo '{0}'</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation type="unfinished">tab dopo '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
-      <translation type="unfinished" />
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished">spazi dopo '{0}' mancanti</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
+      <translation type="unfinished">spazi multipli dopo '{0}'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation type="unfinished">tab dopo '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished">al massimo due spazi prima di un commento inline</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished">commento inline deve iniziare con '#'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
+      <source>block comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
+      <source>missing whitespace after keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished">troppe linee vuote ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished">import multipli su una linea</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
-      <translation type="unfinished" />
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished">troppe linee vuote ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
+      <translation type="unfinished">import multipli su una linea</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
-      <translation type="unfinished">istruzioni multiple su una linea (due punti)</translation>
+      <source>module level import not at top of file</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
-      <translation type="unfinished">istruzioni multiple su una linea (punto e virgola)</translation>
+      <source>line too long ({0} &gt; {1} characters)</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
+      <source>the backslash is redundant between brackets</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
-      <translation type="unfinished" />
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished">istruzioni multiple su una linea (due punti)</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
+      <translation type="unfinished">istruzioni multiple su una linea (punto e virgola)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation type="unfinished">{0}: {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
-      <translation type="unfinished">identazione contiene tab</translation>
+      <source>{0}: {1}</source>
+      <translation type="unfinished">{0}: {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation type="unfinished">identazione contiene tab</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished">spazi all'inizio</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished">nessun ritorno a capo alla fine del file</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished">attesa 1 line vuota, 0 trovate</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished">linea vuota alla fine del file</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished">nessun ritorno a capo alla fine del file</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished">attesa 1 line vuota, 0 trovate</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished">linea vuota alla fine del file</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_pt.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3946,77 +3946,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation type="unfinished">Anotações</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
+      <source>Async Functions</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation type="unfinished">Documentação</translation>
+      <source>Code Complexity</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation type="unfinished">Erros</translation>
+      <source>Documentation</source>
+      <translation type="unfinished">Documentação</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation type="unfinished">Importações</translation>
+      <source>Errors</source>
+      <translation type="unfinished">Erros</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
-      <translation type="unfinished" />
+      <source>Imports</source>
+      <translation type="unfinished">Importações</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
+      <source>Logging</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
+      <source>Miscellaneous</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
+      <source>Naming</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation type="unfinished">Segurança</translation>
+      <source>'pathlib' Usage</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation type="unfinished">Segurança</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation type="unfinished">Avisos</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5114,7 +5119,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation type="unfinished" />
     </message>
@@ -6142,59 +6147,59 @@
       <translation type="unfinished">Filtro</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation>Erros</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation>Erro: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation>{0} (ignorado)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation>Não se encontraram problemas.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation>Não se encontraram problemas.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6264,146 +6269,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation>Três aspas simples convertidas a três aspas duplas.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation>Corrigidas as aspas introdutórias para ser {0}"""</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation>Docstring de linha única posta numa linha.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation>Ponto adicionado à linha sumário.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation>Retirada a linha vazia antes da docstring de função/método.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation>Linha branca inserida antes da docstring de classe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation>Inserida linha vazia depois da docstring de classe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation>Inserida linha vazia depois da docstring de sumário.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation>Inserida linha vazia depois do último parágrafo da docstring.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation>Aspas iniciais postas numa linha separada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation>Aspas finais postas numa linha separada.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation>Retirada linha vazia antes da docstring de classe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation>Retirada linha vazia depois da docstring de classe.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation>Retirada a linha vazia depois da docstring de função/método.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation>Retirada linha vazia depois do último parágrafo.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation>Tabulação convertida a 4 espaços.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation>Ajustada a indentação a múltiplos de quatro.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation>Corrigida a indentação da linha de continuação.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation>Corrigida a indentação de parêntesis de fecho.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation>Corrigida falta de indentação na linha de continuação.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation>Parêntesis de fecho alinhado com parêntesis de abertura.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation>Alterado o nível da indentação.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation>Alterado o nível da indentação pendente.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation>Indentação visual corrigida.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation>Espaço estranho retirado.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation>Adicionado espaço branco em falta.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation>Corrigido espaço em volta do símbolo de comentário.</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation>
         <numerusform>inserida uma linha vazia.</numerusform>
@@ -6411,7 +6416,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation>
         <numerusform>retirada uma linha desnecessária</numerusform>
@@ -6419,73 +6424,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation>Retiradas linhas vazias desnecessárias.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation>Retiradas linhas vazias desnecessárias após o decorador de função.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation>Imports foram postos em linhas separadas.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation>Foram encolhidas as linhas compridas.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation>Retirada barra invertida redundante entre parêntesis.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation>Instrução composta corrigida.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation>Corrigida a comparação a None/True/False.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation>Adicionado o argumento '{0}'.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation>Removido o argumento '{0}'.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation>Eliminado o espaço no fim de linha.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
-      <translation>adicionada uma linha nova ao fim do ficheiro.</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
+      <translation>Instrução composta corrigida.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
-      <translation>Retiradas linhas vazias desnecessárias do fim do ficheiro.</translation>
+      <source>Comparison to None/True/False corrected.</source>
+      <translation>Corrigida a comparação a None/True/False.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
-      <translation>'&lt;&gt;' substituido por '!='.</translation>
+      <source>'{0}' argument added.</source>
+      <translation>Adicionado o argumento '{0}'.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation>Removido o argumento '{0}'.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation>Eliminado o espaço no fim de linha.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation>adicionada uma linha nova ao fim do ficheiro.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation>Retiradas linhas vazias desnecessárias do fim do ficheiro.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation>'&lt;&gt;' substituido por '!='.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation>Não se pode gravar ficheiro! Saltando-o. Motivo: {0}</translation>
     </message>
@@ -12580,7 +12585,7 @@
       <translation>Descomentar</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation type="unfinished" />
@@ -12863,7 +12868,7 @@
       <translation type="unfinished">Verificação ortográfica</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Verificação ortográfica...</translation>
@@ -12924,7 +12929,7 @@
       <translation>Editar ponto de interrupção...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Habilitar pontos de interrupção</translation>
@@ -13168,382 +13173,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Autocompletar</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>Autocompletar não está disponivel porque a fonte de autocompletar não está definida.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Inabilitar ponto de interrupção</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Foram cobertas as linhas todas.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Foram cobertas as linhas todas.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Dados de Perfil</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Dados de Perfil</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Escolha um ficheiro de perfil por favor</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Erro de Sintaxe</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Erro de Sintaxe</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>Não está disponível a mensagem de erro de sintaxe.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation>Aviso</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation>Não estão disponíveis mensagens de aviso.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>Erro: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation>Estilo: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>Aviso: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Nome de Macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Selecionar um nome de macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Carregar ficheiro macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>Ficheiros Macro (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Erro ao carregar macro</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;O ficheiro macro &lt;b&gt;{0}&lt;/b&gt; não se pode ler.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Erro ao carregar macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;O ficheiro macro &lt;b&gt;{0}&lt;/b&gt; não se pode ler.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;O ficheiro macro &lt;b&gt;{0}&lt;/b&gt; está corrompido.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Gravar ficheiro macro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Gravar macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Gravar macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;O ficheiro macro &lt;b&gt;{0}&lt;/b&gt; já existe. Sobreescrever-lo?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Erro ao gravar macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Erro ao gravar macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;O ficheiro macro &lt;b&gt;{0}&lt;/b&gt; não pode ser escrito.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Iniciar Registo de Macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Iniciar Registo de Macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>A gravação de macro já está ativada. Começar nova?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Gravação de Macro</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Gravação de Macro</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Introduza o nome de macro:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation>&lt;br&gt;&lt;b&gt;Aviso:&lt;/b&gt; Perderá todas as alterações uma vez que o volte a abrir.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>Ficheiro alterado</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; não é um ficheiro.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Recursos</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Adicionar Ficheiro...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Adicionar Ficheiros...</translation>
+      <source>Add file...</source>
+      <translation>Adicionar Ficheiro...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Adicionar Ficheiros...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Adicionar ficheiro com pseudónimo...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Adicionar recursos localizado...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Adicionar recurso de ficheiro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Adicionar recursos de ficheiro</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Adicionar recurso de ficheiro com pseudónimo</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Adicionar recurso de ficheiro com pseudónimo</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation>Pseudónimo para o ficheiro &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Diagrama do Pacote</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Diagrama do Pacote</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>Incluir atributos de classes?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Diagrama de Imports</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Diagrama de Imports</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>Incluir imports de módulos externos?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Diagrama da Aplicação</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Diagrama da Aplicação</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>Incluir nome dos módulos?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Adicionar dicionário</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Ignorar Tudo</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation>Ordenar Linhas</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation>Ordenar Linhas</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation>A seleção contém dados ilegais para uma ordenação numérica.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
-      <source>EditorConfig Properties</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9977" />
+      <source>EditorConfig Properties</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52848,18 +52853,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -56102,17 +56107,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56167,7 +56172,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56187,7 +56192,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56227,7 +56232,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56241,156 +56246,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58513,21 +58533,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59686,164 +59706,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60604,6 +60624,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60753,18 +60783,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -60945,13 +60975,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished">desconhecido</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -61070,6 +61100,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62414,18 +62459,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Exportar Preferências</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation>Ficheiro de Propriedades (*.ini);;Ficheiros Todos (*)</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Importar Preferências</translation>
     </message>
@@ -69276,6 +69321,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74216,343 +74299,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -76976,10 +77044,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77136,22 +77204,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87458,7 +87531,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -89916,133 +89989,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -106247,406 +106320,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation type="unfinished">indentação com espaços misturados com tabulações</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation type="unfinished">indentação não é multipla de quatro</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation type="unfinished">esperado um bloque de indentação</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
-      <translation type="unfinished">indentação inesperada</translation>
+      <source>expected an indented block</source>
+      <translation type="unfinished">esperado um bloque de indentação</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation type="unfinished">indentação inesperada</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished">espaço depois de '{0}'</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished">espaço antes de '{0}</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished">espaço antes de '{0}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished">espaços múltiplos antes do operador</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished">espaços múltiplos depois do operador</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished">tabulação antes do operador</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
-      <translation type="unfinished">tabulação depois do operador</translation>
+      <source>multiple spaces before operator</source>
+      <translation type="unfinished">espaços múltiplos antes do operador</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
-      <translation type="unfinished">falta espaço à volta do operador</translation>
+      <source>multiple spaces after operator</source>
+      <translation type="unfinished">espaços múltiplos depois do operador</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished">tabulação antes do operador</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished">tabulação depois do operador</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished">falta espaço à volta do operador</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished">falta espaço à volta do operador aritmético</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished">falta espaço depois de '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished">múltiplos espaços depois de '{0}'</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation type="unfinished">tabulação depois de '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
-      <translation type="unfinished" />
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished">falta espaço depois de '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
+      <translation type="unfinished">múltiplos espaços depois de '{0}'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation type="unfinished">tabulação depois de '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished">múltiplos espaços depois da palavra-chave</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished">múltiplos espaços antes da palavra-chave</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished">tabulação depois da palavra-chave</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
-      <translation type="unfinished">tabulação antes da palavra-chave</translation>
+      <source>block comment should start with '# '</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
-      <translation type="unfinished" />
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished">múltiplos espaços depois da palavra-chave</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished">múltiplos espaços antes da palavra-chave</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished">tabulação depois da palavra-chave</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
+      <translation type="unfinished">tabulação antes da palavra-chave</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
-      <translation type="unfinished">encontradas linhas vazias depois do decorador de função</translation>
+      <source>missing whitespace after keyword</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished">encontradas linhas vazias depois do decorador de função</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished">demasiadas linhas vazias ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished">múltiplos imports numa linha</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished">linha demasiado comprida ({0} &gt; {1} caráteres)</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
-      <translation type="unfinished">barra invertida é redundante entre parêntesis</translation>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished">demasiadas linhas vazias ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
+      <translation type="unfinished">múltiplos imports numa linha</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
+      <source>module level import not at top of file</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
-      <translation type="unfinished" />
+      <source>line too long ({0} &gt; {1} characters)</source>
+      <translation type="unfinished">linha demasiado comprida ({0} &gt; {1} caráteres)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
-      <translation type="unfinished" />
+      <source>the backslash is redundant between brackets</source>
+      <translation type="unfinished">barra invertida é redundante entre parêntesis</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation type="unfinished">{0}: {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
-      <translation type="unfinished">indentação com tabluações</translation>
+      <source>{0}: {1}</source>
+      <translation type="unfinished">{0}: {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation type="unfinished">indentação com tabluações</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished">espaço ao final</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished">não há linha nova no final do ficheiro</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished">esperada 1 linha vazia, encontradas 0</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished">linha vazia no fim do ficheiro</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished">não há linha nova no final do ficheiro</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished">esperada 1 linha vazia, encontradas 0</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished">linha vazia no fim do ficheiro</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_ru.qm has changed
--- a/src/eric7/i18n/eric7_ru.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_ru.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3918,77 +3918,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation>Аннотации</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation>Асинхронные функции</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
-      <translation>Сложность кода</translation>
+      <source>Async Functions</source>
+      <translation>Асинхронные функции</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation>Документация</translation>
+      <source>Code Complexity</source>
+      <translation>Сложность кода</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation>Ошибки</translation>
+      <source>Documentation</source>
+      <translation>Документация</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation>Импорт</translation>
+      <source>Errors</source>
+      <translation>Ошибки</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
-      <translation>Ведение журнала</translation>
+      <source>Imports</source>
+      <translation>Импорт</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
-      <translation>Разное</translation>
+      <source>Logging</source>
+      <translation>Ведение журнала</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
-      <translation>Именованные</translation>
+      <source>Miscellaneous</source>
+      <translation>Разное</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
-      <translation>Порядок имен</translation>
+      <source>Naming</source>
+      <translation>Именованные</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
-      <translation>Использование 'pathlib'</translation>
+      <source>Name Order</source>
+      <translation>Порядок имен</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation>Безопасность</translation>
+      <source>'pathlib' Usage</source>
+      <translation>Использование 'pathlib'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation>Использование 'pydantic' и 'dataclass'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation>Безопасность</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation>Неиспользуемые</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation>Предупреждения</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation>Упрощенный код</translation>
     </message>
@@ -5090,7 +5095,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation>Не определено сообщение для кода '{0}'.</translation>
     </message>
@@ -6117,59 +6122,59 @@
       <translation>Отфильтровать</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation>PEP-257</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation>Eric</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation>Eric (Blacked)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation>Ошибки</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation>Ошибка: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation>{0} (проигнорировано)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation>Проблем со стилем не найдено.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation>Проблем со стилем не найдено.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation>Файлы не найдены (проверьте ваш игнор-лист).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation>{0} - {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation>Шаблон закомментированного кода</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation>Задайте шаблон закомментированного кода</translation>
     </message>
@@ -6239,146 +6244,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation>Утроенные одинарные кавычки заменены утроенными двойными.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation>Кавычки во введении исправлены на {0}"""</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation>Одиночная строка документации располагается в одной строке.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation>Добавлена точка в строке резюме.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation>Удалена пустая строка перед строкой документации для function/method.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation>Добавлена пустая строка перед строкой документации для class.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation>Добавлена пустая строка после строки документации для class.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation>Добавлена пустая строка после резюме строки документации.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation>Добавлена пустая строка после последнего абзаца строки документации.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation>Открывающие кавычки размещены на отдельной строке.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation>Закрывающие кавычки размещены на отдельной строке.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation>Удалена пустая строка перед строкой документации для class.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation>Удалена пустая строка после строки документации для class.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation>Удалена пустая строка после строки документации для function/method.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation>Удалена пустая строка после последнего абзаца.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation>Символы табуляции заменяются на 4 пробела.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation>Величина отступа задана кратной четырём.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation>Исправлен размер отступа строки продолжения.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation>Исправлен размер отступа закрывающей скобки.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation>Добавлен отступ к строке продолжения.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation>Закрывающая скобка выровнена с открывающей.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation>Изменен размер отступа.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation>Изменен размер отступа для висячих отступов.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation>Исправленена величина визуального отступа.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation>Посторонние пробельные символы удалены.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation>Добавлены недостающие пробельные символы.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation>Пробельные символы вокруг символа комментария откорректированы.</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation>
         <numerusform>%n пустая строка вставлена.</numerusform>
@@ -6387,7 +6392,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation>
         <numerusform>%n лишняя пустая строка удалена</numerusform>
@@ -6396,73 +6401,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation>Удалены лишние пустые строки.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation>Удалены лишние пустые строки после декоратора функции.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation>Операторы импорта помещены на отдельных строках.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation>Укорочены длинные строки.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation>Удалены излишние символы '\'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation>Составная инструкция исправлена.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation>Исправлено сравнение с None/True/False.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation>Добавлен '{0}' аргумент.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation>Удалён '{0}' аргумент.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation>Завершающие пробельные символы обрезаны.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
-      <translation>символ новой строки добавлен в конец файла.</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
+      <translation>Составная инструкция исправлена.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
-      <translation>Удалены пустые строки в конце файла.</translation>
+      <source>Comparison to None/True/False corrected.</source>
+      <translation>Исправлено сравнение с None/True/False.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
-      <translation>'&lt;&gt;' заменен на '!='.</translation>
+      <source>'{0}' argument added.</source>
+      <translation>Добавлен '{0}' аргумент.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation>Удалён '{0}' аргумент.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation>Завершающие пробельные символы обрезаны.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation>символ новой строки добавлен в конец файла.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation>Удалены пустые строки в конце файла.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation>'&lt;&gt;' заменен на '!='.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation>Не удалось сохранить файл! Пропускаем. Причина: {0}</translation>
     </message>
@@ -12587,7 +12592,7 @@
       <translation>Раскомментировать</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation>Генерировать строки документации</translation>
@@ -12870,7 +12875,7 @@
       <translation>Проверка орфографии</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Проверка орфографии...</translation>
@@ -12931,7 +12936,7 @@
       <translation>Редактировать точку останова...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Установить точку останова</translation>
@@ -13175,370 +13180,370 @@
       <translation>Введите полный путь к файлу устройства:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Автодополнение</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>Автодополнение недоступно, так как не задан источник автодополнения.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation>Источник автодополнений</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation>Источник автодополнений</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation>Список дополнений источника '{0}' уже зарегистрирован. Повторный запрос проигнорирован.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation>Источник всплывающих подсказок</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation>Источник всплывающих подсказок</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation>Источник всплывающих подсказок '{0}' уже зарегистрирован. Повторный запрос проигнорирован.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Убрать точку останова</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>Покрытие кода</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>Покрытие кода</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>Пожалуйста выберите файл покрытия</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation>Загрузить данные покрытия</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation>Загрузить данные покрытия</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось загрузить данные о покрытии из файла &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Причина: {1}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>Показать аннотации по покрытию кода</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Все строки были охвачены.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>Показать аннотации по покрытию кода</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Все строки были охвачены.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>Нет доступного файла покрытия.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Данные профайлера</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Данные профайлера</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Пожалуйста, выберите файл профиля</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Синтаксическая ошибка</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Синтаксическая ошибка</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>Нет сообщения о синтаксической ошибке.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation>Предупреждение</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation>Нет предупреждающего сообщения.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation>Инфо: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>Ошибка: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation>Стиль: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>Предупреждение: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Имя макроса</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Задайте имя макроса:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Загрузить макрос</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>Макросы (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Ошибка при загрузке макроса</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Невозможно прочитать файл с макросами: &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Ошибка при загрузке макроса</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Невозможно прочитать файл с макросами: &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл с макросами &lt;b&gt;{0}&lt;/b&gt; повреждён.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Сохранить файл с макросами</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Сохранить макрос</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Сохранить макрос</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Макро &lt;b&gt;{0}&lt;/b&gt; уже существует. Переписать?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Ошибка при сохранении макроса</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Ошибка при сохранении макроса</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Невозможно сохранить файл с макросами: &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Начать запись макроса</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Начать запись макроса</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>Запись макроса уже идёт. Начать новую запись?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Запись макроса</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Запись макроса</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Задайте имя макроса:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation>{0} (только чтение)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Файл &lt;b&gt;{0}&lt;/b&gt; был изменён, будучи открытым в eric. Перепрочесть?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation>&lt;br&gt;&lt;b&gt;Предупреждение:&lt;/b&gt; При переоткрытии все изменения будут потеряны.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>Файл изменен</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation>Перезагрузить файл</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation>Перезагрузить файл</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Редактор содержит несохраненные изменения.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Внимание:&lt;/b&gt; Вы потеряете свои изменения при повторной загрузке.&lt;/p&gt;&lt;p&gt;Действительно перезагрузить редактор?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>Ошибка Drag&amp;&amp;Drop</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>Ошибка Drag&amp;&amp;Drop</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; не является файлом.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Ресурсы</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Добавить файл...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Добавить файлы...</translation>
+      <source>Add file...</source>
+      <translation>Добавить файл...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Добавить файлы...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Добавить файл под другим именем...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Добавить локализованный ресурс...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>Добавить фрагмент ресурсов</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Добавить файл ресурсов</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Добавить файлы ресурсов</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Добавить файл ресурсов под другим именем</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Добавить файл ресурсов под другим именем</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation>Другое имя для файла &lt;b&gt;{0}&lt;/b&gt;:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Диаграмма пакетов</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Диаграмма пакетов</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>Включать атрибуты класса?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Диаграмма импортов</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Диаграмма импортов</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>Включать импорты из внешних модулей?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Диаграмма приложения</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Диаграмма приложения</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>Включать имена модулей?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Добавить в словарь</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Игнорировать всё</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation>Сортировать строки</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation>Сортировать строки</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation>Выборка содержит данные неподходящие для сортировки как числа.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation>Регистрация обработчика кликов мышки</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation>Регистрация обработчика кликов мышки</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation>Обработчик кликов мышки для "{0}" уже зарегистрирован "{1}". Запрос прерван "{2}"...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation>{0:4d}    {1}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
@@ -13546,12 +13551,12 @@
     =&gt;  {2}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
+      <location filename="../QScintilla/Editor.py" line="9977" />
       <source>EditorConfig Properties</source>
       <translation>Свойства EditorConfig</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9977" />
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удается загрузить свойства EditorConfig для файла &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
@@ -52886,18 +52891,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation>Универсальная плата MicroPython</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation>на базе RP2040/RP2350</translation>
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation>Неизвестное устройство</translation>
     </message>
@@ -56175,18 +56180,18 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
-      <translation>return/continue/break внутри блоков finally заставляют исключения отключаться. Исключения должны быть отключены в блоках except. Управляющие операторы могут быть перемещены за пределы блока finally.</translation>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
+      <translation>return/continue/break внутри finally blocks заставляют исключения отключаться. Исключения должны быть отключены в блоках except{0}. Управляющие операторы могут быть перемещены за пределы блока finally.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
-      <translation>Литерал односимвольного кортежа является избыточным. Используйте 'except {0}:' вместо 'except ({0},):'.</translation>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
+      <translation>Литерал односимвольного кортежа является избыточным. Используйте 'except{1} {0}:' вместо 'except{1} ({0},):'.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
-      <translation>Избыточные типы исключений в 'except ({0}){1}:'. Используйте 'except {2}{1}:', чтобы перехватывать точно такие же исключения.</translation>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
+      <translation>Избыточные типы исключений в 'except{3} ({0}){1}:'. Используйте 'except{3} {2}{1}:', чтобы перехватывать точно такие же исключения.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
@@ -56240,8 +56245,8 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
-      <translation>Исключение '{0}' было перехвачено несколько раз. Будет рассмотрено только первое исключение, а все остальные исключения могут быть безопасно удалены.</translation>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
+      <translation>Исключение '{0}' было перехвачено несколько раз. Будет рассмотрено только первое except{1}, а все остальные except{1} могут быть безопасно удалены.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
@@ -56260,8 +56265,8 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
-      <translation>Использование 'except ():' с пустым кортежем ничего не обрабатывает/не перехватывает. Добавьте исключения для обработки.</translation>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <translation>Использование 'except{0} ():' с пустым кортежем ничего не обрабатывает/не перехватывает. Добавьте исключения для обработки.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="447" />
@@ -56300,7 +56305,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation>Методы класса '__init__' не должны возвращать или выдавать какие-либо значения.</translation>
     </message>
     <message>
@@ -56314,156 +56319,171 @@
       <translation>Исключение с добавленным примечанием не используется. Вы забыли его активировать?</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation>Повторяющаяся пара key-value в словарном литерале.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation>Редактирование изменяемого итерационного параметра цикла часто приводит к неожиданным результатам/ошибкам.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation>ненужная f-string</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation>ненужная f-string</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation>не используйте 'self .__ class__' в качестве первого аргумента вызова 'super ()'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation>найден {0} форматтер</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
-      <translation>строка формата действительно содержит неиндексированные параметры</translation>
+      <source>found {0} formatter</source>
+      <translation>найден {0} форматтер</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation>строка документации действительно содержит неиндексированные параметры</translation>
+      <source>format string does contain unindexed parameters</source>
+      <translation>строка формата действительно содержит неиндексированные параметры</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
-      <translation>другая строка действительно содержит неиндексированные параметры</translation>
+      <source>docstring does contain unindexed parameters</source>
+      <translation>строка документации действительно содержит неиндексированные параметры</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
-      <translation>формат вызова использует слишком большой индекс ({0})</translation>
+      <source>other string does contain unindexed parameters</source>
+      <translation>другая строка действительно содержит неиндексированные параметры</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation>формат вызова использует отсутствующее ключевое слово ({0})</translation>
+      <source>format call uses too large index ({0})</source>
+      <translation>формат вызова использует слишком большой индекс ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
-      <translation>формат вызова использует ключевые аргументы, но нет именованных записей</translation>
+      <source>format call uses missing keyword ({0})</source>
+      <translation>формат вызова использует отсутствующее ключевое слово ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
-      <translation>формат ячейки использует переменные аргументы, но нет пронумерованных записей</translation>
+      <source>format call uses keyword arguments but no named entries</source>
+      <translation>формат вызова использует ключевые аргументы, но нет именованных записей</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
-      <translation>формат вызова использует скрытые и явные индексы вместе</translation>
+      <source>format call uses variable arguments but no numbered entries</source>
+      <translation>формат ячейки использует переменные аргументы, но нет пронумерованных записей</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
-      <translation>формат вызова предоставляет неиспользованный индекс ({0})</translation>
+      <source>format call uses implicit and explicit indexes together</source>
+      <translation>формат вызова использует скрытые и явные индексы вместе</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation>формат вызова предоставляет неиспользованный индекс ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation>формат вызова предоставляет неиспользуемое ключевое слово ({0})</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation>ожидался __future__ imports: {0}; получены только: {1}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation>ожидался __future__ imports: {0}; получены только: {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation>ожидался __future__ imports: {0}; не получено ничего</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation>gettext import with alias _ found: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation>обнаружена инструкция печати</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation>найден одноэлементный кортеж</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation>изменяемый аргумент по умолчанию типа {0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation>изменяемый аргумент по умолчанию типа {0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation>измененный аргумент по умолчанию для вызова функции '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation>если функция не имеет возвращаемого значения, (кроме None), None не следует добавлять в каждый return</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation>если функция имеет возвращаемое значение, (кроме None), то явное значение должно быть добавлено каждому return</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation>в конец функции, если она имеет возвращаемое значение, (кроме None), должен быть добавлен явный return</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation>значение не должно присваиваться переменной, если оно будет использоваться только как возвращаемое значение</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation>для предполагаемого продолжения строки предпочтительнее использование круглых, квадратных или фигурных скобок, а не обратного слеша</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation>неявно объединенные строковые или байтовые литералы в одной строке</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
-      <translation>неявно объединенные строковые или байтовые литералы в строке продолжения</translation>
+      <source>implicitly concatenated string or bytes literals on one line</source>
+      <translation>неявно объединенные строковые или байтовые литералы в одной строке</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation>неявно объединенные строковые или байтовые литералы в строке продолжения</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation>явно объединенные строковые или байтовые литералы должны быть неявно объединены</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation>закомментированные строки кода должны быть удалены</translation>
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58540,24 +58560,28 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation>os.path.splitext('foo.bar') следует заменить на foo_path.suffix</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation>os.path.relpath('/bar/foo', start='bar') следует заменить на foo_path.relative_to('/bar')</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation>open('foo') следует заменить на Path('foo').open()</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation>py.path.local находится в режиме обслуживания, вместо этого используйте pathlib</translation>
     </message>
+    <message>
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
+      <translation type="vanished">os.path.splitext('foo.bar') следует заменить на foo_path.suffix</translation>
+    </message>
   </context>
   <context>
     <name>PdfInfoWidget</name>
@@ -59718,164 +59742,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation>python завершен с ошибкой ({0}).</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation>python не завершился в течение 30 секунд.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation>невозможно запустить python.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation>&lt;project&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation>Интерпретатор для виртуального окружения</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation>Интерпретатор для виртуального окружения</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation>Для выбранного виртуального окружения не настроен интерпретатор.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation>Установка PIP</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation>Восстановление PIP</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation>Обновление пакетов</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation>Никаких пакетов для обновления не осталось, кроме 'eric-ide' или 'PyQt6'.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation>Установка пакетов</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation>Установка пакетов, перечисленных в зависимостях</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation>Установка проекта</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation>Установка зависимостей 'pyproject'</translation>
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation>Выбранный файл 'project.toml' не содержит раздела 'project.dependencies'. Прервать...</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation>Установка зависимостей 'pyproject'</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation>Выбранный файл 'project.toml' не содержит раздела 'project.dependencies'. Прервать...</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось прочитать выбранный файл 'project.toml'.&lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation>Установить пакеты из 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation>Деинсталяция пакетов</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation>Деинсталяция пакетов</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation>Вы действительно хотите деинсталировать эти пакеты?</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation>Деинсталяция пакетов, перечисленных в требованиях</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation>Деинсталировать зависимости 'pyproject'</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation>Деинсталировать зависимости 'pyproject'</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation>&lt;p&gt;Не удалось прочитать выбранный файл 'project.toml'. &lt;/p&gt;&lt;p&gt;Причина: {0}&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation>Деинсталировать пакеты из 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1197" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation>Информация о кэше</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1223" />
-      <location filename="../PipInterface/Pip.py" line="1214" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation>Список кэшированных файлов</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1215" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation>Задайте шаблон файлов (пустая строка - все файлы):</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1247" />
-      <location filename="../PipInterface/Pip.py" line="1240" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation>Удалить кэшированные файлы</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1241" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation>Задайте шаблон файла:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1272" />
-      <location filename="../PipInterface/Pip.py" line="1264" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation>Очистить кэш</translation>
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1265" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation>Вы действительно хотите очистить pip-кэш? Все файлы должны быть загружены снова.</translation>
     </message>
@@ -60636,6 +60660,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation>Введите поисковый запрос для пакетов</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation>Поиск пакетов</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation>Тип представления дерева зависимостей пакетов</translation>
     </message>
@@ -60785,207 +60819,207 @@
       <translation>Получение списка обновленных пакетов...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation>Очистка среды</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation>Очистка среды прошла успешно.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation>Не удалось удалить некоторые оставшиеся директории пакетов. Удалите их вручную.</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="832" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="834" />
       <source>Search PyPI</source>
       <translation>Поиск в PyPI</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="833" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="835" />
       <source>&lt;p&gt;No package details info for &lt;b&gt;{0}&lt;/b&gt; available.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Недоступна подробная информация о пакете &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="852" />
-      <source>Pip</source>
-      <translation>Pip</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="854" />
+      <source>Pip</source>
+      <translation>Pip</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="856" />
       <source>Install Pip</source>
       <translation>Инсталировать Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="857" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="859" />
       <source>Install Pip to User-Site</source>
       <translation>Инсталировать Pip в User-Site</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="860" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="862" />
       <source>Repair Pip</source>
       <translation>Восстановить Pip</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="867" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="869" />
       <source>Install</source>
       <translation>Установить</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1046" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="869" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1048" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="871" />
       <source>Install Packages</source>
       <translation>Установить пакеты</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="872" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="874" />
       <source>Install Local Package</source>
       <translation>Установить локальный пакет</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="875" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="877" />
       <source>Re-Install Selected Packages</source>
       <translation>Переинсталировать выбранные пакеты</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="882" />
-      <source>Requirements/Constraints</source>
-      <translation>Зависимости/Ограничения</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="884" />
+      <source>Requirements/Constraints</source>
+      <translation>Зависимости/Ограничения</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="886" />
       <source>Install Requirements</source>
       <translation>Установить зависимости</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="887" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="889" />
       <source>Uninstall Requirements</source>
       <translation>Деинсталировать зависимости</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="890" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="892" />
       <source>Generate Requirements...</source>
       <translation>Генерировать зависимости...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="894" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="896" />
       <source>Install from 'pyproject.toml'</source>
       <translation>Установить из 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="898" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="900" />
       <source>Uninstall from 'pyproject.toml'</source>
       <translation>Деинсталировать из 'pyproject.toml'</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="903" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="905" />
       <source>Generate Constraints...</source>
       <translation>Генерировать ограничения...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="910" />
-      <source>Cache</source>
-      <translation>Кэш</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/PipPackagesWidget.py" line="912" />
+      <source>Cache</source>
+      <translation>Кэш</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.py" line="914" />
       <source>Show Cache Info...</source>
       <translation>Показать информацию о кэше...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="915" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="917" />
       <source>Show Cached Files...</source>
       <translation>Показать кэшированные файлы...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="918" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="920" />
       <source>Remove Cached Files...</source>
       <translation>Удалить кэшированные файлы...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="921" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="923" />
       <source>Purge Cache...</source>
       <translation>Очистить кэш...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="938" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="940" />
       <source>Show Licenses...</source>
       <translation>Показать лицензии...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="942" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="944" />
       <source>Check Vulnerabilities</source>
       <translation>Проверить уязвимости</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="946" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="948" />
       <source>Update Vulnerability Database</source>
       <translation>Обновить базу уязвимостей</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="950" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="952" />
       <source>Create SBOM file</source>
       <translation>Создать файл SBOM</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="957" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="959" />
       <source>Edit User Configuration...</source>
       <translation>Правка конфигурации пользователя...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="960" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="962" />
       <source>Edit Environment Configuration...</source>
       <translation>Правка конфигурации среды окружения...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="965" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="967" />
       <source>Configure...</source>
       <translation>Настроить...</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1209" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1196" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1185" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1211" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1198" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1187" />
       <source>Edit Configuration</source>
       <translation>Правка конфигурации</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1210" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1197" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1186" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1212" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1199" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1188" />
       <source>No valid configuration path determined. Aborting</source>
       <translation>Не определен допустимый путь конфигурации. Прерывание</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1419" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1421" />
       <source>{0} {1}</source>
       <comment>package name, package version</comment>
       <translation>{0} {1}</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1440" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1442" />
       <source>Affected Version:</source>
       <translatorcomment>Подверженная уязвимости версия:  Пораженная версия Уязвимая</translatorcomment>
       <translation>Версия с уязвимостью:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1443" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1445" />
       <source>Advisory:</source>
       <translatorcomment>Консультация:  Рекомендация</translatorcomment>
       <translation>Рекомендуемая:</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1578" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1553" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation>неизвестная</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1575" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation>любая</translation>
     </message>
@@ -61085,6 +61119,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation>Не отображать среды окружения 'Conda'</translation>
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation>Список зависимостей</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation>Фон поискового маркера:</translation>
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation>Выберите цвет подсветки поиска в списке зависимостей.</translation>
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62432,18 +62481,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Экспорт Preferences</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation>Файлы Preferences (*.ini);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Импорт Preferences</translation>
     </message>
@@ -69383,6 +69432,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation>позиционный аргумент для поля по умолчанию</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation>аргумент без аннотаций внутри модели Pydantic</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation>ненужный вызов поля для указания значения по умолчанию</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation>аргумент по умолчанию, указанный в аннотированном</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation>имя поля переопределяет аннотацию</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation>повторяющееся имя поля</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation>Использование __pydantic_config__; рассмотрите возможность использования декоратора `with_config`</translation>
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74418,343 +74505,328 @@
       <translation>'contextlib.suppress()' обнаружены.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation>Запросы вызова без тайм-аута.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation>Запросы вызова с тайм-аутом, установленным в None.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation>Приложение Flask запускается с параметром 'debug=True', который предоставляет отладчик Werkzeug и позволяет выполнять произвольный код.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation>Используется 'tarfile.extractall(members=function(tarfile))'. Убедитесь, что ваша функция правильно отбрасывает опасные элементы ({0}).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation>Найдено 'tarfile.extractall(members=?)', но не удалось определить тип членов. Проверьте правильность проверки членов ({0}).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation>'tarfile.extractall()' используется без какой-либо валидации. Пожалуйста, проверьте и отбросьте опасные элементы.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation>Pickle и модули, которые служат его оберткой, могут быть небезопасны, когда используются для десериализации ненадежных данных, возможная проблема безопасности.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation>Десериализация с помощью модуля marshal, возможно опасна.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation>Использование небезопасной хеш-функции MD2, MD4, MD5 или SHA1.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation>Использование небезопасного шифра '{0}'. Замените известным безопасным шифром, таким как AES.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation>Использование небезопасного режима шифрования '{0}'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation>Использование небезопасной и устаревшей функции (mktemp).</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation>Использование возможно небезопасной функции - рассмотрите возможность использования более безопасного ast.literal_eval.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation>Использование mark_safe () может проявить уязвимости межсайтового скриптинга и должно быть пересмотрено.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation>Аудит url открыт для разрешенных схем. Разрешение использования file:/ или пользовательских схем часто бывает неожиданным.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation>Стандартные псевдослучайные генераторы не подходят для целей безопасности/криптографии.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation>Вызваны функции, связанные с Telnet. Telnet считается небезопасным. Используйте SSH или другой протокол шифрования.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation>Известно, что использование '{0}' для анализа ненадежных данных XML уязвимо для атак XML. Замените '{0}' его эквивалентной функцией defusedxml или убедитесь, что вызывается defusedxml.defuse_stdlib().</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation>Известно, что использование '{0}' для анализа ненадежных данных XML уязвимо для атак XML. Замените '{0}' его эквивалентной функцией defusedxml.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation>Вызваны связанные с FTP функции. FTP считается небезопасным. Используйте SSH/SFTP/SCP или другой протокол шифрования.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation>По умолчанию Python создаст безопасный проверенный контекст SSL для использования в таких классах, как HTTPSConnection. Но, тем не менее, он все еще позволяет использовать незащищенный контекст через _create_unverified_context, который возвращается к предыдущему поведению, которое не проверяет сертификаты или не выполняет проверки имени хоста.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation>Использование небезопасной хэш-функции {0}.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation>Использование небезопасного хэша {0} в целях безопасности. Рассмотрим «usedforsecurity=False».</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation>Импортируется модуль, связанный с telnet. Telnet считается небезопасным. Используйте SSH или другой протокол шифрования.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation>Импортируется модуль, связанный с FTP. FTP считается небезопасным. Используйте SSH/SFTP/SCP или другой протокол шифрования.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation>Учитывайте возможные последствия для безопасности, связанные с модулем {0}.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation>Известно, что использование '{0}' для анализа ненадежных данных XML уязвимо для атак XML. Замените '{0}' эквивалентным пакетом defusedxml или убедитесь, что вызывается defusedxml.defuse_stdlib ().</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation>Известно, что использование '{0}' для анализа ненадежных данных XML уязвимо для XML-атак. Замените '{0}' эквивалентным пакетом defusedxml.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation>Известно, что использование '{0}' для анализа ненадежных данных XML уязвимо для XML-атак. Используйте функцию defusedxml.xmlrpc.monkey_patch(), чтобы обезопасить xmlrpclib и устранить уязвимости XML.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation>Учтитывайте возможные последствия для безопасности, связанные с модулем '{0}'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation>Библиотека pyCrypto и ее модуль '{0}' больше не поддерживаются и не рекомендуются к использованию. Подумайте об использовании библиотеки pyca/cryptography.</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation>Импортируется модуль, связанный с IPMI. IPMI считается небезопасным. Используйте зашифрованный протокол.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation>Вызов 'request' с параметром verify = False отключает проверку SSL-сертификатов, проблема безопасности.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation>Вызов 'ssl.wrap_socket' с идентификацией небезопасной версии протокола SSL/TLS, проблема безопасности.</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation>Импортируется модуль, связанный с IPMI. IPMI считается небезопасным. Используйте зашифрованный протокол.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation>Вызов 'request' с параметром verify = False отключает проверку SSL-сертификатов, проблема безопасности.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation>Вызов 'ssl.wrap_socket' с идентификацией небезопасной версии протокола SSL/TLS, проблема безопасности.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation>Вызов 'SSL.Context' с идентификацией небезопасной версии протокола SSL/TLS, проблема безопасности.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation>Вызов функции с идентификацией небезопасной версии протокола SSL/TLS, проблема безопасности.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation>Определение функции с идентификацией небезопасной версии протокола SSL/TLS по умолчанию, возможная проблема безопасности.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation>Вызов 'ssl.wrap_socket' без указания версии протокола SSL/TLS, по умолчанию 'SSLv23', может быть небезопасным, возможна проблема безопасности.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation>Размеры ключей {0} меньше {1:d} битов считаются разрушаемыми.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation>Использование небезопасного 'yaml.load()'. Позволяет создавать экземпляры произвольных объектов. Рассмотрите yaml.safe_load().</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation>Вызов Paramiko с установленной политикой автоматического доверия неизвестному ключу хоста.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation>Использование SNMPv1 и SNMPv2 небезопасно. По возможности следует использовать SNMPv3.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation>Вы не должны использовать SNMPv3 без шифрования. noAuthNoPriv и authNoPriv небезопасны.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation>Возможно введение оболочки через вызов 'Paramiko', проверьте правильность санации входов.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation>Вызов 'subprocess' с параметром shell=True кажется безопасным, но может быть изменен в будущем, подумайте о перезаписи без shell</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation>Идентифицирован вызов 'subprocess' с параметром shell = True, проблема безопасности.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation>вызов 'subprocess' - проверка выполнения ненадежного ввода.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation>Идентифицирован вызов функции с параметром shell = True, возможна проблема безопасности.</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation>Запуск процесса с shell: кажется безопасным, но в будущем может быть изменен, подумайте о переписывании без shell</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation>Запуск процесса с shell, обнаружение возможного внедрения, проблема безопасности.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation>Запуск процесса без shell.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation>Запуск процесса с частичным исполняемым путем.</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
-      <translation>Запуск процесса с shell: кажется безопасным, но в будущем может быть изменен, подумайте о переписывании без shell</translation>
+      <source>Possible SQL injection vector through string-based query construction.</source>
+      <translation>Возможный вектор внедрения SQL через построение строки на основе запроса.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation>Запуск процесса с shell, обнаружение возможного внедрения, проблема безопасности.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation>Запуск процесса без shell.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation>Запуск процесса с частичным исполняемым путем.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation>Возможный вектор внедрения SQL через построение строки на основе запроса.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation>Возможно введение символа подстановки при вызове: {0}</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation>Использование 'extra()' открывает потенциальный вектор атаки SQL.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation>Использование 'RawSQL()' открывает потенциальный вектор атаки SQL.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation>Обнаружено использование небезопасной функции logging.config.listen().</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation>Исходный файл Python содержит двунаправленные управляющие символы ({0}).</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation>Использование 'extra()' открывает потенциальный вектор атаки SQL.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation>Использование 'RawSQL()' открывает потенциальный вектор атаки SQL.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation>Обнаружено использование небезопасной функции logging.config.listen().</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
-      <translation>Исходный файл Python содержит двунаправленные управляющие символы ({0}).</translation>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation>Использование небезопасной загрузки или сохранения PyTorch.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation>Использование шаблонов jinja2 с 'autoescape=False' опасно и может привести к XSS. Используйте 'autoescape=True' или используйте функцию 'select_autoescape' для устранения уязвимостей XSS.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation>По умолчанию jinja2 устанавливает для 'autoescape' значение False. Рекомендуется использовать 'autoescape=True' или использовать функцию 'select_autoescape' для устранения уязвимостей XSS.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation>Использование небезопасной загрузки или сохранения PyTorch.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation>Использование шаблонов jinja2 с 'autoescape=False' опасно и может привести к XSS. Используйте 'autoescape=True' или используйте функцию 'select_autoescape' для устранения уязвимостей XSS.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation>По умолчанию jinja2 устанавливает для 'autoescape' значение False. Рекомендуется использовать 'autoescape=True' или использовать функцию 'select_autoescape' для устранения уязвимостей XSS.</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation>Шаблоны Mako разрешают рендеринг HTML/JS по умолчанию и по своей природе открыты для атак XSS. Убедитесь, что переменные во всех шаблонах должным образом очищены с помощью флагов 'n', 'h' или 'x' (в зависимости от контекста). Например, для экранирования HTML используйте переменную 'data', выполните ${{ data |h }}.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation>Потенциальный XSS на функцию 'mark_safe()'.</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation>Возможный жестко закодированный идентификатор ключа доступа AWS: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation>Возможный жестко закодированный секретный ключ доступа AWS: {0}</translation>
     </message>
@@ -77198,10 +77270,10 @@
       <translation>Используйте "all({0} for {1} in {2})"</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77358,22 +77430,27 @@
       <translation>Используйте keyword-argument вместо magic number</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation>Do not nest f-strings</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation>Инициализировать словарь "{0}" напрямую</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation>Используйте "Optional[{0}]" вместо "{1}"</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation>Используйте "Optional[{0}]" вместо "{1}"</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation>Удалить возвратное присвоение "{0}"</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation>Используйте "{0}.items()" вместо "zip({0}.keys(), {0}.values())"</translation>
     </message>
@@ -87738,8 +87815,12 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Чтобы использовать переменные в шаблоне, вам просто нужно заключить имя переменной в символы $. Когда вы будете использовать шаблон, вам будет предложено ввести значение этой переменной.&lt;/p&gt;&lt;p&gt;Пример шаблона: $VAR$&lt;/p&gt;&lt;p&gt;При использовании этого шаблона вам будет предложено указать значение для переменной $VAR$. Все вхождения $VAR$ будут заменены введенным вами значением.&lt;/p&gt;&lt;p&gt;Если вам в шаблоне нужен одиночный символ  $-типа, который не используется для 'окаймленной' переменной, введите $$ (два символа доллара). Они будут автоматически заменены одиночным $-символом при использовании шаблона.&lt;/p&gt;&lt;p&gt;Если вы хотите чтобы содержимое переменных обрабатывалось иначе, за именем переменной должны следовать ':' и один спецификатор форматирования (например  $VAR:ml$). Поддерживаемые спецификаторы:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Специфицирует многострочное форматирование. Первая строка содержимого переменной предваряется строкой, расположенной перед переменной в той же строке шаблона. Все остальные строки предваряются таким же количеством символов пропуска, что и строка, содержащая переменную.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Специфицирует повторное форматирование строки. Каждая строка содержимого переменной предваряется строкой, расположенной перед переменной в той же строке шаблона.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Следующие предопределенные переменные могут использоваться в шаблоне:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;сегодняшняя дата в ISO формате (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;текущий год&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;имя проекта (если есть)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;путь проекта (если есть)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;полный путь к текущему файлу&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;полный путь родительской директории&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;имя текущего файла (без директории)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;как &lt;i&gt;file_name&lt;/i&gt;, но без расширения&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;расширение текущего файла&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;текущий выбранный текст&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Задает точку вставки курсора после вставки шаблона.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Задает диапазон выбранного текста в шаблоне после вставки шаблона (используется вместе с 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Задает диапазон выбранного текста в шаблоне после вставки шаблона (используется вместе с 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;текст в буфере обмена&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Если вы хотите изменить стандартные разделители на любые другие, пожалуйста используйте для этого диалог настройки шаблона.&lt;/p&gt;</translation>
+      <translation type="vanished">&lt;p&gt;Чтобы использовать переменные в шаблоне, вам просто нужно заключить имя переменной в символы $. Когда вы будете использовать шаблон, вам будет предложено ввести значение этой переменной.&lt;/p&gt;&lt;p&gt;Пример шаблона: $VAR$&lt;/p&gt;&lt;p&gt;При использовании этого шаблона вам будет предложено указать значение для переменной $VAR$. Все вхождения $VAR$ будут заменены введенным вами значением.&lt;/p&gt;&lt;p&gt;Если вам в шаблоне нужен одиночный символ  $-типа, который не используется для 'окаймленной' переменной, введите $$ (два символа доллара). Они будут автоматически заменены одиночным $-символом при использовании шаблона.&lt;/p&gt;&lt;p&gt;Если вы хотите чтобы содержимое переменных обрабатывалось иначе, за именем переменной должны следовать ':' и один спецификатор форматирования (например  $VAR:ml$). Поддерживаемые спецификаторы:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Специфицирует многострочное форматирование. Первая строка содержимого переменной предваряется строкой, расположенной перед переменной в той же строке шаблона. Все остальные строки предваряются таким же количеством символов пропуска, что и строка, содержащая переменную.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Специфицирует повторное форматирование строки. Каждая строка содержимого переменной предваряется строкой, расположенной перед переменной в той же строке шаблона.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Следующие предопределенные переменные могут использоваться в шаблоне:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;сегодняшняя дата в ISO формате (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;текущий год&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;имя проекта (если есть)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;путь проекта (если есть)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;полный путь к текущему файлу&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;полный путь родительской директории&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;имя текущего файла (без директории)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;как &lt;i&gt;file_name&lt;/i&gt;, но без расширения&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;расширение текущего файла&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;текущий выбранный текст&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Задает точку вставки курсора после вставки шаблона.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Задает диапазон выбранного текста в шаблоне после вставки шаблона (используется вместе с 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Задает диапазон выбранного текста в шаблоне после вставки шаблона (используется вместе с 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;текст в буфере обмена&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Если вы хотите изменить стандартные разделители на любые другие, пожалуйста используйте для этого диалог настройки шаблона.&lt;/p&gt;</translation>
     </message>
   </context>
   <context>
@@ -90223,133 +90304,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h3&gt;Плата CircuitPython&lt;/h3&gt;&lt;p&gt;Для подготовки платы к прошивке выполните следующие действия:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Переключите устройство в режим 'bootloader' двойным нажатием кнопки RESET.&lt;/li&gt;&lt;li&gt;Подождите, пока устройство не перейдет в режим 'bootloader'.&lt;/li&gt;&lt;li&gt;(Если этого не произошло, попробуйте сделать паузы между нажатиями короче или длинее.)&lt;/li&gt;&lt;li&gt;Убедитесь, что загрузочный том доступен (для этого может потребоваться его установка).&lt;/li&gt;&lt;li&gt;Выберите файл микрокода для прошивки и нажмите кнопку прошивки.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h3&gt;Плата Pico (RP2040/RP2350)&lt;/h3&gt;&lt;p&gt;Для подготовки платы к перепрошивке выполните следующие действия:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Установите режим загрузчика (плата &lt;b&gt;без&lt;/b&gt; кнопки RESET):&lt;ul&gt;&lt;li&gt;Подключите плату удерживая кнопку BOOTSEL.&lt;/li&gt;&lt;/ul&gt;Установите режим 'bootloader' (плата &lt;b&gt;с&lt;/b&gt; кнопкой RESET):&lt;ul&gt;&lt;li&gt;удерживайте нажатой кнопку RESET &lt;/li&gt;&lt;li&gt;удерживайте кнопку BOOTSEL&lt;/li&gt;&lt;li&gt;отпустите RESET&lt;/li&gt;&lt;li&gt;отпустите кнопку BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Подождите, пока устройство не перейдет в режим 'bootloader'.&lt;/li&gt;&lt;li&gt;Убедитесь, что загрузочный том доступен (может потребоваться его установка).&lt;/li&gt;&lt;li&gt;Выберите файл микрокода для прошивки и нажмите кнопка прошивки.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation>Файлы MicroPython/CircuitPython (*.uf2);;Все файлы (*)</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation>Ручной выбор</translation>
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation>Инструкции по перезагрузке:</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Известные устройства не обнаружены.&lt;/h4&gt;&lt;p&gt;Следуйте приведеным ниже инструкциям для установки &lt;b&gt;одной&lt;/b&gt; платы в режим 'bootloader'. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation>&lt;h4&gt;Загрузить прошивку {0}&lt;/h4&gt;&lt;p&gt;Следуйте приведенным ниже инструкциям для установки &lt;b&gt;одной&lt;/b&gt; платы в режим 'bootloader'. По готовности нажмите кнопку &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;&lt;hr/&gt;{1}</translation>
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation>Инструкции по перезагрузке:</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Известные устройства не обнаружены.&lt;/h4&gt;&lt;p&gt;Следуйте приведеным ниже инструкциям для установки &lt;b&gt;одной&lt;/b&gt; платы в режим 'bootloader'. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation>&lt;h4&gt;Загрузить прошивку {0}&lt;/h4&gt;&lt;p&gt;Следуйте приведенным ниже инструкциям для установки &lt;b&gt;одной&lt;/b&gt; платы в режим 'bootloader'. По готовности нажмите кнопку &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;&lt;hr/&gt;{1}</translation>
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>&lt;h4&gt;Обнаружены устройства, потенциально поддерживающие UF2&lt;/h4&gt;&lt;p&gt;Найдены следующие устройства, возможно поддерживающие UF2:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Следуйте приведенным ниже инструкциям для установки &lt;b&gt;одной&lt;/b&gt; платы в режим 'bootloader'. По готовности нажмите кнопку &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>&lt;h4&gt;Известные устройства не обнаружены.&lt;/h4&gt;&lt;p&gt;Следуйте приведенным ниже инструкциям для установки &lt;b&gt;одной&lt;/b&gt; платы в режим 'bootloader'. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation>Инструкции для прошивки:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation>&lt;h4&gt;Выбран метод прошивки 'ручной'.&lt;/h4&gt;&lt;p&gt;Чтобы прошить устройство путем ввода данных вручную следуйте приведенным ниже инструкциям .&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Переведите устройство в режим 'bootloader'.&lt;/li&gt;&lt;li&gt;Подождите, пока устройство не перейдет в режим 'bootloader'.&lt;/li&gt;&lt;li&gt;Убедитесь, что загрузочный том доступен (для этого может потребоваться его установка), и выберите путь к нему.&lt;/li&gt;&lt;li&gt;Выберите файл микрокода для прошивки и нажмите кнопку прошивки.&lt;/li&gt;&lt;/ol&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation>Загрузочный том не найден:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation>&lt;h4&gt;Не обнаружен загрузочный том.&lt;/h4&gt;&lt;p&gt;Пожалуйста убедитесь, что загрузочный том устройства доступен для прошивки. </translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>Этот том должен иметь имя &lt;b&gt;{0}&lt;/b&gt;. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation>Этот том должен иметь одно из этих имен.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Инструкции по сбросу&lt;/h4&gt;&lt;p&gt;Следуйте приведенным ниже инструкциям для установки платы в режим 'bootloader'. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Инструкции по сбросу&lt;/h4&gt;&lt;p&gt;Следуйте приведенным ниже инструкциям для установки платы в режим 'bootloader'. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation>Обнаружены несколько загрузочных томов:</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation>&lt;h4&gt;Обнаружены несколько загрузочных томов&lt;/h4&gt;&lt;p&gt;Были найдены пути к этим томам.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Убедитесь, что только одно устройство определенного типа готово для прошивки. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation>&lt;h4&gt;Обнаружены несколько загрузочных томов&lt;/h4&gt;&lt;p&gt;Были найдены пути к этим томам.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Убедитесь, что только одно устройство определенного типа готово для прошивки. По готовности нажмите &lt;b&gt;Освежить&lt;/b&gt;.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation>Прошивка микрокода</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Прошивка выбранного микрокода на устройство. Подождите, пока устройство не перезагрузится автоматически.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation>Прошивка {0}</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Прошивка микрокода {0} на устройство. Подождите, пока устройство не перезагрузится автоматически.&lt;/p&gt;</translation>
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation>Прошивка UF2-устройств</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation>Загрузочные тома устройства UF2 не найдены.</translation>
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation>Выберите загрузочный том устройства:</translation>
     </message>
@@ -106684,406 +106765,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation>отступ содержит смесь пробелов и табуляции</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation>размер отступа не кратен четырем</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation>ожидался блок с отступом</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
-      <translation>неожиданный отступ</translation>
+      <source>expected an indented block</source>
+      <translation>ожидался блок с отступом</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation>неожиданный отступ</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation>размер отступа не кратен четырем (комментарий)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation>ожидался блок с отступом (комментарий)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation>неожиданный отступ (комментарий)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation>over-indented</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation>over-indented</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation>отступ строки продолжения не кратен четырём</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation>строка продолжения не имеет отступа или выступа</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation>закрывающая скобка не соответствует отступу скобки, открывающей строку</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation>закрывающая скобка визуально не соответствует отступу</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation>отступ строки продолжения такой же как у следующей логической строки</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation>строка продолжения с отступом для висящего отступа</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation>строка продолжения с отступом для визуального отступа</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation>continuation line under-indented for visual indent</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation>визуально отступ строки такой же как у следующей логической строки</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation>у висячего отступа невыровненная строка продолжения</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation>закрывающая скобка не имеет отступа</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation>символ пропуска после '{0}'</translation>
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation>символ пропуска перед '{0}'</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation>символ пропуска перед '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation>символ пропуска после символа декоратора "@"</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation>множественные пробелы перед оператором</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation>множественные пробелы после оператора</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation>табуляция перед оператором</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
-      <translation>табуляция после оператора</translation>
+      <source>multiple spaces before operator</source>
+      <translation>множественные пробелы перед оператором</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
-      <translation>отсутствуют символы пропуска вокруг оператора</translation>
+      <source>multiple spaces after operator</source>
+      <translation>множественные пробелы после оператора</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation>табуляция перед оператором</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation>табуляция после оператора</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation>отсутствуют символы пропуска вокруг оператора</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation>отсутствуют символы пропуска вокруг арифметического оператора</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation>отсутствуют символы пропуска вокруг побитового оператора или оператора сдвига</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation>отсутствуют символы пропуска вокруг оператора по модулю</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation>отсутствуют символы пропуска после '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation>множественные пробелы после '{0}'</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation>табуляция после '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation>неожиданные пробелы вокруг ключевого слова / параметра equals</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
-      <translation>отсутствие символов пропуска вокруг параметра equals</translation>
+      <source>missing whitespace around modulo operator</source>
+      <translation>отсутствуют символы пропуска вокруг оператора по модулю</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation>отсутствуют символы пропуска после '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
+      <translation>множественные пробелы после '{0}'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation>табуляция после '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation>неожиданные пробелы вокруг ключевого слова / параметра equals</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation>отсутствие символов пропуска вокруг параметра equals</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation>по крайней мере два пробела перед комментарием в строке кода</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation>комментарий в строке кода должен начинаться с '# '</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation>блок комментариев должен начинаться с '# '</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation>слишком много лидирующих '#' для блока комментария</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation>множественные пробелы после ключевого слова</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation>множественные пробелы перед ключевым словом</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation>табуляция после ключевого слова</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
-      <translation>табуляция перед ключевым словом</translation>
+      <source>block comment should start with '# '</source>
+      <translation>блок комментариев должен начинаться с '# '</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation>отсутствует символ пропуска после ключевого слова</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation>слишком много лидирующих '#' для блока комментария</translation>
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
-      <translation>ожидалось {0} пустых строк, найдено {1}</translation>
+      <source>multiple spaces after keyword</source>
+      <translation>множественные пробелы после ключевого слова</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation>множественные пробелы перед ключевым словом</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation>табуляция после ключевого слова</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
+      <translation>табуляция перед ключевым словом</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation>слишком много пустых строк ({0}), ожидалось {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
-      <translation>пустые строки после декоратора функции</translation>
+      <source>missing whitespace after keyword</source>
+      <translation>отсутствует символ пропуска после ключевого слова</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation>ожидалось {0} пустых строк, найдено {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation>слишком много пустых строк ({0}), ожидалось {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation>пустые строки после декоратора функции</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation>ожидалось {0} пустых строк после определения класса или функции, найдено {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation>ожидалось {0} пустых строк перед вложенным определением, найдено {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation>слишком много пустых строк ({0}) перед вложенным определением, ожидалось {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation>слишком много пустых строк ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation>множественный импорт в одной строке</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
-      <translation>импорт модуля не в начале файла</translation>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
+      <translation>ожидалось {0} пустых строк перед вложенным определением, найдено {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation>слишком длинная строка ({0} &gt; {1} символов)</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
-      <translation>символ '\' излишний внутри скобок</translation>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation>слишком много пустых строк ({0}) перед вложенным определением, ожидалось {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation>слишком много пустых строк ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
+      <translation>множественный импорт в одной строке</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
-      <translation>несколько инструкций в одной строке (двоеточие)</translation>
+      <source>module level import not at top of file</source>
+      <translation>импорт модуля не в начале файла</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
-      <translation>несколько инструкций в одной строке (точка с запятой)</translation>
+      <source>line too long ({0} &gt; {1} characters)</source>
+      <translation>слишком длинная строка ({0} &gt; {1} символов)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
-      <translation>инструкция завершается точкой с запятой</translation>
+      <source>the backslash is redundant between brackets</source>
+      <translation>символ '\' излишний внутри скобок</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
-      <translation>несколько инструкций в одной строке (def)</translation>
+      <source>multiple statements on one line (colon)</source>
+      <translation>несколько инструкций в одной строке (двоеточие)</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
+      <translation>несколько инструкций в одной строке (точка с запятой)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
-      <translation>сравнение с {0} должно быть {1}</translation>
+      <source>statement ends with a semicolon</source>
+      <translation>инструкция завершается точкой с запятой</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation>проверка на членство должна быть 'not in'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
-      <translation>проверка на идентичность объекта должна быть 'is not'</translation>
+      <source>multiple statements on one line (def)</source>
+      <translation>несколько инструкций в одной строке (def)</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation>не сравнивайте типы, для точных проверок используйте 'is' / 'is not', например, для проверок используйте 'isinstance()'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
-      <translation>не используйте bare except</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation>сравнение с {0} должно быть {1}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
+      <translation>проверка на членство должна быть 'not in'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
-      <translation>не назначайте лямбда-выражение, используйте def</translation>
+      <source>test for object identity should be 'is not'</source>
+      <translation>проверка на идентичность объекта должна быть 'is not'</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation>не сравнивайте типы, для точных проверок используйте 'is' / 'is not', например, для проверок используйте 'isinstance()'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation>не используйте bare except</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation>не назначайте лямбда-выражение, используйте def</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation>неоднозначное имя переменной '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation>неоднозначное определение класса '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation>неоднозначное определение функции '{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation>{0}: {1}</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation>{0}</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
-      <translation>отступ содержит табуляцию</translation>
+      <source>{0}: {1}</source>
+      <translation>{0}: {1}</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation>{0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation>отступ содержит табуляцию</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation>завершающие символы пропуска</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation>нет символа новой строки в конце файла</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation>пустая строка содержит символы пропуска</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation>пустая строка в конце файла</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation>разрыв строки перед бинарным оператором</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation>разрыв строки после бинарного оператора</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation>нет символа новой строки в конце файла</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation>пустая строка содержит символы пропуска</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation>пустая строка в конце файла</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation>разрыв строки перед бинарным оператором</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation>разрыв строки после бинарного оператора</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation>слишком длинная строка документа ({0} &gt; {1} символов)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation>недействительная escape-последовательность '\{0}'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation>'async' и 'await' - зарезервированные ключевые слова начиная с Python 3.7</translation>
     </message>
--- a/src/eric7/i18n/eric7_tr.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_tr.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3940,77 +3940,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
+      <source>Async Functions</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation type="unfinished">Belgeleme</translation>
+      <source>Code Complexity</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation type="unfinished">Hatalar</translation>
+      <source>Documentation</source>
+      <translation type="unfinished">Belgeleme</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation type="unfinished" />
+      <source>Errors</source>
+      <translation type="unfinished">Hatalar</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
+      <source>Imports</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
+      <source>Logging</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
+      <source>Miscellaneous</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
+      <source>Naming</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation type="unfinished">Güvenlik</translation>
+      <source>'pathlib' Usage</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation type="unfinished">Güvenlik</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5107,7 +5112,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation type="unfinished" />
     </message>
@@ -6132,59 +6137,59 @@
       <translation type="unfinished">Süzgeç</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation type="unfinished">Hatalar</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation type="unfinished">Hata: {0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation type="unfinished">Sorun bulunamadı.</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation type="unfinished">Sorun bulunamadı.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished">{0} - {1}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6254,146 +6259,146 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation type="unfinished" />
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation type="unfinished">
         <numerusform />
@@ -6401,7 +6406,7 @@
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation type="unfinished">
         <numerusform />
@@ -6409,73 +6414,73 @@
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <source>Comparison to None/True/False corrected.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
+      <source>'{0}' argument added.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -12559,7 +12564,7 @@
       <translation>Yorumlanamaz</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation type="unfinished" />
@@ -12842,7 +12847,7 @@
       <translation type="unfinished">Yazım kontolü yapılıyor</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>Yazım Kontrolü...</translation>
@@ -12903,7 +12908,7 @@
       <translation>Bekleme noktasını düzenle...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>Beklemenoktasını etkinleştir</translation>
@@ -13147,382 +13152,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>Otomatik tamamlama</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>Otomatiktamamlama uygun değil çünkü bu otomatiktamamlama kaynağı değil.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>Durmanoktasını iptal et</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>Kod Koruyucu</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>Kod Koruyucu</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>Lütfen bir koruyucu dosya seçiniz</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>Kodların Dipnotunu Göster</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>Tüm satırlar korumaya alındı.</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>Kodların Dipnotunu Göster</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>Tüm satırlar korumaya alındı.</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>Hazırda koruma dosyası yok.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>Veri Kesiti</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>Veri Kesiti</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>Lütfen kesit dosyasını seçiniz</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>Sözdizimi Hatası</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>Sözdizimi Hatası</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>Uygun söz dizimi hata mesajı yok.</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation type="unfinished">Dikkat</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>Hata: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>Dikkat: {0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>Makro Adı</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>Bir makro ismi seç:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>Makro dosyasını yükle</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>Makro dosyaları (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>Makronun yüklenmesinde hata</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation>&lt;p&gt;Makro dosyası &lt;b&gt;{0}&lt;/b&gt; okunamıyor.&lt;/p&gt;</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>Makronun yüklenmesinde hata</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation>&lt;p&gt;Makro dosyası &lt;b&gt;{0}&lt;/b&gt; okunamıyor.&lt;/p&gt;</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Makro dosyası &lt;b&gt;{0}&lt;/b&gt; bozuk.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>Makro Dosyasını Kaydet</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>Makro Kaydet</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>Makro Kaydet</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;Makro dosyası &lt;b&gt;{0}&lt;/b&gt; zaten var. Üzerine yazılsın mı?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>Makronun kaydedilmesinde hata</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>Makronun kaydedilmesinde hata</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation>&lt;p&gt;Makro dosyası &lt;b&gt;{0}&lt;/b&gt; yazılamıyor.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>Makro Kaydı Başladı</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>Makro Kaydı Başladı</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>Makro kaydı şuan aktif. Yeniden başlasın mı?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>Makro Kaydediliyor</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>Makro Kaydediliyor</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>Makronun ismini gir:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation>{0} (ro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>Dosya değiştirilmiş</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>Düşme hatası</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>Düşme hatası</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; bir dosya değil.&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>Kaynaklar</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>Dosya ekle...</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
-      <translation>Dosyaları ekle...</translation>
+      <source>Add file...</source>
+      <translation>Dosya ekle...</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>Dosyaları ekle...</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>Kısaltmalar dosyasına ekle...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>Yaral kaynak ekle...</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>Çerçeve kaynağı ekle</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>Dosya kaynağını ekle</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>Dosya kaynaklarını ekle</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>Kısaltmalar dosyası kaynağını ekle</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>Kısaltmalar dosyası kaynağını ekle</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation>&lt;b&gt;{0} dosyası için takma ad&lt;/b&gt;:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>Paket Şeması</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>Paket Şeması</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>Sınıf nitelikleri dahil edilsin mi?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>Şemayı İçe Aktar</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>Şemayı İçe Aktar</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>Harici modüllerdan içe aktarım dahil edilsin mi?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>Uygulama Şeması</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>Uygulama Şeması</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>Modül isimleri dahil edilsin mi?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>Sözlüğe ekle</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>Hepsini Yoksay</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
-      <source>EditorConfig Properties</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9977" />
+      <source>EditorConfig Properties</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52769,18 +52774,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -56023,17 +56028,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56088,7 +56093,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56108,7 +56113,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56148,7 +56153,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56162,156 +56167,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58422,21 +58442,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59595,164 +59615,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60513,6 +60533,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60662,18 +60692,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -60854,13 +60884,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished">bilinmeyen</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -60979,6 +61009,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62319,18 +62364,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>Seçenekleri Dışa Aktar</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>Seçenekleri İçe Aktar</translation>
     </message>
@@ -69179,6 +69224,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74111,343 +74194,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -76873,10 +76941,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77033,22 +77101,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87372,7 +87445,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -89836,133 +89909,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -106163,406 +106236,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
+      <source>expected an indented block</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
+      <source>multiple spaces before operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
+      <source>multiple spaces after operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
+      <source>block comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
+      <source>missing whitespace after keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
+      <source>module level import not at top of file</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
+      <source>line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
+      <source>the backslash is redundant between brackets</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
+      <source>{0}: {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Sun Feb 09 15:47:57 2025 +0100
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Sat Mar 01 15:52:40 2025 +0100
@@ -3949,77 +3949,82 @@
   <context>
     <name>CheckerCategories</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="85" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
       <source>Annotations</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="86" />
-      <source>Async Functions</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="87" />
-      <source>Code Complexity</source>
-      <translation type="unfinished">代码复杂度</translation>
+      <source>Async Functions</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="88" />
-      <source>Documentation</source>
-      <translation type="unfinished">文档</translation>
+      <source>Code Complexity</source>
+      <translation type="unfinished">代码复杂度</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="89" />
-      <source>Errors</source>
-      <translation type="unfinished">错误</translation>
+      <source>Documentation</source>
+      <translation type="unfinished">文档</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="90" />
-      <source>Imports</source>
-      <translation type="unfinished">导入</translation>
+      <source>Errors</source>
+      <translation type="unfinished">错误</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="91" />
-      <source>Logging</source>
-      <translation type="unfinished" />
+      <source>Imports</source>
+      <translation type="unfinished">导入</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="92" />
-      <source>Miscellaneous</source>
+      <source>Logging</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="93" />
-      <source>Naming</source>
+      <source>Miscellaneous</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="94" />
-      <source>Name Order</source>
+      <source>Naming</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="95" />
-      <source>'pathlib' Usage</source>
+      <source>Name Order</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="96" />
-      <source>Security</source>
-      <translation type="unfinished">安全</translation>
+      <source>'pathlib' Usage</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="97" />
+      <source>'pydantic' and 'dataclass' Usage</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="100" />
+      <source>Security</source>
+      <translation type="unfinished">安全</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="101" />
       <source>Unused</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="98" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="102" />
       <source>Warnings</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="103" />
       <source>Simplify Code</source>
       <translation type="unfinished" />
     </message>
@@ -5118,7 +5123,7 @@
   <context>
     <name>CodeStyleChecker</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="516" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="528" />
       <source>No message defined for code '{0}'.</source>
       <translation type="unfinished" />
     </message>
@@ -6146,59 +6151,59 @@
       <translation type="unfinished">过滤器</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="131" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="135" />
       <source>PEP-257</source>
       <translation>PEP-257</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="136" />
       <source>Eric</source>
       <translation>Eric</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="133" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="137" />
       <source>Eric (Blacked)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="239" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="243" />
       <source>Errors</source>
       <translation>错误</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="264" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="268" />
       <source>Error: {0}</source>
       <translation>错误:{0}</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1252" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1256" />
       <source>{0} (ignored)</source>
       <translation>{0}(已忽略)</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1327" />
-      <source>No issues found.</source>
-      <translation>未发现问题。</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1331" />
+      <source>No issues found.</source>
+      <translation>未发现问题。</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1335" />
       <source>No files found (check your ignore list).</source>
       <translation>找不到文件(检查您忽略的列表)。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1652" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1611" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1656" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="1615" />
       <source>{0} - {1}</source>
       <comment>issue code, message</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2997" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3010" />
       <source>Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="2998" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/CodeStyleCheckerDialog.py" line="3011" />
       <source>Enter a Commented Code Whitelist Pattern</source>
       <translation type="unfinished" />
     </message>
@@ -6268,226 +6273,226 @@
   <context>
     <name>CodeStyleFixer</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="265" />
       <source>Triple single quotes converted to triple double quotes.</source>
       <translation>三单引号转换成双引号。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="257" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="268" />
       <source>Introductory quotes corrected to be {0}"""</source>
       <translation>前导引号更正为 {0}"""</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="260" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="271" />
       <source>Single line docstring put on one line.</source>
       <translation>单行的文档字串放在一行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="263" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="274" />
       <source>Period added to summary line.</source>
       <translation>附于总结线的句号。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="290" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="266" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="301" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="277" />
       <source>Blank line before function/method docstring removed.</source>
       <translation>函数/方法文档字串前的空行已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="269" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="280" />
       <source>Blank line inserted before class docstring.</source>
       <translation>类文档字串前插入的空行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="272" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="283" />
       <source>Blank line inserted after class docstring.</source>
       <translation>类文档字串后的插入的空行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="275" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="286" />
       <source>Blank line inserted after docstring summary.</source>
       <translation>文档字串摘要后插入的空行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="278" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="289" />
       <source>Blank line inserted after last paragraph of docstring.</source>
       <translation>文档字串最后段落插入的空行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="281" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="292" />
       <source>Leading quotes put on separate line.</source>
       <translation>前导引号放在单独一行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="284" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="295" />
       <source>Trailing quotes put on separate line.</source>
       <translation>尾随引号放在单独一行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="287" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="298" />
       <source>Blank line before class docstring removed.</source>
       <translation>类文档字串前的空行已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="304" />
       <source>Blank line after class docstring removed.</source>
       <translation>类文档字串后的空行已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="296" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="307" />
       <source>Blank line after function/method docstring removed.</source>
       <translation>函数/方法文档字串后的空行已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="299" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="310" />
       <source>Blank line after last paragraph removed.</source>
       <translation>最后段落后的空行已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="302" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="313" />
       <source>Tab converted to 4 spaces.</source>
       <translation>制表符转换为4个空格。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="305" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="316" />
       <source>Indentation adjusted to be a multiple of four.</source>
       <translation>缩进调整为4的倍数。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="308" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="319" />
       <source>Indentation of continuation line corrected.</source>
       <translation>连续行缩进已更正。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="311" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="322" />
       <source>Indentation of closing bracket corrected.</source>
       <translation>右括号缩进已更正。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="314" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="325" />
       <source>Missing indentation of continuation line corrected.</source>
       <translation>连续行缩进丢失已更正。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="317" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="328" />
       <source>Closing bracket aligned to opening bracket.</source>
       <translation>右括号与左括号一致。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="320" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="331" />
       <source>Indentation level changed.</source>
       <translation>缩进值已改变。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="323" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="334" />
       <source>Indentation level of hanging indentation changed.</source>
       <translation>悬挂缩进的缩进值已改变。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="326" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="337" />
       <source>Visual indentation corrected.</source>
       <translation>可视缩进已更正。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="341" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="335" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="329" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="352" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="346" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="340" />
       <source>Extraneous whitespace removed.</source>
       <translation>多余空格已删除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="332" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="349" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="343" />
       <source>Missing whitespace added.</source>
       <translation>丢失的空格已添加。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="355" />
       <source>Whitespace around comment sign corrected.</source>
       <translation>注释符两边的空格已更正。</translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="358" />
       <source>%n blank line(s) inserted.</source>
       <translation>
         <numerusform>已插入 %n 空行。</numerusform>
       </translation>
     </message>
     <message numerus="yes">
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="361" />
       <source>%n superfluous lines removed</source>
       <translation>
         <numerusform>已移除 %n 多余行</numerusform>
       </translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="353" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="364" />
       <source>Superfluous blank lines removed.</source>
       <translation>多余空行已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="356" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="367" />
       <source>Superfluous blank lines after function decorator removed.</source>
       <translation>函数修饰符后的多余空行已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="359" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="370" />
       <source>Imports were put on separate lines.</source>
       <translation>已将导入放在单独行。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="362" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="373" />
       <source>Long lines have been shortened.</source>
       <translation>长行已被截短。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="365" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="376" />
       <source>Redundant backslash in brackets removed.</source>
       <translation>括号中的多余反斜杠已移除。</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="371" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="368" />
-      <source>Compound statement corrected.</source>
-      <translation>复合语句已更正。</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="374" />
-      <source>Comparison to None/True/False corrected.</source>
-      <translation>无/真/假的对比已更正。</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="377" />
-      <source>'{0}' argument added.</source>
-      <translation>已添加 '{0}' 参数。</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="378" />
-      <source>'{0}' argument removed.</source>
-      <translation>已移除 '{0}' 参数。</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
-      <source>Whitespace stripped from end of line.</source>
-      <translation>删除行尾空格。</translation>
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="382" />
-      <source>newline added to end of file.</source>
-      <translation>文件尾添加新行。</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="379" />
+      <source>Compound statement corrected.</source>
+      <translation>复合语句已更正。</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="385" />
-      <source>Superfluous trailing blank lines removed from end of file.</source>
-      <translation>文件尾多余的空行已移除。</translation>
+      <source>Comparison to None/True/False corrected.</source>
+      <translation>无/真/假的对比已更正。</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="388" />
-      <source>'&lt;&gt;' replaced by '!='.</source>
-      <translation>用“!=”代替“&lt;&gt;”。</translation>
+      <source>'{0}' argument added.</source>
+      <translation>已添加 '{0}' 参数。</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="389" />
+      <source>'{0}' argument removed.</source>
+      <translation>已移除 '{0}' 参数。</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="390" />
+      <source>Whitespace stripped from end of line.</source>
+      <translation>删除行尾空格。</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="393" />
+      <source>newline added to end of file.</source>
+      <translation>文件尾添加新行。</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="396" />
+      <source>Superfluous trailing blank lines removed from end of file.</source>
+      <translation>文件尾多余的空行已移除。</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="399" />
+      <source>'&lt;&gt;' replaced by '!='.</source>
+      <translation>用“!=”代替“&lt;&gt;”。</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="400" />
       <source>Could not save the file! Skipping it. Reason: {0}</source>
       <translation>不能保存该文件!已略过。原因: {0}</translation>
     </message>
@@ -12570,7 +12575,7 @@
       <translation>取消注释</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="10163" />
+      <location filename="../QScintilla/Editor.py" line="10164" />
       <location filename="../QScintilla/Editor.py" line="1015" />
       <source>Generate Docstring</source>
       <translation>生成文档字符串</translation>
@@ -12853,7 +12858,7 @@
       <translation type="unfinished">拼写法</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9251" />
+      <location filename="../QScintilla/Editor.py" line="9252" />
       <location filename="../QScintilla/Editor.py" line="1420" />
       <source>Check spelling...</source>
       <translation>正在进行拼写检查…</translation>
@@ -12914,7 +12919,7 @@
       <translation>编辑断点…</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6593" />
+      <location filename="../QScintilla/Editor.py" line="6594" />
       <location filename="../QScintilla/Editor.py" line="1505" />
       <source>Enable breakpoint</source>
       <translation>允许断点</translation>
@@ -13158,382 +13163,382 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5742" />
+      <location filename="../QScintilla/Editor.py" line="5743" />
       <source>Autocompletion</source>
       <translation>自动完成</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5743" />
+      <location filename="../QScintilla/Editor.py" line="5744" />
       <source>Autocompletion is not available because there is no autocompletion source set.</source>
       <translation>自动完成无效,没有设定自动完成源。</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="5877" />
-      <source>Auto-Completion Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="5878" />
+      <source>Auto-Completion Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="5879" />
       <source>The completion list provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6174" />
-      <source>Call-Tips Provider</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="6175" />
+      <source>Call-Tips Provider</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="6176" />
       <source>The call-tips provider '{0}' was already registered. Ignoring duplicate request.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="6597" />
+      <location filename="../QScintilla/Editor.py" line="6598" />
       <source>Disable breakpoint</source>
       <translation>去除断点</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7021" />
-      <source>Code Coverage</source>
-      <translation>代码覆盖率</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7022" />
+      <source>Code Coverage</source>
+      <translation>代码覆盖率</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7023" />
       <source>Please select a coverage file</source>
       <translation>请选择一个覆盖率文件</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7084" />
-      <source>Load Coverage Data</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7085" />
+      <source>Load Coverage Data</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7086" />
       <source>&lt;p&gt;The coverage data could not be loaded from file &lt;b&gt;{0}&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Reason: {1}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7114" />
-      <location filename="../QScintilla/Editor.py" line="7106" />
-      <source>Show Code Coverage Annotations</source>
-      <translation>显示代码覆盖率注解</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7107" />
-      <source>All lines have been covered.</source>
-      <translation>所有行均被已覆盖。</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7115" />
+      <location filename="../QScintilla/Editor.py" line="7107" />
+      <source>Show Code Coverage Annotations</source>
+      <translation>显示代码覆盖率注解</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7108" />
+      <source>All lines have been covered.</source>
+      <translation>所有行均被已覆盖。</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7116" />
       <source>There is no coverage file available.</source>
       <translation>没有有效的覆盖率文件。</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7223" />
-      <source>Profile Data</source>
-      <translation>剖析数据</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7224" />
+      <source>Profile Data</source>
+      <translation>剖析数据</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7225" />
       <source>Please select a profile file</source>
       <translation>请选择一个剖析文件</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7386" />
-      <location filename="../QScintilla/Editor.py" line="7380" />
-      <source>Syntax Error</source>
-      <translation>语法错误</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7387" />
+      <location filename="../QScintilla/Editor.py" line="7381" />
+      <source>Syntax Error</source>
+      <translation>语法错误</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7388" />
       <source>No syntax error message available.</source>
       <translation>语法错误消息无效。</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
-      <location filename="../QScintilla/Editor.py" line="7628" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
+      <location filename="../QScintilla/Editor.py" line="7629" />
       <source>Warning</source>
       <translation>警告</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7634" />
+      <location filename="../QScintilla/Editor.py" line="7635" />
       <source>No warning messages available.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7713" />
+      <location filename="../QScintilla/Editor.py" line="7714" />
       <source>Info: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7729" />
-      <location filename="../QScintilla/Editor.py" line="7715" />
+      <location filename="../QScintilla/Editor.py" line="7730" />
+      <location filename="../QScintilla/Editor.py" line="7716" />
       <source>Error: {0}</source>
       <translation>错误:{0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7717" />
+      <location filename="../QScintilla/Editor.py" line="7718" />
       <source>Style: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7722" />
+      <location filename="../QScintilla/Editor.py" line="7723" />
       <source>Warning: {0}</source>
       <translation>警告:{0}</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Macro Name</source>
       <translation>宏名称</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7852" />
+      <location filename="../QScintilla/Editor.py" line="7853" />
       <source>Select a macro name:</source>
       <translation>选择一个宏名称:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7878" />
+      <location filename="../QScintilla/Editor.py" line="7879" />
       <source>Load macro file</source>
       <translation>输入宏文件</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7924" />
-      <location filename="../QScintilla/Editor.py" line="7880" />
+      <location filename="../QScintilla/Editor.py" line="7925" />
+      <location filename="../QScintilla/Editor.py" line="7881" />
       <source>Macro files (*.macro)</source>
       <translation>宏文件 (*.macro)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7902" />
-      <location filename="../QScintilla/Editor.py" line="7892" />
-      <source>Error loading macro</source>
-      <translation>载入宏文件出错</translation>
-    </message>
-    <message>
-      <location filename="../QScintilla/Editor.py" line="7893" />
-      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7903" />
+      <location filename="../QScintilla/Editor.py" line="7893" />
+      <source>Error loading macro</source>
+      <translation>载入宏文件出错</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7894" />
+      <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be read.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7904" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; is corrupt.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7922" />
+      <location filename="../QScintilla/Editor.py" line="7923" />
       <source>Save macro file</source>
       <translation>保存宏文件</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7940" />
-      <source>Save macro</source>
-      <translation>保存宏</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7941" />
+      <source>Save macro</source>
+      <translation>保存宏</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7942" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; already exists. Overwrite it?&lt;/p&gt;</source>
       <translation>&lt;p&gt;宏文件 &lt;b&gt;{0}&lt;/b&gt; 已经存在。是否覆盖?&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7956" />
-      <source>Error saving macro</source>
-      <translation>保存宏出错</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7957" />
+      <source>Error saving macro</source>
+      <translation>保存宏出错</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7958" />
       <source>&lt;p&gt;The macro file &lt;b&gt;{0}&lt;/b&gt; could not be written.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7970" />
-      <source>Start Macro Recording</source>
-      <translation>开始宏录制</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7971" />
+      <source>Start Macro Recording</source>
+      <translation>开始宏录制</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7972" />
       <source>Macro recording is already active. Start new?</source>
       <translation>宏录制已激活。开始录制新宏?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="7997" />
-      <source>Macro Recording</source>
-      <translation>宏录制</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="7998" />
+      <source>Macro Recording</source>
+      <translation>宏录制</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="7999" />
       <source>Enter name of the macro:</source>
       <translation>输入宏名称:</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8215" />
+      <location filename="../QScintilla/Editor.py" line="8216" />
       <source>{0} (ro)</source>
       <translation>{0}(只读)</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8412" />
+      <location filename="../QScintilla/Editor.py" line="8413" />
       <source>&lt;p&gt;The file &lt;b&gt;{0}&lt;/b&gt; has been changed while it was opened in eric. Reread it?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8418" />
+      <location filename="../QScintilla/Editor.py" line="8419" />
       <source>&lt;br&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reopening it.</source>
       <translation>&lt;br&gt;&lt;b&gt;警告:&lt;/b&gt;您在重新打开时将丢失所有更改。</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8425" />
+      <location filename="../QScintilla/Editor.py" line="8426" />
       <source>File changed</source>
       <translation>文件已改变</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8569" />
-      <source>Reload File</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8570" />
+      <source>Reload File</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8571" />
       <source>&lt;p&gt;The editor contains unsaved modifications.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; You will lose your changes upon reloading it.&lt;/p&gt;&lt;p&gt;Shall the editor really be reloaded?&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8670" />
-      <source>Drop Error</source>
-      <translation>降落误差</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8671" />
+      <source>Drop Error</source>
+      <translation>降落误差</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8672" />
       <source>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; is not a file.&lt;/p&gt;</source>
       <translation>&lt;p&gt;&lt;b&gt;{0}&lt;/b&gt; 不是一个文件。&lt;/p&gt;</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8692" />
+      <location filename="../QScintilla/Editor.py" line="8693" />
       <source>Resources</source>
       <translation>资源</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8694" />
-      <source>Add file...</source>
-      <translation>添加文件…</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8695" />
-      <source>Add files...</source>
+      <source>Add file...</source>
       <translation>添加文件…</translation>
     </message>
     <message>
       <location filename="../QScintilla/Editor.py" line="8696" />
+      <source>Add files...</source>
+      <translation>添加文件…</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8697" />
       <source>Add aliased file...</source>
       <translation>添加别名文件…</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8698" />
+      <location filename="../QScintilla/Editor.py" line="8699" />
       <source>Add localized resource...</source>
       <translation>添加本地资源…</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8701" />
+      <location filename="../QScintilla/Editor.py" line="8702" />
       <source>Add resource frame</source>
       <translation>添加资源结构</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8721" />
+      <location filename="../QScintilla/Editor.py" line="8722" />
       <source>Add file resource</source>
       <translation>添加文件资源</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8735" />
+      <location filename="../QScintilla/Editor.py" line="8736" />
       <source>Add file resources</source>
       <translation>添加多个文件资源</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8759" />
-      <location filename="../QScintilla/Editor.py" line="8753" />
-      <source>Add aliased file resource</source>
-      <translation>添加别名文件资源</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8760" />
+      <location filename="../QScintilla/Editor.py" line="8754" />
+      <source>Add aliased file resource</source>
+      <translation>添加别名文件资源</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8761" />
       <source>Alias for file &lt;b&gt;{0}&lt;/b&gt;:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8842" />
-      <source>Package Diagram</source>
-      <translation>程序包图</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8843" />
+      <source>Package Diagram</source>
+      <translation>程序包图</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8844" />
       <source>Include class attributes?</source>
       <translation>包含类属性?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8863" />
-      <source>Imports Diagram</source>
-      <translation>引用图</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8864" />
+      <source>Imports Diagram</source>
+      <translation>引用图</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8865" />
       <source>Include imports from external modules?</source>
       <translation>从外部模块包含引用?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="8883" />
-      <source>Application Diagram</source>
-      <translation>应用程序图</translation>
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="8884" />
+      <source>Application Diagram</source>
+      <translation>应用程序图</translation>
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="8885" />
       <source>Include module names?</source>
       <translation>包含模块名?</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9255" />
+      <location filename="../QScintilla/Editor.py" line="9256" />
       <source>Add to dictionary</source>
       <translation>添加到文件夹</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9257" />
+      <location filename="../QScintilla/Editor.py" line="9258" />
       <source>Ignore All</source>
       <translation>全部忽略</translation>
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9704" />
-      <source>Sort Lines</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9705" />
+      <source>Sort Lines</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9706" />
       <source>The selection contains illegal data for a numerical sort.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9798" />
-      <source>Register Mouse Click Handler</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9799" />
+      <source>Register Mouse Click Handler</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9800" />
       <source>A mouse click handler for "{0}" was already registered by "{1}". Aborting request by "{2}"...</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9892" />
+      <location filename="../QScintilla/Editor.py" line="9893" />
       <source>{0:4d}    {1}</source>
       <comment>line number, source code</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9898" />
+      <location filename="../QScintilla/Editor.py" line="9899" />
       <source>{0:4d}    {1}
     =&gt;  {2}</source>
       <comment>line number, source code, file name</comment>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../QScintilla/Editor.py" line="9976" />
-      <source>EditorConfig Properties</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../QScintilla/Editor.py" line="9977" />
+      <source>EditorConfig Properties</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../QScintilla/Editor.py" line="9978" />
       <source>&lt;p&gt;The EditorConfig properties for file &lt;b&gt;{0}&lt;/b&gt; could not be loaded.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
@@ -52735,18 +52740,18 @@
   <context>
     <name>MicroPythonDevice</name>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="375" />
+      <location filename="../MicroPython/Devices/__init__.py" line="399" />
       <source>Generic MicroPython Board</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="422" />
+      <location filename="../MicroPython/Devices/__init__.py" line="446" />
       <source>RP2040/RP2350 based</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/Devices/__init__.py" line="582" />
-      <location filename="../MicroPython/Devices/__init__.py" line="571" />
+      <location filename="../MicroPython/Devices/__init__.py" line="606" />
+      <location filename="../MicroPython/Devices/__init__.py" line="595" />
       <source>Unknown Device</source>
       <translation type="unfinished" />
     </message>
@@ -55988,17 +55993,17 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="346" />
-      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except blocks. Control statements can be moved outside the finally block.</source>
+      <source>return/continue/break inside finally blocks cause exceptions to be silenced. Exceptions should be silenced in except{0} blocks. Control statements can be moved outside the finally block.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="352" />
-      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <source>A length-one tuple literal is redundant. Write 'except{1} {0}:' instead of 'except{1} ({0},):'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="357" />
-      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <source>Redundant exception types in 'except{3} ({0}){1}:'. Write 'except{3} {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56053,7 +56058,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
-      <source>Exception '{0}' has been caught multiple times. Only the first except will be considered and all other except catches can be safely removed.</source>
+      <source>Exception '{0}' has been caught multiple times. Only the first except{1} will be considered and all other except{1} catches can be safely removed.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56073,7 +56078,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="442" />
-      <source>Using 'except ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
+      <source>Using 'except{0} ():' with an empty tuple does not handle/catch anything. Add exceptions to handle.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56113,7 +56118,7 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="480" />
-      <source>Class '__init__' methods must not return or yield and any values.</source>
+      <source>Class '__init__' methods must not return or yield any values.</source>
       <translation type="unfinished" />
     </message>
     <message>
@@ -56127,156 +56132,171 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="495" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="494" />
+      <source>Repeated key-value pair in dictionary literal.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="499" />
       <source>Editing a loop's mutable iterable often leads to unexpected results/bugs.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="500" />
-      <source>unncessary f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="504" />
+      <source>unncessary f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="508" />
       <source>cannot use 'self.__class__' as first argument of 'super()' call</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="509" />
-      <source>found {0} formatter</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="513" />
-      <source>format string does contain unindexed parameters</source>
+      <source>found {0} formatter</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="517" />
-      <source>docstring does contain unindexed parameters</source>
+      <source>format string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="521" />
-      <source>other string does contain unindexed parameters</source>
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="525" />
-      <source>format call uses too large index ({0})</source>
+      <source>other string does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="529" />
-      <source>format call uses missing keyword ({0})</source>
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="533" />
-      <source>format call uses keyword arguments but no named entries</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="537" />
-      <source>format call uses variable arguments but no numbered entries</source>
+      <source>format call uses keyword arguments but no named entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="541" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>format call uses variable arguments but no numbered entries</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="545" />
-      <source>format call provides unused index ({0})</source>
+      <source>format call uses implicit and explicit indexes together</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="549" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="553" />
       <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="554" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="558" />
+      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="562" />
       <source>expected these __future__ imports: {0}; but got none</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="563" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="567" />
       <source>gettext import with alias _ found: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="568" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="572" />
       <source>print statement found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="573" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="577" />
       <source>one element tuple found</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="578" />
-      <source>mutable default argument of type {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="586" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="582" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="590" />
       <source>mutable default argument of function call '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="591" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="595" />
       <source>None should not be added at any return if function has no return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="596" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="600" />
       <source>an explicit value at every return should be added if function has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="601" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="605" />
       <source>an explicit return at the end of the function should be added if it has a return value except None</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="606" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="610" />
       <source>a value should not be assigned to a variable if it will be used as a return value only</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="612" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="616" />
       <source>prefer implied line continuation inside parentheses, brackets and braces as opposed to a backslash</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="618" />
-      <source>implicitly concatenated string or bytes literals on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="622" />
-      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <source>implicitly concatenated string or bytes literals on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="626" />
+      <source>implicitly concatenated string or bytes literals over continuation line</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="630" />
       <source>explicitly concatenated string or bytes should be implicitly concatenated</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="631" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="635" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="640" />
+      <source>matching a default value should raise a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="644" />
+      <source>matching a default value should not contain a `return` statement before raising a `ValueError` exception</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
@@ -58492,21 +58512,21 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="111" />
-      <source>os.path.splitext('foo.bar') should be replaced by foo_path.suffix</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="115" />
+      <source>os.path.splitext('foo.bar') should be replaced by foo_path.stem and foo_path.suffix</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="116" />
       <source>os.path.relpath('/bar/foo', start='bar') should be replaced by foo_path.relative_to('/bar')</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="120" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="121" />
       <source>open('foo') should be replaced by Path('foo').open()</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="123" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/PathLib/translations.py" line="124" />
       <source>py.path.local is in maintenance mode, use pathlib instead</source>
       <translation type="unfinished" />
     </message>
@@ -59665,164 +59685,164 @@
   <context>
     <name>Pip</name>
     <message>
-      <location filename="../PipInterface/Pip.py" line="156" />
+      <location filename="../PipInterface/Pip.py" line="157" />
       <source>python exited with an error ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="165" />
+      <location filename="../PipInterface/Pip.py" line="166" />
       <source>python did not finish within 30 seconds.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="167" />
+      <location filename="../PipInterface/Pip.py" line="168" />
       <source>python could not be started.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="228" />
+      <location filename="../PipInterface/Pip.py" line="229" />
       <source>&lt;project&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="253" />
-      <source>Interpreter for Virtual Environment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="254" />
+      <source>Interpreter for Virtual Environment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="255" />
       <source>No interpreter configured for the selected virtual environment.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="307" />
+      <location filename="../PipInterface/Pip.py" line="308" />
       <source>Install PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="354" />
+      <location filename="../PipInterface/Pip.py" line="355" />
       <source>Repair PIP</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="486" />
-      <location filename="../PipInterface/Pip.py" line="468" />
+      <location filename="../PipInterface/Pip.py" line="487" />
+      <location filename="../PipInterface/Pip.py" line="469" />
       <source>Upgrade Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="469" />
+      <location filename="../PipInterface/Pip.py" line="470" />
       <source>There are no packages except 'eric-ide' or 'PyQt6' left for upgrade.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="532" />
+      <location filename="../PipInterface/Pip.py" line="533" />
       <source>Install Packages</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="563" />
+      <location filename="../PipInterface/Pip.py" line="564" />
       <source>Install Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="585" />
+      <location filename="../PipInterface/Pip.py" line="586" />
       <source>Install Project</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="620" />
-      <location filename="../PipInterface/Pip.py" line="610" />
-      <source>Install 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../PipInterface/Pip.py" line="748" />
-      <location filename="../PipInterface/Pip.py" line="611" />
-      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="621" />
+      <location filename="../PipInterface/Pip.py" line="611" />
+      <source>Install 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="749" />
+      <location filename="../PipInterface/Pip.py" line="612" />
+      <source>The selected 'pyproject.toml' file does not contain a 'project.dependencies' section. Aborting...</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="622" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read.&lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="641" />
+      <location filename="../PipInterface/Pip.py" line="642" />
       <source>Install Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="775" />
-      <location filename="../PipInterface/Pip.py" line="701" />
-      <location filename="../PipInterface/Pip.py" line="671" />
-      <location filename="../PipInterface/Pip.py" line="662" />
-      <source>Uninstall Packages</source>
-      <translation type="unfinished">卸载包</translation>
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="776" />
       <location filename="../PipInterface/Pip.py" line="702" />
+      <location filename="../PipInterface/Pip.py" line="672" />
       <location filename="../PipInterface/Pip.py" line="663" />
+      <source>Uninstall Packages</source>
+      <translation type="unfinished">卸载包</translation>
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="777" />
+      <location filename="../PipInterface/Pip.py" line="703" />
+      <location filename="../PipInterface/Pip.py" line="664" />
       <source>Do you really want to uninstall these packages?</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="719" />
+      <location filename="../PipInterface/Pip.py" line="720" />
       <source>Uninstall Packages from Requirements</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="758" />
-      <location filename="../PipInterface/Pip.py" line="747" />
-      <source>Uninstall 'pyproject' Dependencies</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../PipInterface/Pip.py" line="759" />
+      <location filename="../PipInterface/Pip.py" line="748" />
+      <source>Uninstall 'pyproject' Dependencies</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/Pip.py" line="760" />
       <source>&lt;p&gt;The selected 'pyproject.toml' file could not be read. &lt;/p&gt;&lt;p&gt;Reason: {0}&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="786" />
+      <location filename="../PipInterface/Pip.py" line="787" />
       <source>Uninstall Packages from 'pyproject.toml'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1195" />
+      <location filename="../PipInterface/Pip.py" line="1198" />
       <source>Cache Info</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1221" />
-      <location filename="../PipInterface/Pip.py" line="1212" />
+      <location filename="../PipInterface/Pip.py" line="1224" />
+      <location filename="../PipInterface/Pip.py" line="1215" />
       <source>List Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1213" />
+      <location filename="../PipInterface/Pip.py" line="1216" />
       <source>Enter a file pattern (empty for all):</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1245" />
-      <location filename="../PipInterface/Pip.py" line="1238" />
+      <location filename="../PipInterface/Pip.py" line="1248" />
+      <location filename="../PipInterface/Pip.py" line="1241" />
       <source>Remove Cached Files</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1239" />
+      <location filename="../PipInterface/Pip.py" line="1242" />
       <source>Enter a file pattern:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1270" />
-      <location filename="../PipInterface/Pip.py" line="1262" />
+      <location filename="../PipInterface/Pip.py" line="1273" />
+      <location filename="../PipInterface/Pip.py" line="1265" />
       <source>Purge Cache</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/Pip.py" line="1263" />
+      <location filename="../PipInterface/Pip.py" line="1266" />
       <source>Do you really want to purge the pip cache? All files need to be downloaded again.</source>
       <translation type="unfinished" />
     </message>
@@ -60583,6 +60603,16 @@
     </message>
     <message>
       <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Enter search term for packages</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
+      <source>Package Search</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../PipInterface/PipPackagesWidget.ui" line="0" />
       <source>View Type</source>
       <translation type="unfinished" />
     </message>
@@ -60732,18 +60762,18 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="735" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="729" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="737" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="731" />
       <source>Cleanup Environment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="730" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="732" />
       <source>The environment cleanup was successful.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="736" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="738" />
       <source>Some leftover package directories could not been removed. Delete them manually.</source>
       <translation type="unfinished" />
     </message>
@@ -60924,13 +60954,13 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1580" />
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1555" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1585" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1560" />
       <source>unknown</source>
       <translation type="unfinished">未知</translation>
     </message>
     <message>
-      <location filename="../PipInterface/PipPackagesWidget.py" line="1577" />
+      <location filename="../PipInterface/PipPackagesWidget.py" line="1582" />
       <source>any</source>
       <translation type="unfinished" />
     </message>
@@ -61048,6 +61078,21 @@
       <source>Don't show 'Conda' environments</source>
       <translation type="unfinished">不显示“Conda”环境</translation>
     </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Dependencies List</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Search Marker Background:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Preferences/ConfigurationPages/PipPage.ui" line="0" />
+      <source>Select the color for the search highlight of the dependencies list.</source>
+      <translation type="unfinished" />
+    </message>
   </context>
   <context>
     <name>PipVulnerabilityChecker</name>
@@ -62389,18 +62434,18 @@
   <context>
     <name>Preferences</name>
     <message>
-      <location filename="../Preferences/__init__.py" line="1909" />
+      <location filename="../Preferences/__init__.py" line="1910" />
       <source>Export Preferences</source>
       <translation>导出首选项</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1938" />
-      <location filename="../Preferences/__init__.py" line="1911" />
+      <location filename="../Preferences/__init__.py" line="1939" />
+      <location filename="../Preferences/__init__.py" line="1912" />
       <source>Properties File (*.ini);;All Files (*)</source>
       <translation>属性文件 (*.ini);;所有文件 (*)</translation>
     </message>
     <message>
-      <location filename="../Preferences/__init__.py" line="1936" />
+      <location filename="../Preferences/__init__.py" line="1937" />
       <source>Import Preferences</source>
       <translation>导入首选项</translation>
     </message>
@@ -69304,6 +69349,44 @@
     </message>
   </context>
   <context>
+    <name>PydanticChecker</name>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="15" />
+      <source>positional argument for Field default argument</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="19" />
+      <source>non-annotated attribute inside Pydantic model</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="23" />
+      <source>unecessary Field call to specify a default value</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="27" />
+      <source>default argument specified in annotated</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="31" />
+      <source>field name overrides annotation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="35" />
+      <source>duplicate field name</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Pydantic/translations.py" line="39" />
+      <source>usage of __pydantic_config__; consider using the `with_config` decorator</source>
+      <translation type="unfinished" />
+    </message>
+  </context>
+  <context>
     <name>PytestExecutor</name>
     <message>
       <location filename="../Testing/Interfaces/PytestExecutor.py" line="42" />
@@ -74290,343 +74373,328 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="50" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="52" />
       <source>Call to {0} without timeout.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="53" />
       <source>Call to {0} with timeout set to None.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="56" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="58" />
       <source>A Flask app appears to be run with debug=True, which exposes the Werkzeug debugger and allows the execution of arbitrary code.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="62" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="64" />
       <source>Usage of 'tarfile.extractall(members=function(tarfile))'. Make sure your function properly discards dangerous members ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="67" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="69" />
       <source>Found 'tarfile.extractall(members=?)' but couldn't identify the type of members. Check if the members were properly validated ({0}).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="72" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="74" />
       <source>'tarfile.extractall()' used without any validation. Please check and discard dangerous members.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="78" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="80" />
       <source>Pickle and modules that wrap it can be unsafe when used to deserialize untrusted data, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="85" />
       <source>Deserialization with the marshal module is possibly dangerous.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="88" />
       <source>Use of insecure MD2, MD4, MD5, or SHA1 hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="91" />
       <source>Use of insecure cipher '{0}'. Replace with a known secure cipher such as AES.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="94" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="96" />
       <source>Use of insecure cipher mode '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="97" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="99" />
       <source>Use of insecure and deprecated function (mktemp).</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="100" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="102" />
       <source>Use of possibly insecure function - consider using safer ast.literal_eval.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="104" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="106" />
       <source>Use of mark_safe() may expose cross-site scripting vulnerabilities and should be reviewed.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="111" />
       <source>Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="114" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="116" />
       <source>Standard pseudo-random generators are not suitable for security/cryptographic purposes.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="119" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="121" />
       <source>Telnet-related functions are being called. Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="160" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="154" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="148" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="142" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="136" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="130" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="124" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="162" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="156" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="150" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="144" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="138" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="132" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="126" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="166" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with its defusedxml equivalent function.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="172" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="168" />
       <source>FTP-related functions are being called. FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="177" />
-      <source>The input method in Python 2 will read from standard input, evaluate and run the resulting string as Python source code. This is similar, though in many ways worse, than using eval. On Python 2, use raw_input instead, input is safe in Python 3.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="184" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="173" />
       <source>By default, Python will create a secure, verified SSL context for use in such classes as HTTPSConnection. However, it still allows using an insecure context via the _create_unverified_context that reverts to the previous behavior that does not validate certificates or perform hostname checks.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="193" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="182" />
       <source>Use of insecure {0} hash function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="196" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="185" />
       <source>Use of insecure {0} hash for security. Consider 'usedforsecurity=False'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="201" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="190" />
       <source>A telnet-related module is being imported.  Telnet is considered insecure. Use SSH or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="206" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="195" />
       <source>A FTP-related module is being imported.  FTP is considered insecure. Use SSH/SFTP/SCP or some other encrypted protocol.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="215" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="204" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="200" />
       <source>Consider possible security implications associated with the '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="243" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="237" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="231" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="225" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="219" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="232" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="226" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="220" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="208" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package, or make sure defusedxml.defuse_stdlib() is called.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="249" />
-      <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Replace '{0}' with the equivalent defusedxml package.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="255" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="238" />
       <source>Using '{0}' to parse untrusted XML data is known to be vulnerable to XML attacks. Use defusedxml.xmlrpc.monkey_patch() function to monkey-patch xmlrpclib and mitigate XML vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="261" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="244" />
       <source>Consider possible security implications associated with '{0}' module.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="265" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="248" />
       <source>The pyCrypto library and its module '{0}' are no longer actively maintained and have been deprecated. Consider using pyca/cryptography library.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="254" />
+      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="260" />
+      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="266" />
+      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="271" />
-      <source>An IPMI-related module is being imported. IPMI is considered insecure. Use an encrypted protocol.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="277" />
-      <source>'requests' call with verify=False disabling SSL certificate checks, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="283" />
-      <source>'ssl.wrap_socket' call with insecure SSL/TLS protocol version identified, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="288" />
       <source>'SSL.Context' call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="293" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="276" />
       <source>Function call with insecure SSL/TLS protocol version identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="298" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="281" />
       <source>Function definition identified with insecure SSL/TLS protocol version by default, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="303" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="286" />
       <source>'ssl.wrap_socket' call with no SSL/TLS protocol version specified, the default 'SSLv23' could be insecure, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="309" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="292" />
       <source>{0} key sizes below {1:d} bits are considered breakable.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="313" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="296" />
       <source>Use of unsafe 'yaml.load()'. Allows instantiation of arbitrary objects. Consider 'yaml.safe_load()'.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="319" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="302" />
       <source>Paramiko call with policy set to automatically trust the unknown host key.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="324" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="307" />
       <source>The use of SNMPv1 and SNMPv2 is insecure. You should use SNMPv3 if possible.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="328" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="311" />
       <source>You should not use SNMPv3 without encryption. noAuthNoPriv &amp; authNoPriv is insecure.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="334" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="317" />
       <source>Possible shell injection via 'Paramiko' call, check inputs are properly sanitized.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="339" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="322" />
       <source>'subprocess' call with shell=True seems safe, but may be changed in the future, consider rewriting without shell</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="344" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="327" />
       <source>'subprocess' call with shell=True identified, security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="347" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="330" />
       <source>'subprocess' call - check for execution of untrusted input.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="350" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="333" />
       <source>Function call with shell=True parameter identified, possible security issue.</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="338" />
+      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="343" />
+      <source>Starting a process with a shell, possible injection detected, security issue.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="348" />
+      <source>Starting a process without a shell.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="351" />
+      <source>Starting a process with a partial executable path.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="355" />
-      <source>Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell</source>
+      <source>Possible SQL injection vector through string-based query construction.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="360" />
-      <source>Starting a process with a shell, possible injection detected, security issue.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="365" />
-      <source>Starting a process without a shell.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="368" />
-      <source>Starting a process with a partial executable path.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="372" />
-      <source>Possible SQL injection vector through string-based query construction.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="377" />
       <source>Possible wildcard injection in call: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="364" />
+      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="367" />
+      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="371" />
+      <source>Use of insecure logging.config.listen() detected.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="376" />
+      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="381" />
-      <source>Use of 'extra()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="384" />
-      <source>Use of 'RawSQL()' opens a potential SQL attack vector.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="388" />
-      <source>Use of insecure logging.config.listen() detected.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="393" />
-      <source>The Python source file contains bidirectional control characters ({0}).</source>
+      <source>Use of unsafe PyTorch load or save.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="385" />
+      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="391" />
+      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="398" />
-      <source>Use of unsafe PyTorch load or save.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="402" />
-      <source>Using jinja2 templates with 'autoescape=False' is dangerous and can lead to XSS. Use 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="408" />
-      <source>By default, jinja2 sets 'autoescape' to False. Consider using 'autoescape=True' or use the 'select_autoescape' function to mitigate XSS vulnerabilities.</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="415" />
       <source>Mako templates allow HTML/JS rendering by default and are inherently open to XSS attacks. Ensure variables in all templates are properly sanitized via the 'n', 'h' or 'x' flags (depending on context). For example, to HTML escape the variable 'data' do ${{ data |h }}.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="423" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="406" />
       <source>Potential XSS on 'mark_safe()' function.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="427" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="410" />
       <source>Possible hardcoded AWS access key ID: {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="430" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Security/translations.py" line="413" />
       <source>Possible hardcoded AWS secret access key: {0}</source>
       <translation type="unfinished" />
     </message>
@@ -77051,10 +77119,10 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="166" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="157" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="92" />
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="52" />
       <source>Use "{0}" instead of "{1}"</source>
@@ -77211,22 +77279,27 @@
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="160" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="158" />
+      <source>Do not nest f-strings</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="163" />
       <source>Initialize dictionary "{0}" directly</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="169" />
-      <source>Use "Optional[{0}]" instead of "{1}"</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="172" />
+      <source>Use "Optional[{0}]" instead of "{1}"</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="175" />
       <source>Remove reflexive assignment "{0}"</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="178" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Simplify/translations.py" line="181" />
       <source>Use "{0}.items()" instead of "zip({0}.keys(), {0}.values())"</source>
       <translation type="unfinished" />
     </message>
@@ -87570,7 +87643,7 @@
     </message>
     <message>
       <location filename="../Templates/TemplatePropertiesDialog.py" line="122" />
-      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$(two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
+      <source>&lt;p&gt;To use variables in a template, you just have to enclose the variable name with $-characters. When you use the template, you will then be asked for a value for this variable.&lt;/p&gt;&lt;p&gt;Example template: This is a $VAR$&lt;/p&gt;&lt;p&gt;When you use this template you will be prompted for a value for the variable $VAR$. Any occurrences of $VAR$ will then be replaced with whatever you've entered.&lt;/p&gt;&lt;p&gt;If you need a single $-character in a template, which is not used to enclose a variable, type $$ (two dollar characters) instead. They will automatically be replaced with a single $-character when you use the template.&lt;/p&gt;&lt;p&gt;If you want a variables contents to be treated specially, the variable name must be followed by a ':' and one formatting specifier (e.g. $VAR:ml$). The supported specifiers are:&lt;table&gt;&lt;tr&gt;&lt;td&gt;ml&lt;/td&gt;&lt;td&gt;Specifies a multiline formatting. The first line of the variable contents is prefixed with the string occurring before the variable on the same line of the template. All other lines are prefixed by the same amount of whitespace as the line containing the variable.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;rl&lt;/td&gt;&lt;td&gt;Specifies a repeated line formatting. Each line of the variable contents is prefixed with the string occurring before the variable on the same line of the template.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;The following predefined variables may be used in a template:&lt;table&gt;&lt;tr&gt;&lt;td&gt;date&lt;/td&gt;&lt;td&gt;today's date in ISO format (YYYY-MM-DD)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;year&lt;/td&gt;&lt;td&gt;the current year&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;time&lt;/td&gt;&lt;td&gt;current time in ISO format (hh:mm:ss)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_name&lt;/td&gt;&lt;td&gt;the name of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;project_path&lt;/td&gt;&lt;td&gt;the path of the project (if any)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name&lt;/td&gt;&lt;td&gt;full path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;path_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name&lt;/td&gt;&lt;td&gt;full path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dir_name_rel&lt;/td&gt;&lt;td&gt;project relative path of the current file's directory&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;file_name&lt;/td&gt;&lt;td&gt;the current file's name (without directory)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;base_name&lt;/td&gt;&lt;td&gt;like &lt;i&gt;file_name&lt;/i&gt;, but without extension&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;ext&lt;/td&gt;&lt;td&gt;the extension of the current file&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;cur_select&lt;/td&gt;&lt;td&gt;the currently selected text&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;insertion&lt;/td&gt;&lt;td&gt;Sets insertion point for cursor after template is inserted.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_start&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_end').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;select_end&lt;/td&gt;&lt;td&gt;Sets span of selected text in template after template is inserted (used together with 'select_start').&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clipboard&lt;/td&gt;&lt;td&gt;the text of the clipboard&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;If you want to change the default delimiter to anything different, please use the configuration dialog to do so.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
   </context>
@@ -90038,133 +90111,133 @@
   <context>
     <name>UF2FlashDialog</name>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="735" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="754" />
       <source>&lt;h3&gt;CircuitPython Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Switch your device to 'bootloader' mode by double-pressing the reset button.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;(If this does not happen, then try shorter or longer pauses between presses.)&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="761" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="780" />
       <source>&lt;h3&gt;Pi Pico (RP2040/RP2350) Board&lt;/h3&gt;&lt;p&gt;In order to prepare the board for flashing follow these steps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Enter 'bootloader' mode (board &lt;b&gt;without&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;Plug in your board while holding the BOOTSEL button.&lt;/li&gt;&lt;/ul&gt;Enter 'bootloader' mode (board &lt;b&gt;with&lt;/b&gt; RESET button):&lt;ul&gt;&lt;li&gt;hold down RESET&lt;/li&gt;&lt;li&gt;hold down BOOTSEL&lt;/li&gt;&lt;li&gt;release RESET&lt;/li&gt;&lt;li&gt;release BOOTSEL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it).&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="883" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="902" />
       <source>MicroPython/CircuitPython Files (*.uf2);;All Files (*)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="950" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="942" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="926" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="969" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="961" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="945" />
       <source>Manual Select</source>
       <translation type="unfinished">手动选择</translation>
     </message>
     <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1073" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1041" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1018" />
+      <source>Reset Instructions:</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1020" />
+      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1044" />
+      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1054" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1022" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="999" />
-      <source>Reset Instructions:</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1001" />
-      <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the appropriate instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1025" />
-      <source>&lt;h4&gt;Flash {0} Firmware&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;&lt;hr/&gt;{1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1035" />
       <source>&lt;h4&gt;Potentially UF2 capable devices found&lt;/h4&gt;&lt;p&gt;Found these potentially UF2 capable devices:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1056" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1075" />
       <source>&lt;h4&gt;No known devices detected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set &lt;b&gt;one&lt;/b&gt; board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1068" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1087" />
       <source>Flash Instructions:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1070" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1089" />
       <source>&lt;h4&gt;Flash method 'manual' selected.&lt;/h4&gt;&lt;p&gt;Follow the instructions below to flash a device by entering the data manually.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Change the device to 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Wait until the device has entered 'bootloader' mode.&lt;/li&gt;&lt;li&gt;Ensure the boot volume is available (this may require mounting it) and select its path.&lt;/li&gt;&lt;li&gt;Select the firmware file to be flashed and click the flash button.&lt;/li&gt;&lt;/ol&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1095" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1114" />
       <source>Boot Volume not found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1097" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1116" />
       <source>&lt;h4&gt;No Boot Volume detected.&lt;/h4&gt;&lt;p&gt;Please ensure that the boot volume of the device to be flashed is available. </source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1103" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1122" />
       <source>This volume should be named &lt;b&gt;{0}&lt;/b&gt;. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1108" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1127" />
       <source>This volume should have one of these names.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1115" />
-      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1134" />
+      <source>&lt;h4&gt;Reset Instructions&lt;/h4&gt;&lt;p&gt;Follow the instructions below to set the board into 'bootloader' mode. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1153" />
       <source>Multiple Boot Volumes found:</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1136" />
-      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../MicroPython/UF2FlashDialog.py" line="1155" />
+      <source>&lt;h4&gt;Multiple Boot Volumes were found&lt;/h4&gt;&lt;p&gt;These volume paths were found.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;{0}&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please ensure that only one device of a type is ready for flashing. Press &lt;b&gt;Refresh&lt;/b&gt; when ready.&lt;/p&gt;</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1174" />
       <source>Flashing Firmware</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1157" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1176" />
       <source>&lt;p&gt;Flashing the selected firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1164" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1183" />
       <source>Flashing {0}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1166" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1185" />
       <source>&lt;p&gt;Flashing the {0} firmware to the device. Please wait until the device resets automatically.&lt;/p&gt;</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../MicroPython/UF2FlashDialog.ui" line="0" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1278" />
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1270" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1297" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1289" />
       <source>Flash UF2 Device</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1271" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1290" />
       <source>No UF2 device 'boot' volumes found.</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../MicroPython/UF2FlashDialog.py" line="1279" />
+      <location filename="../MicroPython/UF2FlashDialog.py" line="1298" />
       <source>Select the Boot Volume of the device:</source>
       <translation type="unfinished" />
     </message>
@@ -106383,406 +106456,406 @@
   <context>
     <name>pycodestyle</name>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="40" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="41" />
       <source>indentation contains mixed spaces and tabs</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="43" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="44" />
       <source>indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="46" />
-      <source>expected an indented block</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="47" />
-      <source>unexpected indentation</source>
+      <source>expected an indented block</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="48" />
+      <source>unexpected indentation</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="49" />
       <source>indentation is not a multiple of four (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="51" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="52" />
       <source>expected an indented block (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="54" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="55" />
       <source>unexpected indentation (comment)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="57" />
-      <source>over-indented</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="58" />
+      <source>over-indented</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="59" />
       <source>continuation line indentation is not a multiple of four</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="61" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="62" />
       <source>continuation line missing indentation or outdented</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="64" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="65" />
       <source>closing bracket does not match indentation of opening bracket's line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="68" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="69" />
       <source>closing bracket does not match visual indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="71" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="72" />
       <source>continuation line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="74" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="75" />
       <source>continuation line over-indented for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="77" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="78" />
       <source>continuation line over-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="80" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="81" />
       <source>continuation line under-indented for visual indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="83" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="84" />
       <source>visually indented line with same indent as next logical line</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="86" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="87" />
       <source>continuation line unaligned for hanging indent</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="89" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="90" />
       <source>closing bracket is missing indentation</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="92" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
       <source>whitespace after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="99" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
+      <source>whitespace before '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="96" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="94" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="93" />
-      <source>whitespace before '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="95" />
       <source>whitespace after decorator '@'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="97" />
-      <source>multiple spaces before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="100" />
-      <source>multiple spaces after operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="101" />
-      <source>tab before operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="102" />
-      <source>tab after operator</source>
+      <source>multiple spaces before operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="103" />
-      <source>missing whitespace around operator</source>
+      <source>multiple spaces after operator</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="106" />
+      <source>tab before operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="107" />
+      <source>tab after operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="108" />
+      <source>missing whitespace around operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="111" />
       <source>missing whitespace around arithmetic operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="109" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="114" />
       <source>missing whitespace around bitwise or shift operator</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="112" />
-      <source>missing whitespace around modulo operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="115" />
-      <source>missing whitespace after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="116" />
-      <source>multiple spaces after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="117" />
-      <source>tab after '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="118" />
-      <source>unexpected spaces around keyword / parameter equals</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="121" />
-      <source>missing whitespace around parameter equals</source>
+      <source>missing whitespace around modulo operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="120" />
+      <source>missing whitespace after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="123" />
+      <source>multiple spaces after '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="124" />
+      <source>tab after '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="125" />
+      <source>unexpected spaces around keyword / parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="128" />
+      <source>missing whitespace around parameter equals</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="131" />
       <source>at least two spaces before inline comment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="127" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="134" />
       <source>inline comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="130" />
-      <source>block comment should start with '# '</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="133" />
-      <source>too many leading '#' for block comment</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="136" />
-      <source>multiple spaces after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="137" />
-      <source>multiple spaces before keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="138" />
-      <source>tab after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="139" />
-      <source>tab before keyword</source>
+      <source>block comment should start with '# '</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="140" />
-      <source>missing whitespace after keyword</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="146" />
+      <source>too many leading '#' for block comment</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="143" />
-      <source>expected {0} blank lines, found {1}</source>
+      <source>multiple spaces after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="144" />
+      <source>multiple spaces before keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="147" />
+      <source>tab after keyword</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="148" />
+      <source>tab before keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="149" />
-      <source>too many blank lines ({0}), expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
-      <source>blank lines found after function decorator</source>
+      <source>missing whitespace after keyword</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="155" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="152" />
+      <source>expected {0} blank lines, found {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="158" />
+      <source>too many blank lines ({0}), expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="161" />
+      <source>blank lines found after function decorator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="164" />
       <source>expected {0} blank lines after class or function definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="159" />
-      <source>expected {0} blank lines before a nested definition, found {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="162" />
-      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="166" />
-      <source>too many blank lines ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="167" />
-      <source>multiple imports on one line</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="168" />
-      <source>module level import not at top of file</source>
+      <source>expected {0} blank lines before a nested definition, found {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="171" />
-      <source>line too long ({0} &gt; {1} characters)</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="174" />
-      <source>the backslash is redundant between brackets</source>
+      <source>too many blank lines ({0}) before a nested definition, expected {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="175" />
+      <source>too many blank lines ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="176" />
+      <source>multiple imports on one line</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="177" />
-      <source>multiple statements on one line (colon)</source>
+      <source>module level import not at top of file</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="180" />
-      <source>multiple statements on one line (semicolon)</source>
+      <source>line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="183" />
-      <source>statement ends with a semicolon</source>
+      <source>the backslash is redundant between brackets</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="186" />
-      <source>multiple statements on one line (def)</source>
+      <source>multiple statements on one line (colon)</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
+      <source>multiple statements on one line (semicolon)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="192" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="189" />
-      <source>comparison to {0} should be {1}</source>
+      <source>statement ends with a semicolon</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="195" />
-      <source>test for membership should be 'not in'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
-      <source>test for object identity should be 'is not'</source>
+      <source>multiple statements on one line (def)</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="201" />
-      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="206" />
-      <source>do not use bare except</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="198" />
+      <source>comparison to {0} should be {1}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="204" />
+      <source>test for membership should be 'not in'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="207" />
-      <source>do not assign a lambda expression, use a def</source>
+      <source>test for object identity should be 'is not'</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="210" />
+      <source>do not compare types, for exact checks use 'is' / 'is not', for instance checks use 'isinstance()'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="215" />
+      <source>do not use bare except</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="216" />
+      <source>do not assign a lambda expression, use a def</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="219" />
       <source>ambiguous variable name '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="211" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="220" />
       <source>ambiguous class definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="214" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="223" />
       <source>ambiguous function definition '{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="217" />
-      <source>{0}: {1}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="218" />
-      <source>{0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="226" />
-      <source>indentation contains tabs</source>
+      <source>{0}: {1}</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="227" />
+      <source>{0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="235" />
+      <source>indentation contains tabs</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="236" />
       <source>trailing whitespace</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="228" />
-      <source>no newline at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="229" />
-      <source>blank line contains whitespace</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="230" />
-      <source>blank line at end of file</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="231" />
-      <source>line break before binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="234" />
-      <source>line break after binary operator</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="237" />
+      <source>no newline at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="238" />
+      <source>blank line contains whitespace</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="241" />
+      <source>blank line at end of file</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="242" />
+      <source>line break before binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="245" />
+      <source>line break after binary operator</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="248" />
       <source>doc line too long ({0} &gt; {1} characters)</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="240" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="251" />
       <source>invalid escape sequence '\{0}'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="243" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/translations.py" line="254" />
       <source>'async' and 'await' are reserved keywords starting with Python 3.7</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial