Code Style Checker eric7

Thu, 15 Sep 2022 10:09:53 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 15 Sep 2022 10:09:53 +0200
branch
eric7
changeset 9327
2b768afcaee1
parent 9326
1d8eadd8873e
child 9328
49a0a9cb2505

Code Style Checker
- extended the list of miscellaneous checks

docs/changelog 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/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
src/eric7/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html file | annotate | diff | comparison | revisions
src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py file | annotate | diff | comparison | revisions
src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py file | annotate | diff | comparison | revisions
src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tryExcept.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.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/changelog	Wed Sep 14 11:07:55 2022 +0200
+++ b/docs/changelog	Thu Sep 15 10:09:53 2022 +0200
@@ -4,6 +4,7 @@
 - bug fixes
 - Code Style Checker
   -- added some more security related checks
+  -- extended the list of miscellaneous checks
 - pip Interface
   -- changed the pip licenses dialog to show the count of each individual license
 - Project
--- a/src/eric7/APIs/Python3/eric7.api	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/APIs/Python3/eric7.api	Thu Sep 15 10:09:53 2022 +0200
@@ -3609,16 +3609,34 @@
 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.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.isAbcClass?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.isAbstractDecorator?4()
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.nodeStack?4()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit?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_Attribute?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_JoinedStr?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_ListComp?4(node)
+eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.BugBearVisitor.visit_Raise?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?1()
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.DateTimeVisitor.visit_Call?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.DateTimeVisitor?1()
@@ -3627,6 +3645,11 @@
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.LoggingVisitor.visit_Call?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.LoggingVisitor.visit_JoinedStr?4(node)
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.LoggingVisitor?1()
+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.MiscellaneousChecker.BuiltinsWhiteList?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.Codes?7
 eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.MiscellaneousChecker.FormatFieldRegex?7
--- a/src/eric7/APIs/Python3/eric7.bas	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/APIs/Python3/eric7.bas	Thu Sep 15 10:09:53 2022 +0200
@@ -635,6 +635,7 @@
 LogViewerEdit QTextEdit
 LogViewerPage ConfigurationPageBase Ui_LogViewerPage
 LoggingVisitor ast.NodeVisitor
+M520NameFinder NameFinder
 MakePropertiesDialog QDialog Ui_MakePropertiesDialog
 ManageDictionariesDialog QDialog Ui_ManageDictionariesDialog
 MarkdownProvider MarkupBase
Binary file src/eric7/Documentation/Help/source.qch has changed
--- a/src/eric7/Documentation/Help/source.qhp	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/Documentation/Help/source.qhp	Thu Sep 15 10:09:53 2022 +0200
@@ -2521,17 +2521,51 @@
       <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.__checkForM502" id="BugBearVisitor.__checkForM502" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM502" />
+      <keyword name="BugBearVisitor.__checkForM505" id="BugBearVisitor.__checkForM505" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM505" />
       <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.__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" id="BugBearVisitor.__checkForM524" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM524" />
+      <keyword name="BugBearVisitor.__checkForM525" id="BugBearVisitor.__checkForM525" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__checkForM525" />
+      <keyword name="BugBearVisitor.__childrenInScope" id="BugBearVisitor.__childrenInScope" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__childrenInScope" />
+      <keyword name="BugBearVisitor.__composeCallPath" id="BugBearVisitor.__composeCallPath" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__composeCallPath" />
+      <keyword name="BugBearVisitor.__getAssignedNames" id="BugBearVisitor.__getAssignedNames" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__getAssignedNames" />
+      <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.__toNameStr" id="BugBearVisitor.__toNameStr" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__toNameStr" />
+      <keyword name="BugBearVisitor.__typesafeIssubclass" id="BugBearVisitor.__typesafeIssubclass" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.__typesafeIssubclass" />
+      <keyword name="BugBearVisitor._loop" id="BugBearVisitor._loop" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor._loop" />
+      <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.nodeStack" id="BugBearVisitor.nodeStack" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.nodeStack" />
       <keyword name="BugBearVisitor.visit" id="BugBearVisitor.visit" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit" />
       <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_Attribute" id="BugBearVisitor.visit_Attribute" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Attribute" />
       <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_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_Raise" id="BugBearVisitor.visit_Raise" ref="eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html#BugBearVisitor.visit_Raise" />
+      <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="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" />
@@ -10182,6 +10216,12 @@
       <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="MakePropertiesDialog" id="MakePropertiesDialog" ref="eric7.Project.MakePropertiesDialog.html#MakePropertiesDialog" />
       <keyword name="MakePropertiesDialog (Constructor)" id="MakePropertiesDialog (Constructor)" ref="eric7.Project.MakePropertiesDialog.html#MakePropertiesDialog.__init__" />
       <keyword name="MakePropertiesDialog (Module)" id="MakePropertiesDialog (Module)" ref="eric7.Project.MakePropertiesDialog.html" />
--- a/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/Documentation/Source/eric7.Plugins.CheckerPlugins.CodeStyleChecker.Miscellaneous.MiscellaneousChecker.html	Thu Sep 15 10:09:53 2022 +0200
@@ -14,7 +14,7 @@
 <h3>Global Attributes</h3>
 
 <table>
-<tr><td>None</td></tr>
+<tr><td>BugBearContext</td></tr>
 </table>
 <h3>Classes</h3>
 
@@ -33,6 +33,10 @@
 <td>Class implementing a node visitor to check logging statements.</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="#MiscellaneousChecker">MiscellaneousChecker</a></td>
 <td>Class implementing a checker for miscellaneous checks.</td>
 </tr>
@@ -75,7 +79,7 @@
 <h3>Class Attributes</h3>
 
 <table>
-<tr><td>NodeWindowSize</td></tr>
+<tr><td>CONTEXTFUL_NODES</td></tr><tr><td>FUNCTION_NODES</td></tr><tr><td>NodeWindowSize</td></tr>
 </table>
 <h3>Class Methods</h3>
 
@@ -91,7 +95,7 @@
 <td>Constructor</td>
 </tr>
 <tr>
-<td><a href="#BugBearVisitor.__checkForM502">__checkForM502</a></td>
+<td><a href="#BugBearVisitor.__checkForM505">__checkForM505</a></td>
 <td>Private method to check the use of *strip().</td>
 </tr>
 <tr>
@@ -99,6 +103,98 @@
 <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.__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):.</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">__checkForM524</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.__childrenInScope">__childrenInScope</a></td>
+<td>Private method to get all child nodes in the given scope.</td>
+</tr>
+<tr>
+<td><a href="#BugBearVisitor.__composeCallPath">__composeCallPath</a></td>
+<td>Private method get the individual elements of the call path of a node.</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.__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.__toNameStr">__toNameStr</a></td>
+<td>Private method to turn Name and Attribute nodes to strings, handling any depth of attribute accesses.</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._loop">_loop</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.nodeStack">nodeStack</a></td>
+<td>Public method to get a reference to the most recent node stack.</td>
+</tr>
+<tr>
 <td><a href="#BugBearVisitor.visit">visit</a></td>
 <td>Public method to traverse a given AST node.</td>
 </tr>
@@ -115,25 +211,69 @@
 <td>Public method to handle 'for' statements.</td>
 </tr>
 <tr>
-<td><a href="#BugBearVisitor.visit_Attribute">visit_Attribute</a></td>
-<td>Public method to handle attributes.</td>
+<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_Call">visit_Call</a></td>
-<td>Public method to handle a function call.</td>
+<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_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_Raise">visit_Raise</a></td>
+<td>Public method to handle 'raise' statements.</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>
 </table>
 <h3>Static Methods</h3>
 
@@ -148,9 +288,9 @@
 <p>
         Constructor
 </p>
-<a NAME="BugBearVisitor.__checkForM502" ID="BugBearVisitor.__checkForM502"></a>
-<h4>BugBearVisitor.__checkForM502</h4>
-<b>__checkForM502</b>(<i>node</i>)
+<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().
@@ -171,11 +311,407 @@
 </p>
 <dl>
 
-<dt><i>node</i> (ast.For)</dt>
+<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.__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):.
+</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" ID="BugBearVisitor.__checkForM524"></a>
+<h4>BugBearVisitor.__checkForM524</h4>
+<b>__checkForM524</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.__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.__composeCallPath" ID="BugBearVisitor.__composeCallPath"></a>
+<h4>BugBearVisitor.__composeCallPath</h4>
+<b>__composeCallPath</b>(<i>node</i>)
+
+<p>
+        Private method get the individual elements of the call path of a node.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.Node)</dt>
+<dd>
+reference to the node
+</dd>
+</dl>
+<dl>
+<dt>Yield:</dt>
+<dd>
+one element of the call path
+</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.__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.__toNameStr" ID="BugBearVisitor.__toNameStr"></a>
+<h4>BugBearVisitor.__toNameStr</h4>
+<b>__toNameStr</b>(<i>node</i>)
+
+<p>
+        Private 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.__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._loop" ID="BugBearVisitor._loop"></a>
+<h4>BugBearVisitor._loop</h4>
+<b>_loop</b>(<i>badNodeTypes</i>)
+
+<a NAME="BugBearVisitor.isAbcClass" ID="BugBearVisitor.isAbcClass"></a>
+<h4>BugBearVisitor.isAbcClass</h4>
+<b>isAbcClass</b>(<i></i>)
+
+<a NAME="BugBearVisitor.isAbstractDecorator" ID="BugBearVisitor.isAbstractDecorator"></a>
+<h4>BugBearVisitor.isAbstractDecorator</h4>
+<b>isAbstractDecorator</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.visit" ID="BugBearVisitor.visit"></a>
 <h4>BugBearVisitor.visit</h4>
 <b>visit</b>(<i>node</i>)
@@ -232,20 +768,6 @@
 reference to the node to be processed
 </dd>
 </dl>
-<a NAME="BugBearVisitor.visit_Attribute" ID="BugBearVisitor.visit_Attribute"></a>
-<h4>BugBearVisitor.visit_Attribute</h4>
-<b>visit_Attribute</b>(<i>node</i>)
-
-<p>
-        Public method to handle attributes.
-</p>
-<dl>
-
-<dt><i>node</i> (ast.Attribute)</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>)
@@ -260,6 +782,62 @@
 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>)
@@ -274,6 +852,34 @@
 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_JoinedStr" ID="BugBearVisitor.visit_JoinedStr"></a>
 <h4>BugBearVisitor.visit_JoinedStr</h4>
 <b>visit_JoinedStr</b>(<i>node</i>)
@@ -288,6 +894,62 @@
 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_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_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>)
@@ -302,6 +964,34 @@
 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>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
@@ -645,6 +1335,129 @@
 <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="MiscellaneousChecker" ID="MiscellaneousChecker"></a>
 <h2>MiscellaneousChecker</h2>
 
@@ -1174,6 +1987,18 @@
 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>)
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/MiscellaneousChecker.py	Thu Sep 15 10:09:53 2022 +0200
@@ -7,15 +7,17 @@
 Module implementing a checker for miscellaneous checks.
 """
 
+import ast
+import builtins
+import contextlib
+import copy
+import itertools
+import re
 import sys
-import ast
-import re
-import itertools
+import tokenize
+from collections import defaultdict, namedtuple
+from keyword import iskeyword
 from string import Formatter
-from collections import defaultdict
-import tokenize
-import copy
-import contextlib
 
 import AstUtilities
 
@@ -106,17 +108,27 @@
         "M503",
         "M504",
         "M505",
-        "M506",
         "M507",
-        "M508",
         "M509",
+        "M510",
         "M511",
         "M512",
         "M513",
+        "M514",
+        "M515",
+        "M516",
+        "M517",
+        "M518",
+        "M519",
+        "M520",
         "M521",
         "M522",
         "M523",
         "M524",
+        "M525",
+        ## Bugbear++
+        "M581",
+        "M582",
         ## Format Strings
         "M601",
         "M611",
@@ -281,17 +293,26 @@
                     "M503",
                     "M504",
                     "M505",
-                    "M506",
                     "M507",
-                    "M508",
                     "M509",
+                    "M510",
                     "M511",
                     "M512",
                     "M513",
+                    "M514",
+                    "M515",
+                    "M516",
+                    "M517",
+                    "M518",
+                    "M519",
+                    "M520",
                     "M521",
                     "M522",
                     "M523",
                     "M524",
+                    "M525",
+                    "M581",
+                    "M582",
                 ),
             ),
             (self.__checkPep3101, ("M601",)),
@@ -996,6 +1017,9 @@
             ast.Dict,
             ast.List,
             ast.Set,
+            ast.DictComp,
+            ast.ListComp,
+            ast.SetComp,
         )
         mutableCalls = (
             "Counter",
@@ -1013,6 +1037,15 @@
         immutableCalls = (
             "tuple",
             "frozenset",
+            "types.MappingProxyType",
+            "MappingProxyType",
+            "re.compile",
+            "operator.attrgetter",
+            "operator.itemgetter",
+            "operator.methodcaller",
+            "attrgetter",
+            "itemgetter",
+            "methodcaller",
         )
         functionDefs = [ast.FunctionDef]
         with contextlib.suppress(AttributeError):
@@ -1488,16 +1521,36 @@
             super().generic_visit(node)
 
 
+BugBearContext = namedtuple("BugBearContext", ["node", "stack"])
+
+
 class BugBearVisitor(ast.NodeVisitor):
     """
     Class implementing a node visitor to check for various topics.
     """
 
     #
-    # This class was implemented along the BugBear flake8 extension (v 19.3.0).
+    # This class was implemented along the BugBear flake8 extension (v 22.9.11).
     # Original: Copyright (c) 2016 Łukasz Langa
     #
-    # TODO: update to v22.7.1
+
+    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
 
@@ -1507,9 +1560,150 @@
         """
         super().__init__()
 
-        self.__nodeStack = []
-        self.__nodeWindow = []
+        self.nodeWindow = []
         self.violations = []
+        self.contexts = []
+
+        self.__M523Seen = set()
+
+    @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 __composeCallPath(self, node):
+        """
+        Private method get the individual elements of the call path of a node.
+
+        @param node reference to the node
+        @type ast.Node
+        @yield one element of the call path
+        @ytype ast.Node
+        """
+        if isinstance(node, ast.Attribute):
+            yield from self.__composeCallPath(node.value)
+            yield node.attr
+        elif isinstance(node, ast.Call):
+            yield from self.__composeCallPath(node.func)
+        elif isinstance(node, ast.Name):
+            yield node.id
+
+    def __toNameStr(self, node):
+        """
+        Private 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
+
+        if isinstance(node, ast.Call):
+            return self.__toNameStr(node.func)
+
+        try:
+            return self.__toNameStr(node.value) + "." + node.attr
+        except AttributeError:
+            return self.__toNameStr(node.value)
+
+    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 visit(self, node):
         """
@@ -1518,13 +1712,91 @@
         @param node AST node to be traversed
         @type ast.Node
         """
-        self.__nodeStack.append(node)
-        self.__nodeWindow.append(node)
-        self.__nodeWindow = self.__nodeWindow[-BugBearVisitor.NodeWindowSize :]
+        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()
+        self.nodeStack.pop()
+
+        if isContextful:
+            self.contexts.pop()
+
+    def visit_ExceptHandler(self, node):
+        """
+        Public method to handle exception handlers.
+
+        @param node reference to the node to be processed
+        @type ast.ExceptHandler
+        """
+        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",
+            },
+        }
+
+        if node.type is None:
+            # bare except is handled by pycodestyle already
+            pass
+
+        elif isinstance(node.type, ast.Tuple):
+            names = [self.__toNameStr(e) for e in node.type.elts]
+            as_ = " as " + node.name if node.name is not None else ""
+            if len(names) == 0:
+                self.violations.append((node, "M501", as_))
+            elif len(names) == 1:
+                self.violations.append((node, "M513", *names))
+            else:
+                # 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))
+                    )
+                    self.violations.append((node, "M514", ", ".join(names), as_, desc))
+
+        self.generic_visit(node)
 
     def visit_UAdd(self, node):
         """
@@ -1533,10 +1805,10 @@
         @param node reference to the node to be processed
         @type ast.UAdd
         """
-        trailingNodes = list(map(type, self.__nodeWindow[-4:]))
+        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, "M501"))
+            originator = self.nodeWindow[-4]
+            self.violations.append((originator, "M502"))
 
         self.generic_visit(node)
 
@@ -1547,22 +1819,8 @@
         @param node reference to the node to be processed
         @type ast.Call
         """
-        validPaths = ("six", "future.utils", "builtins")
-        methodsDict = {
-            "M521": ("iterkeys", "itervalues", "iteritems", "iterlists"),
-            "M522": ("viewkeys", "viewvalues", "viewitems", "viewlists"),
-            "M523": ("next",),
-        }
-
         if isinstance(node.func, ast.Attribute):
-            for code, methods in methodsDict.items():
-                if node.func.attr in methods:
-                    callPath = ".".join(composeCallPath(node.func.value))
-                    if callPath not in validPaths:
-                        self.violations.append((node, code))
-                    break
-            else:
-                self.__checkForM502(node)
+            self.__checkForM505(node)
         else:
             with contextlib.suppress(AttributeError, IndexError):
                 # bad super() call
@@ -1575,47 +1833,30 @@
                         and args[0].value.id == "self"
                         and args[0].attr == "__class__"
                     ):
-                        self.violations.append((node, "M509"))
+                        self.violations.append((node, "M582"))
 
                 # bad getattr and setattr
                 if (
                     node.func.id in ("getattr", "hasattr")
                     and node.args[1].s == "__call__"
                 ):
-                    self.violations.append((node, "M511"))
+                    self.violations.append((node, "M504"))
                 if (
                     node.func.id == "getattr"
                     and len(node.args) == 2
-                    and AstUtilities.isString(node.args[1])
+                    and self.__isIdentifier(node.args[1])
+                    and iskeyword(AstUtilities.getValue(node.args[1]))
                 ):
-                    self.violations.append((node, "M512"))
+                    self.violations.append((node, "M509"))
                 elif (
                     node.func.id == "setattr"
                     and len(node.args) == 3
-                    and AstUtilities.isString(node.args[1])
+                    and self.__isIdentifier(node.args[1])
+                    and iskeyword(AstUtilities.getValue(node.args[1]))
                 ):
-                    self.violations.append((node, "M513"))
-
-            self.generic_visit(node)
-
-    def visit_Attribute(self, node):
-        """
-        Public method to handle attributes.
-
-        @param node reference to the node to be processed
-        @type ast.Attribute
-        """
-        callPath = list(composeCallPath(node))
-
-        if ".".join(callPath) == "sys.maxint":
-            self.violations.append((node, "M504"))
-
-        elif len(callPath) == 2 and callPath[1] == "message":
-            name = callPath[0]
-            for elem in reversed(self.__nodeStack[:-1]):
-                if isinstance(elem, ast.ExceptHandler) and elem.name == name:
-                    self.violations.append((node, "M505"))
-                    break
+                    self.violations.append((node, "M510"))
+
+        self.generic_visit(node)
 
     def visit_Assign(self, node):
         """
@@ -1624,21 +1865,14 @@
         @param node reference to the node to be processed
         @type ast.Assign
         """
-        if isinstance(self.__nodeStack[-2], ast.ClassDef):
-            # By using 'hasattr' below we're ignoring starred arguments, slices
-            # and tuples for simplicity.
-            assignTargets = {t.id for t in node.targets if hasattr(t, "id")}
-            if "__metaclass__" in assignTargets:
-                self.violations.append((node, "M524"))
-
-        elif len(node.targets) == 1:
+        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, "M506"))
+                self.violations.append((node, "M503"))
 
         self.generic_visit(node)
 
@@ -1650,6 +1884,8 @@
         @type ast.For
         """
         self.__checkForM507(node)
+        self.__checkForM520(node)
+        self.__checkForM523(node)
 
         self.generic_visit(node)
 
@@ -1661,6 +1897,63 @@
         @type ast.AsyncFor
         """
         self.__checkForM507(node)
+        self.__checkForM520(node)
+        self.__checkForM523(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.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)
 
@@ -1675,7 +1968,79 @@
             AstUtilities.isNameConstant(node.test)
             and AstUtilities.getValue(node.test) is False
         ):
-            self.violations.append((node, "M503"))
+            self.violations.append((node, "M511"))
+
+        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.__checkForM518(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.__checkForM518(node)
+        self.__checkForM521(node)
+        self.__checkForM524(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
+        """
+        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)
 
@@ -1690,9 +2055,9 @@
             if isinstance(value, ast.FormattedValue):
                 return
 
-        self.violations.append((node, "M508"))
-
-    def __checkForM502(self, node):
+        self.violations.append((node, "M581"))
+
+    def __checkForM505(self, node):
         """
         Private method to check the use of *strip().
 
@@ -1712,14 +2077,14 @@
         if len(s) == len(set(s)):
             return  # no characters appear more than once
 
-        self.violations.append((node, "M502"))
+        self.violations.append((node, "M505"))
 
     def __checkForM507(self, node):
         """
         Private method to check for unused loop variables.
 
         @param node reference to the node to be processed
-        @type ast.For
+        @type ast.For or ast.AsyncFor
         """
         targets = NameFinder()
         targets.visit(node.target)
@@ -1732,6 +2097,297 @@
             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 __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):.
+
+        @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, "attr")
+            and itemContext.func.attr == "assertRaises"
+            and len(itemContext.args) == 1
+            and isinstance(itemContext.args[0], ast.Name)
+            and itemContext.args[0].id == "Exception"
+            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
+        """
+        subnodeClasses = (
+            (
+                ast.Constant,
+                ast.List,
+                ast.Set,
+                ast.Dict,
+            )
+            if sys.version_info >= (3, 8, 0)
+            else (
+                ast.Num,
+                ast.Bytes,
+                ast.NameConstant,
+                ast.List,
+                ast.Set,
+                ast.Dict,
+            )
+        )
+        for subnode in node.body:
+            if not isinstance(subnode, ast.Expr):
+                continue
+
+            if isinstance(subnode.value, subnodeClasses) and not AstUtilities.isString(
+                subnode.value
+            ):
+                self.violations.append((subnode, "M518"))
+
+    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(self.__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
+        """
+        suspiciousVariables = []
+        for node in ast.walk(loopNode):
+            if isinstance(node, BugBearVisitor.FUNCTION_NODES):
+                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))
+                for name in bodyNodes:
+                    if (
+                        isinstance(name, ast.Name)
+                        and name.id not in argnames
+                        and isinstance(name.ctx, ast.Load)
+                    ):
+                        err = (name.lineno, name.col_offset, name.id, name)
+                        if 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(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):
+            if isinstance(value, ast.keyword):
+                return value.arg == "metaclass" and isAbcClass(value.value)
+
+            abcNames = ("ABC", "ABCMeta")
+            return (isinstance(value, ast.Name) and value.id in abcNames) or (
+                isinstance(value, ast.Attribute)
+                and value.attr in abcNames
+                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"
+            )
+
+        if not any(map(isAbcClass, (*node.bases, *node.keywords))):
+            return
+
+        for stmt in node.body:
+            if isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef)) and any(
+                map(isAbstractDecorator, stmt.decorator_list)
+            ):
+                return
+
+        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(self.__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(self.__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))
+
 
 class NameFinder(ast.NodeVisitor):
     """
@@ -1761,12 +2417,15 @@
 
         @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:
-            super().visit(node)
+            return super().visit(node)
 
     def getNames(self):
         """
@@ -1778,6 +2437,60 @@
         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)
+
+
 class ReturnVisitor(ast.NodeVisitor):
     """
     Class implementing a node visitor to check return statements.
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py	Thu Sep 15 10:09:53 2022 +0200
@@ -208,66 +208,119 @@
         "'sys.version[:1]' referenced (Python 10), use 'sys.version_info'",
     ),
     "M501": QCoreApplication.translate(
-        "MiscellaneousChecker", "Python does not support the unary prefix increment"
+        "MiscellaneousChecker",
+        "Do not use 'except (){0}:', it also catches unexpected events. Prefer"
+        " 'except Exception:'.",
     ),
     "M502": QCoreApplication.translate(
-        "MiscellaneousChecker",
-        "using .strip() with multi-character strings is misleading",
+        "MiscellaneousChecker", "Python does not support the unary prefix increment"
     ),
     "M503": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "do not call assert False since python -O removes these calls",
+        "assigning to 'os.environ' does not clear the environment -"
+        " use 'os.environ.clear()'",
     ),
     "M504": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'",
+        """using 'hasattr(x, "__call__")' to test if 'x' is callable is"""
+        """ unreliable. Use 'callable(x)' for consistent results.""",
     ),
     "M505": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "'BaseException.message' has been deprecated as of Python 2.6 and is"
-        " removed in Python 3 - use 'str(e)'",
-    ),
-    "M506": QCoreApplication.translate(
-        "MiscellaneousChecker",
-        "assigning to 'os.environ' does not clear the environment -"
-        " use 'os.environ.clear()'",
+        "using .strip() with multi-character strings is misleading. Use "
+        ".replace() or regular expressions to remove string fragments.",
     ),
     "M507": QCoreApplication.translate(
         "MiscellaneousChecker",
         "loop control variable {0} not used within the loop body -"
         " start the name with an underscore",
     ),
-    "M508": QCoreApplication.translate("MiscellaneousChecker", "unncessary f-string"),
     "M509": QCoreApplication.translate(
-        "MiscellaneousChecker",
-        "cannot use 'self.__class__' as first argument of 'super()' call",
+        "MiscellaneousChecker", "do not call getattr with a constant attribute value"
+    ),
+    "M510": QCoreApplication.translate(
+        "MiscellaneousChecker", "do not call setattr with a constant attribute value"
     ),
     "M511": QCoreApplication.translate(
         "MiscellaneousChecker",
-        """using 'hasattr(x, "__call__")' to test if 'x' is callable is"""
-        """ unreliable""",
+        "do not call assert False since python -O removes these calls",
     ),
     "M512": QCoreApplication.translate(
-        "MiscellaneousChecker", "do not call getattr with a constant attribute value"
+        "MiscellaneousChecker",
+        "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.",
     ),
     "M513": QCoreApplication.translate(
-        "MiscellaneousChecker", "do not call setattr with a constant attribute value"
+        "MiscellaneousChecker",
+        "A length-one tuple literal is redundant. Write 'except {0}:' instead of"
+        " 'except ({0},):'.",
+    ),
+    "M514": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:',"
+        " which catches exactly the same exceptions.",
+    ),
+    "M515": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Pointless comparison. This comparison does nothing but waste CPU instructions."
+        " Either prepend 'assert' or remove it.",
+    ),
+    "M516": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Cannot raise a literal. Did you intend to return it or raise an Exception?",
+    ),
+    "M517": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "'assertRaises(Exception):' should be considered evil. It can lead to your test"
+        " passing even if the code being tested is never executed due to a typo. Either"
+        " assert for a more specific exception (builtin or custom), use"
+        " 'assertRaisesRegex', or use the context manager form of 'assertRaises'.",
+    ),
+    "M518": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "Found useless expression. Either assign it to a variable or remove it.",
+    ),
+    "M519": 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(
+        "MiscellaneousChecker",
+        "Found for loop that reassigns the iterable it is iterating with each"
+        " iterable value.",
     ),
     "M521": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "Python 3 does not include '.iter*' methods on dictionaries",
+        "f-string used as docstring. This will be interpreted by python as a joined"
+        " string rather than a docstring.",
     ),
     "M522": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "Python 3 does not include '.view*' methods on dictionaries",
+        "No arguments passed to 'contextlib.suppress'. No exceptions will be"
+        " suppressed and therefore this context manager is redundant.",
     ),
     "M523": QCoreApplication.translate(
-        "MiscellaneousChecker", "'.next()' does not exist in Python 3"
+        "MiscellaneousChecker",
+        "Function definition does not bind loop variable '{0}'.",
     ),
     "M524": QCoreApplication.translate(
         "MiscellaneousChecker",
-        "'__metaclass__' does nothing on Python 3 -"
-        " use 'class MyClass(BaseClass, metaclass=...)'",
+        "{0} is an abstract base class, but it has no abstract methods. Remember to"
+        " use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty'"
+        " decorators.",
+    ),
+    "M525": 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.",
+    ),
+    "M581": QCoreApplication.translate("MiscellaneousChecker", "unncessary f-string"),
+    "M582": QCoreApplication.translate(
+        "MiscellaneousChecker",
+        "cannot use 'self.__class__' as first argument of 'super()' call",
     ),
     "M601": QCoreApplication.translate("MiscellaneousChecker", "found {0} formatter"),
     "M611": QCoreApplication.translate(
@@ -388,7 +441,13 @@
     "M197": ["tuple", "tuple"],
     "M198": ["list", "list"],
     "M201": ["bar", "foo"],
+    "M501": [" as err"],
     "M507": ["x"],
+    "M513": ["Exception"],
+    "M514": ["OSError, IOError", " as err", "OSError"],
+    "M523": ["x"],
+    "M524": ["foobar"],
+    "M525": ["OSError"],
     "M601": ["%s"],
     "M621": [5],
     "M622": ["foo"],
--- a/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tryExcept.py	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/Plugins/CheckerPlugins/CodeStyleChecker/Security/Checks/tryExcept.py	Thu Sep 15 10:09:53 2022 +0200
@@ -61,7 +61,7 @@
         if (
             not checkTypedException
             and node.type is not None
-            and getattr(node.type, "id", None) != "Exception"
+            and getattr(node.type, "id", None) not in ("BaseException", "Exception")
         ):
             return
 
@@ -97,7 +97,7 @@
         if (
             not checkTypedException
             and node.type is not None
-            and getattr(node.type, "id", None) != "Exception"
+            and getattr(node.type, "id", None) not in ("BaseException", "Exception")
         ):
             return
 
@@ -136,7 +136,11 @@
     qualnameList = qualname.split(".")
     func = qualnameList[-1]
     if func == "suppress":
-        if not checkTypedException and "Exception" not in context.callArgs:
+        if (
+            not checkTypedException
+            and "Exception" not in context.callArgs
+            and "BaseException" not in context.callArgs
+        ):
             return
 
         reportError(
--- a/src/eric7/i18n/eric7_cs.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_cs.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49749,227 +49749,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
Binary file src/eric7/i18n/eric7_de.qm has changed
--- a/src/eric7/i18n/eric7_de.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_de.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49854,227 +49854,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation>Verwende nicht 'except (){0}:', da dies auch unerwartete Ereignisse abfängt. Verwende 'except Exception:'.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation>Python unterstützt kein 'Unary Prefix Increment'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation>Verwendung von .strip() mit Zeichenketten mit mehreren Zeichen ist missverständlich</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation>verwende nicht 'assert False', da python -O dies entfernt</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation>'sys.maxint' ist in Python 3 nicht definiert - verwende 'sys.maxsize'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation>'BaseException.message' wurde mit Python 2.6 als überholt markiert und in Python 3 entfernt - verwende 'str(e)'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation>Zuweisungen an 'os.environ' löschen nicht die Umgebungsvariablen - verwende 'os.environ.clear()'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation>Die Verwendung von 'hasattr(x, "__call__")' zum Testen der Ausführbarkeit von 'x' ist unzuverlässig. Verwende 'callable(x)' für konsistente Ergebnisse.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation>Die Verwendung von .strip() mit Zeichenketten mit mehreren Zeichen ist irreführend. Verwende .replace() oder reguläre Ausdrücke, um Zeichenkettenteile zu entfernen.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation>Schleifenvariable {0} wird im Schleifenkörper nicht verwendet - beginne den Namen mit einem Unterstrich</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
-      <translation>unnötige f-Zeichenkette</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
+      <translation>verwende getattr nicht mit einem konstanten Attribut</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation>Verwendung von 'hasattr(x, "__call__")' zum Test, ob 'x' aufrufbar ist, ist unzuverlässig</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation>verwende getattr nicht mit einem konstanten Attribut</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation>verwende setattr nicht mit einem konstanten Attribut</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation>Python 3 enthält keine '.iter*' Methoden für Dictionaries</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
-      <translation>Python 3 enthält keine '.view*' Methoden für Dictionaries</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation>verwende nicht 'assert False', da python -O dies entfernt</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <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>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <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>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation>'.next()' existiert in Python 3 nicht</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation>'__metaclass__' tut nichts in Python 3 - verwende 'class MyClass(BaseClass, metaclass=...)'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
-      <translation>{0} Format gefunden</translation>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation>Nutzloser Vergleich. Dieser Vergleich macht nichts außer CPU Zyklen zu verschwenden. Stelle entweder 'assert' voran oder entferne ihn.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
+      <translation>Ein Literal kann nicht geworfen werden. Sollte es zurückgegeben oder eine Ausnahme geworfen werden?</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <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="276" />
-      <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="279" />
-      <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="282" />
-      <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="285" />
-      <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="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
-      <translation>Format Aufruf verwendet sowohl implizite als auch explizite Indizes</translation>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation>'assertRaises(Exception):' sollte als böse betrachtet werden. Dies kann dazu führen, dass ein Test auch dann erfolgreich ist, wenn der getestete Code aufgrund eines Tippfehlers nie ausgeführt wird. Entweder teste auf eine spezifischere Ausnahme (eingebaut oder benutzerdefiniert), verwende 'assertRaisesRegex', oder verwende die Kontextmanagerform von 'assertRaises'.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation>Unnützer Ausdruck gefunden. Entweder weise ihn einer Variablen zu oder entferne ihn.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation>Die Verwendung von 'functools.lru_cache' oder 'functools.cache' bei Methoden kann zu Speicherlecks führen. Der Cache kann Instanzreferenzen beibehalten und so die Garbage Collection verhindern.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation>Gefundene for-Schleife, die die Iterable bei jedem Schleifendurchlauf neu zuordnet.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
+      <translation>f-String als Docstring verwendet. Dies wird durch Python als ein 'Joined String' anstelle eines Docstring interpretiert.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <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="303" />
-      <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="306" />
-      <source>logging statement uses string.format()</source>
-      <translation>Loggingbefehl verwendet 'string.format()'</translation>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation>Keine Argumente an 'contextlib.suppress' übergeben. Es werden keine Ausnahmen unterdrückt und deshalb ist dieser Kontextmanager überflüssig.</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
+      <translation>Funktionsdefinition bindet die Schleifenvariable '{0}' nicht.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation>Loggingbefehl verwendet '%'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
-      <translation>Loggingbefehl verwendet '+'</translation>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
+      <translation>{0} ist eine abstrakte Basisklasse, hat aber keine abstrakten Methoden. Berücksichtige die Verwendung von '@abstractmethod', '@abstractclassmethod' und/oder '@abstractproperty' Dekoratoren.</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation>Loggingbefehl verwendet 'f-string'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
-      <translation>Loggingbefehl verwendet 'warn' anstelle 'warning'</translation>
+      <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>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
+      <translation>unnötige f-Zeichenkette</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation>erwartete __future__ Imports: {0}; aber nur {1} gefunden</translation>
+      <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="325" />
-      <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="328" />
-      <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="331" />
-      <source>print statement found</source>
-      <translation>print Statement gefunden</translation>
+      <source>found {0} formatter</source>
+      <translation>{0} Format gefunden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <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="329" />
+      <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="332" />
-      <source>one element tuple found</source>
-      <translation>Tuple mit einem Element gefunden</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="335" />
+      <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="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
-      <translation>veränderbares Standardargument des Typs {0}</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="341" />
-      <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="344" />
-      <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>
+      <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="345" />
+      <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="349" />
-      <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="354" />
-      <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>
+      <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="353" />
+      <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="356" />
+      <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="359" />
+      <source>logging statement uses string.format()</source>
+      <translation>Loggingbefehl verwendet 'string.format()'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation>Loggingbefehl verwendet '%'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation>Loggingbefehl verwendet '+'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation>Loggingbefehl verwendet 'f-string'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation>Loggingbefehl verwendet 'warn' anstelle 'warning'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <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="381" />
+      <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="384" />
+      <source>print statement found</source>
+      <translation>print Statement gefunden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation>Tuple mit einem Element gefunden</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <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="394" />
+      <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="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation>auskommentierte Codezeilen sollten entfernt werden</translation>
     </message>
--- a/src/eric7/i18n/eric7_empty.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_empty.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49603,227 +49603,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_en.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_en.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49648,227 +49648,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_es.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_es.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49857,230 +49857,307 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation>Python no soporta el prefijo unario de incremento</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation>usar .strip() cpm cadenas multicarácter es engañoso</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation>no llamar assert False dado que python -O elimina dichas llamadas</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation>'sys.maxint' no está definido en Python 3 - usar 'sys.maxsize'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation>'BaseException.message' está marcada como deprecada en Python 2.6 y se ha eliminado en Python 3 - usar 'str(e)'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation>asignaciones a 'os.environ' no limpian el entorno - usar 'os.environ.clear()'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation>variable de control de bucle {0} no usada dentro del cuerpo del bucle - iniciar nombre con guión bajo</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
-      <translation>f-string innecesaria</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
+      <translation>no invocar getattr con un valor de atributo constante</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation>usar 'hasattr(x, "__call__")' para probar si 'x' is invocable no es fiable</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation>no invocar getattr con un valor de atributo constante</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation>no invocar setattr con un valor de atributo constante</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation>Python 3 no incluye métodos '.iter*' en diccionarios</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
-      <translation>Python 3 no incluye métodos '.view*' en diccionarios</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation>no llamar assert False dado que python -O elimina dichas llamadas</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation>'.next()' no existe en Python 3</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation>'__metaclass__' no hace nada en Python 3 - usar 'class MyClass(BaseClass, metaclass=...)'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
-      <translation>encontrado formateador {0}</translation>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <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="276" />
-      <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="279" />
-      <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="282" />
-      <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="285" />
-      <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="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
-      <translation>llamada de formato usa juntos índices implícitos y explícitos</translation>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <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="303" />
-      <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="306" />
-      <source>logging statement uses string.format()</source>
-      <translation>la sentencia de log usa string.format()</translation>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation>la sentencia de log usa '%'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
-      <translation>la sentencia de log usa '+'</translation>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation>la sentencia de log usa f-string</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
-      <translation>la sentencia de log usa 'warn' en lugar de 'warning'</translation>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
+      <translation>f-string innecesaria</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation>se esperaban estos __future__ imports: {0} pero solamente hay: {1}</translation>
+      <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="325" />
-      <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="328" />
-      <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="331" />
-      <source>print statement found</source>
-      <translation>encontrada sentencia print</translation>
+      <source>found {0} formatter</source>
+      <translation>encontrado formateador {0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <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="329" />
+      <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="332" />
-      <source>one element tuple found</source>
-      <translation>tupla de un elemento encontrada</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="335" />
+      <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="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
-      <translation>argumento por defecto mutable de tipo {0}</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="341" />
-      <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="344" />
-      <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>
+      <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="345" />
+      <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="349" />
-      <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="354" />
-      <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>
+      <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="353" />
+      <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="356" />
+      <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="359" />
+      <source>logging statement uses string.format()</source>
+      <translation>la sentencia de log usa string.format()</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation>la sentencia de log usa '%'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation>la sentencia de log usa '+'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation>la sentencia de log usa f-string</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation>la sentencia de log usa 'warn' en lugar de 'warning'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <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="381" />
+      <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="384" />
+      <source>print statement found</source>
+      <translation>encontrada sentencia print</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation>tupla de un elemento encontrada</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <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="394" />
+      <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="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation>las líneas de código comentadas se deberían eliminar</translation>
     </message>
+    <message>
+      <source>using .strip() with multi-character strings is misleading</source>
+      <translation type="vanished">usar .strip() cpm cadenas multicarácter es engañoso</translation>
+    </message>
+    <message>
+      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
+      <translation type="vanished">'sys.maxint' no está definido en Python 3 - usar 'sys.maxsize'</translation>
+    </message>
+    <message>
+      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
+      <translation type="vanished">'BaseException.message' está marcada como deprecada en Python 2.6 y se ha eliminado en Python 3 - usar 'str(e)'</translation>
+    </message>
+    <message>
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
+      <translation type="vanished">usar 'hasattr(x, "__call__")' para probar si 'x' is invocable no es fiable</translation>
+    </message>
+    <message>
+      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
+      <translation type="vanished">Python 3 no incluye métodos '.iter*' en diccionarios</translation>
+    </message>
+    <message>
+      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <translation type="vanished">Python 3 no incluye métodos '.view*' en diccionarios</translation>
+    </message>
+    <message>
+      <source>'.next()' does not exist in Python 3</source>
+      <translation type="vanished">'.next()' no existe en Python 3</translation>
+    </message>
+    <message>
+      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
+      <translation type="vanished">'__metaclass__' no hace nada en Python 3 - usar 'class MyClass(BaseClass, metaclass=...)'</translation>
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
--- a/src/eric7/i18n/eric7_fr.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_fr.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49819,227 +49819,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation>les lignes de code commentées devraient être supprimées</translation>
     </message>
--- a/src/eric7/i18n/eric7_it.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_it.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49783,227 +49783,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_pt.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_pt.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49777,227 +49777,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_ru.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_ru.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49938,230 +49938,307 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation>Python не поддерживает инкремент унарного префикса</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation>использование .strip() с многосимвольными строками приводит к заблуждению</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation>не используйте вызовы assert False, так как python -O удаляет эти вызовы</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation>'sys.maxint' не определен в Python 3 - используйте 'sys.maxsize'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation>'BaseException.message' устарел в Python 2.6 и удален в Python 3 - используйте 'str(e)'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation>назначение 'os.environ' не очищает среду окружения - используйте 'os.environ.clear()'</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation>переменная {0} управления циклом не используется внутри цикла - начните имя символом подчеркивания</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
-      <translation>ненужная f-string</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
+      <translation>не используйте вызовы getattr с постоянным значением атрибута</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation>использование 'hasattr(x, "__call__")' для проверки является ли 'x' вызываемым - ненадежно</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation>не используйте вызовы getattr с постоянным значением атрибута</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation>не используйте вызовы setattr с постоянным значением атрибута</translation>
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation>Python 3 не включает методы '.iter*' в словарях</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
-      <translation>Python 3 не включает методы '.view*' в словарях</translation>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation>не используйте вызовы assert False, так как python -O удаляет эти вызовы</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation>'.next()' не существует в Python 3</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation>'__metaclass__' не работает в Python 3 - используйте 'class MyClass(BaseClass, metaclass=...)'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
-      <translation>найден {0} форматтер</translation>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation>строка формата действительно содержит неиндексированные параметры</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation>строка документации действительно содержит неиндексированные параметры</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation>другая строка действительно содержит неиндексированные параметры</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation>формат вызова использует слишком большой индекс ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation>формат вызова использует отсутствующее ключевое слово ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <source>format call uses keyword arguments but no named entries</source>
-      <translation>формат вызова использует ключевые аргументы, но нет именованных записей</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="292" />
-      <source>format call uses variable arguments but no numbered entries</source>
-      <translation>формат ячейки использует переменные аргументы, но нет пронумерованных записей</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="296" />
-      <source>format call uses implicit and explicit indexes together</source>
-      <translation>формат вызова использует скрытые и явные индексы вместе</translation>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation>формат вызова предоставляет неиспользованный индекс ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation>формат вызова предоставляет неиспользуемое ключевое слово ({0})</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
-      <translation>инструкция ведения журнала использует string.format()</translation>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation>инструкция ведения журнала использует '%'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
-      <translation>инструкция ведения журнала использует '+'</translation>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
+      <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation>инструкция ведения журнала использует f-string</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
-      <translation>инструкция ведения журнала использует 'warn' вместо 'warning'</translation>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
+      <translation>ненужная f-string</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
-      <translation>ожидался __future__ imports: {0}; получены только: {1}</translation>
+      <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="325" />
-      <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="328" />
-      <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="331" />
-      <source>print statement found</source>
-      <translation>обнаружена инструкция печати</translation>
+      <source>found {0} formatter</source>
+      <translation>найден {0} форматтер</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation>строка формата действительно содержит неиндексированные параметры</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
+      <translation>строка документации действительно содержит неиндексированные параметры</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
-      <translation>один элемент кортежа найден</translation>
+      <source>other string does contain unindexed parameters</source>
+      <translation>другая строка действительно содержит неиндексированные параметры</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
+      <translation>формат вызова использует слишком большой индекс ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
-      <translation>изменяемый аргумент по умолчанию типа {0}</translation>
+      <source>format call uses missing keyword ({0})</source>
+      <translation>формат вызова использует отсутствующее ключевое слово ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation>измененный аргумент по умолчанию для вызова функции '{0}'</translation>
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</source>
-      <translation>если функция не имеет возвращаемого значения, (кроме None), None не следует добавлять в каждый return</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="345" />
+      <source>format call uses variable arguments but no numbered entries</source>
+      <translation>формат ячейки использует переменные аргументы, но нет пронумерованных записей</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="349" />
-      <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="354" />
-      <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>
+      <source>format call uses implicit and explicit indexes together</source>
+      <translation>формат вызова использует скрытые и явные индексы вместе</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation>формат вызова предоставляет неиспользованный индекс ({0})</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
+      <translation>формат вызова предоставляет неиспользуемое ключевое слово ({0})</translation>
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation>инструкция ведения журнала использует string.format()</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation>инструкция ведения журнала использует '%'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation>инструкция ведения журнала использует '+'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation>инструкция ведения журнала использует f-string</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation>инструкция ведения журнала использует 'warn' вместо 'warning'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <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="381" />
+      <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="384" />
+      <source>print statement found</source>
+      <translation>обнаружена инструкция печати</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation>один элемент кортежа найден</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation>изменяемый аргумент по умолчанию типа {0}</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation>измененный аргумент по умолчанию для вызова функции '{0}'</translation>
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation>закомментированные строки кода должны быть удалены</translation>
     </message>
+    <message>
+      <source>using .strip() with multi-character strings is misleading</source>
+      <translation type="vanished">использование .strip() с многосимвольными строками приводит к заблуждению</translation>
+    </message>
+    <message>
+      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
+      <translation type="vanished">'sys.maxint' не определен в Python 3 - используйте 'sys.maxsize'</translation>
+    </message>
+    <message>
+      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
+      <translation type="vanished">'BaseException.message' устарел в Python 2.6 и удален в Python 3 - используйте 'str(e)'</translation>
+    </message>
+    <message>
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
+      <translation type="vanished">использование 'hasattr(x, "__call__")' для проверки является ли 'x' вызываемым - ненадежно</translation>
+    </message>
+    <message>
+      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
+      <translation type="vanished">Python 3 не включает методы '.iter*' в словарях</translation>
+    </message>
+    <message>
+      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <translation type="vanished">Python 3 не включает методы '.view*' в словарях</translation>
+    </message>
+    <message>
+      <source>'.next()' does not exist in Python 3</source>
+      <translation type="vanished">'.next()' не существует в Python 3</translation>
+    </message>
+    <message>
+      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
+      <translation type="vanished">'__metaclass__' не работает в Python 3 - используйте 'class MyClass(BaseClass, metaclass=...)'</translation>
+    </message>
   </context>
   <context>
     <name>MouseClickDialog</name>
--- a/src/eric7/i18n/eric7_tr.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_tr.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49730,227 +49730,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>
--- a/src/eric7/i18n/eric7_zh_CN.ts	Wed Sep 14 11:07:55 2022 +0200
+++ b/src/eric7/i18n/eric7_zh_CN.ts	Thu Sep 15 10:09:53 2022 +0200
@@ -49725,227 +49725,272 @@
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="210" />
+      <source>Do not use 'except (){0}:', it also catches unexpected events. Prefer 'except Exception:'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="215" />
       <source>Python does not support the unary prefix increment</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="213" />
-      <source>using .strip() with multi-character strings is misleading</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="217" />
-      <source>do not call assert False since python -O removes these calls</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="221" />
-      <source>'sys.maxint' is not defined in Python 3 - use 'sys.maxsize'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="225" />
-      <source>'BaseException.message' has been deprecated as of Python 2.6 and is removed in Python 3 - use 'str(e)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="230" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="218" />
       <source>assigning to 'os.environ' does not clear the environment - use 'os.environ.clear()'</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="235" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="223" />
+      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable. Use 'callable(x)' for consistent results.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="228" />
+      <source>using .strip() with multi-character strings is misleading. Use .replace() or regular expressions to remove string fragments.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="233" />
       <source>loop control variable {0} not used within the loop body - start the name with an underscore</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="240" />
-      <source>unncessary f-string</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="238" />
+      <source>do not call getattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="241" />
-      <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="245" />
-      <source>using 'hasattr(x, "__call__")' to test if 'x' is callable is unreliable</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="250" />
-      <source>do not call getattr with a constant attribute value</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="253" />
       <source>do not call setattr with a constant attribute value</source>
       <translation type="unfinished" />
     </message>
     <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="256" />
-      <source>Python 3 does not include '.iter*' methods on dictionaries</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="260" />
-      <source>Python 3 does not include '.view*' methods on dictionaries</source>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="244" />
+      <source>do not call assert False since python -O removes these calls</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="248" />
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="254" />
+      <source>A length-one tuple literal is redundant. Write 'except {0}:' instead of 'except ({0},):'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="259" />
+      <source>Redundant exception types in 'except ({0}){1}:'. Write 'except {2}{1}:', which catches exactly the same exceptions.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="264" />
-      <source>'.next()' does not exist in Python 3</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="267" />
-      <source>'__metaclass__' does nothing on Python 3 - use 'class MyClass(BaseClass, metaclass=...)'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="272" />
-      <source>found {0} formatter</source>
+      <source>Pointless comparison. This comparison does nothing but waste CPU instructions. Either prepend 'assert' or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="269" />
+      <source>Cannot raise a literal. Did you intend to return it or raise an Exception?</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="273" />
-      <source>format string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="276" />
-      <source>docstring does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="279" />
-      <source>other string does contain unindexed parameters</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="282" />
-      <source>format call uses too large index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="285" />
-      <source>format call uses missing keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="288" />
-      <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="292" />
-      <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="296" />
-      <source>format call uses implicit and explicit indexes together</source>
+      <source>'assertRaises(Exception):' should be considered evil. It can lead to your test passing even if the code being tested is never executed due to a typo. Either assert for a more specific exception (builtin or custom), use 'assertRaisesRegex', or use the context manager form of 'assertRaises'.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="280" />
+      <source>Found useless expression. Either assign it to a variable or remove it.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="284" />
+      <source>Use of 'functools.lru_cache' or 'functools.cache' on methods can lead to memory leaks. The cache may retain instance references, preventing garbage collection.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="290" />
+      <source>Found for loop that reassigns the iterable it is iterating with each iterable value.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="295" />
+      <source>f-string used as docstring. This will be interpreted by python as a joined string rather than a docstring.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="300" />
-      <source>format call provides unused index ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="303" />
-      <source>format call provides unused keyword ({0})</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="306" />
-      <source>logging statement uses string.format()</source>
+      <source>No arguments passed to 'contextlib.suppress'. No exceptions will be suppressed and therefore this context manager is redundant.</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="305" />
+      <source>Function definition does not bind loop variable '{0}'.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="309" />
-      <source>logging statement uses '%'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="312" />
-      <source>logging statement uses '+'</source>
+      <source>{0} is an abstract base class, but it has no abstract methods. Remember to use '@abstractmethod', '@abstractclassmethod' and/or '@abstractproperty' decorators.</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="315" />
-      <source>logging statement uses f-string</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="318" />
-      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <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 type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="320" />
+      <source>unncessary f-string</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="321" />
-      <source>expected these __future__ imports: {0}; but only got: {1}</source>
+      <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="325" />
-      <source>expected these __future__ imports: {0}; but got none</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="328" />
-      <source>gettext import with alias _ found: {0}</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="331" />
-      <source>print statement found</source>
+      <source>found {0} formatter</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="326" />
+      <source>format string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="329" />
+      <source>docstring does contain unindexed parameters</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="332" />
-      <source>one element tuple found</source>
+      <source>other string does contain unindexed parameters</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
+      <source>format call uses too large index ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="338" />
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="335" />
-      <source>mutable default argument of type {0}</source>
+      <source>format call uses missing keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="341" />
-      <source>mutable default argument of function call '{0}'</source>
-      <translation type="unfinished" />
-    </message>
-    <message>
-      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="344" />
-      <source>None should not be added at any return if function has no return value except None</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="345" />
+      <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="349" />
-      <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="354" />
-      <source>an explicit return at the end of the function should be added if it has a return value except None</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="353" />
+      <source>format call provides unused index ({0})</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="356" />
+      <source>format call provides unused keyword ({0})</source>
       <translation type="unfinished" />
     </message>
     <message>
       <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="359" />
+      <source>logging statement uses string.format()</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="362" />
+      <source>logging statement uses '%'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="365" />
+      <source>logging statement uses '+'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="368" />
+      <source>logging statement uses f-string</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="371" />
+      <source>logging statement uses 'warn' instead of 'warning'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="374" />
+      <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="378" />
+      <source>expected these __future__ imports: {0}; but got none</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="381" />
+      <source>gettext import with alias _ found: {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="384" />
+      <source>print statement found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="385" />
+      <source>one element tuple found</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="391" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="388" />
+      <source>mutable default argument of type {0}</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="394" />
+      <source>mutable default argument of function call '{0}'</source>
+      <translation type="unfinished" />
+    </message>
+    <message>
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="397" />
+      <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="402" />
+      <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="407" />
+      <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="412" />
       <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="364" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="417" />
       <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="369" />
+      <location filename="../Plugins/CheckerPlugins/CodeStyleChecker/Miscellaneous/translations.py" line="422" />
       <source>commented code lines should be removed</source>
       <translation type="unfinished" />
     </message>

eric ide

mercurial