Code Style Checker: updated the return style checker.

Wed, 29 Jul 2020 17:37:09 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Wed, 29 Jul 2020 17:37:09 +0200
changeset 7651
ca87b7490449
parent 7650
36c2dc7e3437
child 7652
298525fb81de

Code Style Checker: updated the return style checker.

eric6/APIs/Python3/eric6.api file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qch file | annotate | diff | comparison | revisions
eric6/Documentation/Help/source.qhp file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html file | annotate | diff | comparison | revisions
eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py file | annotate | diff | comparison | revisions
eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityNodeVisitor.py file | annotate | diff | comparison | revisions
--- a/eric6/APIs/Python3/eric6.api	Mon Jul 27 19:15:26 2020 +0200
+++ b/eric6/APIs/Python3/eric6.api	Wed Jul 29 17:37:09 2020 +0200
@@ -3020,6 +3020,7 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_Assert?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_Assign?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_AsyncFor?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_Attribute?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_Call?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.BugBearVisitor.visit_For?4(node)
@@ -3050,10 +3051,13 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.refs?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.returns?4()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_Assign?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_AsyncFor?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_AsyncFunctionDef?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_For?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_FunctionDef?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_Name?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_Return?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor.visit_While?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.ReturnVisitor?1()
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.SysVersionVisitor.visit_Attribute?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.SysVersionVisitor.visit_Compare?4(node)
@@ -3196,6 +3200,7 @@
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityDefaults.SecurityDefaults?7
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.SecurityNodeVisitor.generic_visit?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.SecurityNodeVisitor.visit?4(node)
+eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.SecurityNodeVisitor.visit_AsyncFunctionDef?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.SecurityNodeVisitor.visit_Bytes?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.SecurityNodeVisitor.visit_Call?4(node)
 eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.SecurityNodeVisitor.visit_ClassDef?4(node)
Binary file eric6/Documentation/Help/source.qch has changed
--- a/eric6/Documentation/Help/source.qhp	Mon Jul 27 19:15:26 2020 +0200
+++ b/eric6/Documentation/Help/source.qhp	Wed Jul 29 17:37:09 2020 +0200
@@ -2279,6 +2279,7 @@
       <keyword name="BugBearVisitor.visit" id="BugBearVisitor.visit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit" />
       <keyword name="BugBearVisitor.visit_Assert" id="BugBearVisitor.visit_Assert" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_Assert" />
       <keyword name="BugBearVisitor.visit_Assign" id="BugBearVisitor.visit_Assign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_Assign" />
+      <keyword name="BugBearVisitor.visit_AsyncFor" id="BugBearVisitor.visit_AsyncFor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_AsyncFor" />
       <keyword name="BugBearVisitor.visit_Attribute" id="BugBearVisitor.visit_Attribute" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_Attribute" />
       <keyword name="BugBearVisitor.visit_Call" id="BugBearVisitor.visit_Call" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_Call" />
       <keyword name="BugBearVisitor.visit_For" id="BugBearVisitor.visit_For" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#BugBearVisitor.visit_For" />
@@ -12445,18 +12446,23 @@
       <keyword name="ReturnVisitor.__checkUnnecessaryAssign" id="ReturnVisitor.__checkUnnecessaryAssign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__checkUnnecessaryAssign" />
       <keyword name="ReturnVisitor.__checkUnnecessaryReturnNone" id="ReturnVisitor.__checkUnnecessaryReturnNone" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__checkUnnecessaryReturnNone" />
       <keyword name="ReturnVisitor.__hasRefsBeforeNextAssign" id="ReturnVisitor.__hasRefsBeforeNextAssign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__hasRefsBeforeNextAssign" />
+      <keyword name="ReturnVisitor.__isFalse" id="ReturnVisitor.__isFalse" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__isFalse" />
       <keyword name="ReturnVisitor.__isNone" id="ReturnVisitor.__isNone" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__isNone" />
       <keyword name="ReturnVisitor.__resultExists" id="ReturnVisitor.__resultExists" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__resultExists" />
       <keyword name="ReturnVisitor.__visitAssignTarget" id="ReturnVisitor.__visitAssignTarget" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__visitAssignTarget" />
+      <keyword name="ReturnVisitor.__visitLoop" id="ReturnVisitor.__visitLoop" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__visitLoop" />
       <keyword name="ReturnVisitor.__visitWithStack" id="ReturnVisitor.__visitWithStack" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.__visitWithStack" />
       <keyword name="ReturnVisitor.assigns" id="ReturnVisitor.assigns" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.assigns" />
       <keyword name="ReturnVisitor.refs" id="ReturnVisitor.refs" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.refs" />
       <keyword name="ReturnVisitor.returns" id="ReturnVisitor.returns" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.returns" />
       <keyword name="ReturnVisitor.visit_Assign" id="ReturnVisitor.visit_Assign" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_Assign" />
+      <keyword name="ReturnVisitor.visit_AsyncFor" id="ReturnVisitor.visit_AsyncFor" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_AsyncFor" />
       <keyword name="ReturnVisitor.visit_AsyncFunctionDef" id="ReturnVisitor.visit_AsyncFunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_AsyncFunctionDef" />
+      <keyword name="ReturnVisitor.visit_For" id="ReturnVisitor.visit_For" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_For" />
       <keyword name="ReturnVisitor.visit_FunctionDef" id="ReturnVisitor.visit_FunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_FunctionDef" />
       <keyword name="ReturnVisitor.visit_Name" id="ReturnVisitor.visit_Name" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_Name" />
       <keyword name="ReturnVisitor.visit_Return" id="ReturnVisitor.visit_Return" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_Return" />
+      <keyword name="ReturnVisitor.visit_While" id="ReturnVisitor.visit_While" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html#ReturnVisitor.visit_While" />
       <keyword name="SafariImporter" id="SafariImporter" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.SafariImporter.html#SafariImporter" />
       <keyword name="SafariImporter (Constructor)" id="SafariImporter (Constructor)" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.SafariImporter.html#SafariImporter.__init__" />
       <keyword name="SafariImporter (Module)" id="SafariImporter (Module)" ref="eric6.WebBrowser.Bookmarks.BookmarksImporters.SafariImporter.html" />
@@ -12696,8 +12702,10 @@
       <keyword name="SecurityNodeVisitor.__postVisit" id="SecurityNodeVisitor.__postVisit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.__postVisit" />
       <keyword name="SecurityNodeVisitor.__preVisit" id="SecurityNodeVisitor.__preVisit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.__preVisit" />
       <keyword name="SecurityNodeVisitor.__runChecks" id="SecurityNodeVisitor.__runChecks" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.__runChecks" />
+      <keyword name="SecurityNodeVisitor.__visitFunctionDefinition" id="SecurityNodeVisitor.__visitFunctionDefinition" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.__visitFunctionDefinition" />
       <keyword name="SecurityNodeVisitor.generic_visit" id="SecurityNodeVisitor.generic_visit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.generic_visit" />
       <keyword name="SecurityNodeVisitor.visit" id="SecurityNodeVisitor.visit" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.visit" />
+      <keyword name="SecurityNodeVisitor.visit_AsyncFunctionDef" id="SecurityNodeVisitor.visit_AsyncFunctionDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.visit_AsyncFunctionDef" />
       <keyword name="SecurityNodeVisitor.visit_Bytes" id="SecurityNodeVisitor.visit_Bytes" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.visit_Bytes" />
       <keyword name="SecurityNodeVisitor.visit_Call" id="SecurityNodeVisitor.visit_Call" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.visit_Call" />
       <keyword name="SecurityNodeVisitor.visit_ClassDef" id="SecurityNodeVisitor.visit_ClassDef" ref="eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html#SecurityNodeVisitor.visit_ClassDef" />
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html	Mon Jul 27 19:15:26 2020 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.MiscellaneousChecker.html	Wed Jul 29 17:37:09 2020 +0200
@@ -125,6 +125,10 @@
 <td>Public method to handle assignments.</td>
 </tr>
 <tr>
+<td><a href="#BugBearVisitor.visit_AsyncFor">visit_AsyncFor</a></td>
+<td>Public method to handle 'for' statements.</td>
+</tr>
+<tr>
 <td><a href="#BugBearVisitor.visit_Attribute">visit_Attribute</a></td>
 <td>Public method to handle attributes.</td>
 </tr>
@@ -228,6 +232,20 @@
 reference to the node to be processed
 </dd>
 </dl>
+<a NAME="BugBearVisitor.visit_AsyncFor" ID="BugBearVisitor.visit_AsyncFor"></a>
+<h4>BugBearVisitor.visit_AsyncFor</h4>
+<b>visit_AsyncFor</b>(<i>node</i>)
+
+<p>
+        Public method to handle 'for' statements.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.AsyncFor)</dt>
+<dd>
+reference to the node to be processed
+</dd>
+</dl>
 <a NAME="BugBearVisitor.visit_Attribute" ID="BugBearVisitor.visit_Attribute"></a>
 <h4>BugBearVisitor.visit_Attribute</h4>
 <b>visit_Attribute</b>(<i>node</i>)
@@ -1268,6 +1286,10 @@
 <td>Private method to check for references before a following assign statement.</td>
 </tr>
 <tr>
+<td><a href="#ReturnVisitor.__isFalse">__isFalse</a></td>
+<td>Private method to check, if a node value is False.</td>
+</tr>
+<tr>
 <td><a href="#ReturnVisitor.__isNone">__isNone</a></td>
 <td>Private method to check, if a node value is None.</td>
 </tr>
@@ -1280,6 +1302,10 @@
 <td>Private method to handle an assign target node.</td>
 </tr>
 <tr>
+<td><a href="#ReturnVisitor.__visitLoop">__visitLoop</a></td>
+<td>Private method to handle loop nodes.</td>
+</tr>
+<tr>
 <td><a href="#ReturnVisitor.__visitWithStack">__visitWithStack</a></td>
 <td>Private method to traverse a given function node using a stack.</td>
 </tr>
@@ -1300,10 +1326,18 @@
 <td>Public method to handle an assign node.</td>
 </tr>
 <tr>
+<td><a href="#ReturnVisitor.visit_AsyncFor">visit_AsyncFor</a></td>
+<td>Public method to handle an async for loop.</td>
+</tr>
+<tr>
 <td><a href="#ReturnVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
 <td>Public method to handle a function definition.</td>
 </tr>
 <tr>
+<td><a href="#ReturnVisitor.visit_For">visit_For</a></td>
+<td>Public method to handle a for loop.</td>
+</tr>
+<tr>
 <td><a href="#ReturnVisitor.visit_FunctionDef">visit_FunctionDef</a></td>
 <td>Public method to handle a function definition.</td>
 </tr>
@@ -1315,6 +1349,10 @@
 <td><a href="#ReturnVisitor.visit_Return">visit_Return</a></td>
 <td>Public method to handle a return node.</td>
 </tr>
+<tr>
+<td><a href="#ReturnVisitor.visit_While">visit_While</a></td>
+<td>Public method to handle a while loop.</td>
+</tr>
 </table>
 <h3>Static Methods</h3>
 
@@ -1416,6 +1454,32 @@
 bool
 </dd>
 </dl>
+<a NAME="ReturnVisitor.__isFalse" ID="ReturnVisitor.__isFalse"></a>
+<h4>ReturnVisitor.__isFalse</h4>
+<b>__isFalse</b>(<i>node</i>)
+
+<p>
+        Private method to check, if a node value is False.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.AST)</dt>
+<dd>
+reference to the node to check
+</dd>
+</dl>
+<dl>
+<dt>Returns:</dt>
+<dd>
+flag indicating the node contains a False value
+</dd>
+</dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <a NAME="ReturnVisitor.__isNone" ID="ReturnVisitor.__isNone"></a>
 <h4>ReturnVisitor.__isNone</h4>
 <b>__isNone</b>(<i>node</i>)
@@ -1436,6 +1500,12 @@
 flag indicating the node contains a None value
 </dd>
 </dl>
+<dl>
+<dt>Return Type:</dt>
+<dd>
+bool
+</dd>
+</dl>
 <a NAME="ReturnVisitor.__resultExists" ID="ReturnVisitor.__resultExists"></a>
 <h4>ReturnVisitor.__resultExists</h4>
 <b>__resultExists</b>(<i></i>)
@@ -1469,6 +1539,20 @@
 reference to the node to handle
 </dd>
 </dl>
+<a NAME="ReturnVisitor.__visitLoop" ID="ReturnVisitor.__visitLoop"></a>
+<h4>ReturnVisitor.__visitLoop</h4>
+<b>__visitLoop</b>(<i>node</i>)
+
+<p>
+        Private method to handle loop nodes.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.For, ast.AsyncFor or ast.While)</dt>
+<dd>
+reference to the loop node to handle
+</dd>
+</dl>
 <a NAME="ReturnVisitor.__visitWithStack" ID="ReturnVisitor.__visitWithStack"></a>
 <h4>ReturnVisitor.__visitWithStack</h4>
 <b>__visitWithStack</b>(<i>node</i>)
@@ -1557,6 +1641,20 @@
 reference to the node to handle
 </dd>
 </dl>
+<a NAME="ReturnVisitor.visit_AsyncFor" ID="ReturnVisitor.visit_AsyncFor"></a>
+<h4>ReturnVisitor.visit_AsyncFor</h4>
+<b>visit_AsyncFor</b>(<i>node</i>)
+
+<p>
+        Public method to handle an async for loop.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.AsyncFor)</dt>
+<dd>
+reference to the async for node to handle
+</dd>
+</dl>
 <a NAME="ReturnVisitor.visit_AsyncFunctionDef" ID="ReturnVisitor.visit_AsyncFunctionDef"></a>
 <h4>ReturnVisitor.visit_AsyncFunctionDef</h4>
 <b>visit_AsyncFunctionDef</b>(<i>node</i>)
@@ -1571,6 +1669,20 @@
 reference to the node to handle
 </dd>
 </dl>
+<a NAME="ReturnVisitor.visit_For" ID="ReturnVisitor.visit_For"></a>
+<h4>ReturnVisitor.visit_For</h4>
+<b>visit_For</b>(<i>node</i>)
+
+<p>
+        Public method to handle a for loop.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.For)</dt>
+<dd>
+reference to the for node to handle
+</dd>
+</dl>
 <a NAME="ReturnVisitor.visit_FunctionDef" ID="ReturnVisitor.visit_FunctionDef"></a>
 <h4>ReturnVisitor.visit_FunctionDef</h4>
 <b>visit_FunctionDef</b>(<i>node</i>)
@@ -1613,6 +1725,20 @@
 reference to the node to handle
 </dd>
 </dl>
+<a NAME="ReturnVisitor.visit_While" ID="ReturnVisitor.visit_While"></a>
+<h4>ReturnVisitor.visit_While</h4>
+<b>visit_While</b>(<i>node</i>)
+
+<p>
+        Public method to handle a while loop.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.While)</dt>
+<dd>
+reference to the while node to handle
+</dd>
+</dl>
 <div align="right"><a href="#top">Up</a></div>
 <hr />
 <hr />
--- a/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html	Mon Jul 27 19:15:26 2020 +0200
+++ b/eric6/Documentation/Source/eric6.Plugins.CheckerPlugins.CodeStyleChecker.Security.SecurityNodeVisitor.html	Wed Jul 29 17:37:09 2020 +0200
@@ -85,6 +85,10 @@
 <td>Private method to run all enabled checks for a given check type.</td>
 </tr>
 <tr>
+<td><a href="#SecurityNodeVisitor.__visitFunctionDefinition">__visitFunctionDefinition</a></td>
+<td>Private method defining a visitor for AST FunctionDef and AsyncFunctionDef nodes.</td>
+</tr>
+<tr>
 <td><a href="#SecurityNodeVisitor.generic_visit">generic_visit</a></td>
 <td>Public method to drive the node visitor.</td>
 </tr>
@@ -93,6 +97,10 @@
 <td>Public method to inspected an AST node.</td>
 </tr>
 <tr>
+<td><a href="#SecurityNodeVisitor.visit_AsyncFunctionDef">visit_AsyncFunctionDef</a></td>
+<td>Public method defining a visitor for AST AsyncFunctionDef nodes.</td>
+</tr>
+<tr>
 <td><a href="#SecurityNodeVisitor.visit_Bytes">visit_Bytes</a></td>
 <td>Public method defining a visitor for Bytes nodes.</td>
 </tr>
@@ -207,6 +215,26 @@
 type of checks to be run
 </dd>
 </dl>
+<a NAME="SecurityNodeVisitor.__visitFunctionDefinition" ID="SecurityNodeVisitor.__visitFunctionDefinition"></a>
+<h4>SecurityNodeVisitor.__visitFunctionDefinition</h4>
+<b>__visitFunctionDefinition</b>(<i>node</i>)
+
+<p>
+        Private method defining a visitor for AST FunctionDef and
+        AsyncFunctionDef nodes.
+</p>
+<p>
+        Add relevant information about the node to the context for use in tests
+        which inspect function definitions. Add the function name to the
+        current namespace for all descendants.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.FunctionDef, ast.AsyncFunctionDef)</dt>
+<dd>
+reference to the node being inspected
+</dd>
+</dl>
 <a NAME="SecurityNodeVisitor.generic_visit" ID="SecurityNodeVisitor.generic_visit"></a>
 <h4>SecurityNodeVisitor.generic_visit</h4>
 <b>generic_visit</b>(<i>node</i>)
@@ -235,6 +263,20 @@
 AST node to be inspected
 </dd>
 </dl>
+<a NAME="SecurityNodeVisitor.visit_AsyncFunctionDef" ID="SecurityNodeVisitor.visit_AsyncFunctionDef"></a>
+<h4>SecurityNodeVisitor.visit_AsyncFunctionDef</h4>
+<b>visit_AsyncFunctionDef</b>(<i>node</i>)
+
+<p>
+        Public method defining a visitor for AST AsyncFunctionDef nodes.
+</p>
+<dl>
+
+<dt><i>node</i> (ast.AsyncFunctionDef)</dt>
+<dd>
+reference to the node being inspected
+</dd>
+</dl>
 <a NAME="SecurityNodeVisitor.visit_Bytes" ID="SecurityNodeVisitor.visit_Bytes"></a>
 <h4>SecurityNodeVisitor.visit_Bytes</h4>
 <b>visit_Bytes</b>(<i>node</i>)
@@ -313,11 +355,6 @@
 <p>
         Public method defining a visitor for AST FunctionDef nodes.
 </p>
-<p>
-        Add relevant information about the node to the context for use in tests
-        which inspect function definitions. Add the function name to the
-        current namespace for all descendants.
-</p>
 <dl>
 
 <dt><i>node</i> (ast.FunctionDef)</dt>
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py	Mon Jul 27 19:15:26 2020 +0200
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/MiscellaneousChecker.py	Wed Jul 29 17:37:09 2020 +0200
@@ -1471,6 +1471,17 @@
         
         self.generic_visit(node)
     
+    def visit_AsyncFor(self, node):
+        """
+        Public method to handle 'for' statements.
+        
+        @param node reference to the node to be processed
+        @type ast.AsyncFor
+        """
+        self.__checkForM507(node)
+        
+        self.generic_visit(node)
+    
     def visit_Assert(self, node):
         """
         Public method to handle 'assert' statements.
@@ -1602,6 +1613,7 @@
         
         self.__stack = []
         self.violations = []
+        self.__loopCount = 0
     
     @property
     def assigns(self):
@@ -1636,6 +1648,44 @@
         """
         return self.__stack[-1][ReturnVisitor.Returns]
     
+    def visit_For(self, node):
+        """
+        Public method to handle a for loop.
+        
+        @param node reference to the for node to handle
+        @type ast.For
+        """
+        self.__visitLoop(node)
+    
+    def visit_AsyncFor(self, node):
+        """
+        Public method to handle an async for loop.
+        
+        @param node reference to the async for node to handle
+        @type ast.AsyncFor
+        """
+        self.__visitLoop(node)
+    
+    def visit_While(self, node):
+        """
+        Public method to handle a while loop.
+        
+        @param node reference to the while node to handle
+        @type ast.While
+        """
+        self.__visitLoop(node)
+    
+    def __visitLoop(self, node):
+        """
+        Private method to handle loop nodes.
+        
+        @param node reference to the loop node to handle
+        @type ast.For, ast.AsyncFor or ast.While
+        """
+        self.__loopCount += 1
+        self.generic_visit(node)
+        self.__loopCount -= 1
+    
     def __visitWithStack(self, node):
         """
         Private method to traverse a given function node using a stack.
@@ -1690,10 +1740,18 @@
         """
         if not self.__stack:
             return
+
+        self.generic_visit(node.value)
         
-        for target in node.targets:
-            self.__visitAssignTarget(target)
-        self.generic_visit(node.value)
+        target = node.targets[0]
+        if (
+            isinstance(target, ast.Tuple) and
+            not isinstance(node.value, ast.Tuple)
+        ):
+            # skip unpacking assign
+            return
+        
+        self.__visitAssignTarget(target)
     
     def visit_Name(self, node):
         """
@@ -1717,7 +1775,7 @@
                 self.__visitAssignTarget(elt)
             return
         
-        if isinstance(node, ast.Name):
+        if not self.__loopCount and isinstance(node, ast.Name):
             self.assigns[node.id].append(node.lineno)
             return
         
@@ -1755,12 +1813,27 @@
         @param node reference to the node to check
         @type ast.AST
         @return flag indicating the node contains a None value
+        @rtype bool
         """
         return (
             AstUtilities.isNameConstant(node) and
             AstUtilities.getValue(node) is None
         )
     
+    def __isFalse(self, node):
+        """
+        Private method to check, if a node value is False.
+        
+        @param node reference to the node to check
+        @type ast.AST
+        @return flag indicating the node contains a False value
+        @rtype bool
+        """
+        return (
+            AstUtilities.isNameConstant(node) and
+            AstUtilities.getValue(node) is False
+        )
+    
     def __resultExists(self):
         """
         Private method to check the existance of a return result.
@@ -1807,14 +1880,17 @@
             self.__checkImplicitReturn(node.orelse[-1])
             return
         
-        if isinstance(node, ast.For) and node.orelse:
+        if isinstance(node, (ast.For, ast.AsyncFor)) and node.orelse:
             self.__checkImplicitReturn(node.orelse[-1])
             return
         
-        if isinstance(node, ast.With):
+        if isinstance(node, (ast.With, ast.AsyncWith)):
             self.__checkImplicitReturn(node.body[-1])
             return
         
+        if isinstance(node, ast.Assert) and self.__isFalse(node.test):
+            return
+        
         try:
             okNodes = (ast.Return, ast.Raise, ast.While, ast.Try)
         except AttributeError:
--- a/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityNodeVisitor.py	Mon Jul 27 19:15:26 2020 +0200
+++ b/eric6/Plugins/CheckerPlugins/CodeStyleChecker/Security/SecurityNodeVisitor.py	Wed Jul 29 17:37:09 2020 +0200
@@ -73,12 +73,31 @@
         """
         Public method defining a visitor for AST FunctionDef nodes.
         
+        @param node reference to the node being inspected
+        @type ast.FunctionDef
+        """
+        self.__visitFunctionDefinition(node)
+    
+    def visit_AsyncFunctionDef(self, node):
+        """
+        Public method defining a visitor for AST AsyncFunctionDef nodes.
+        
+        @param node reference to the node being inspected
+        @type ast.AsyncFunctionDef
+        """
+        self.__visitFunctionDefinition(node)
+    
+    def __visitFunctionDefinition(self, node):
+        """
+        Private method defining a visitor for AST FunctionDef and
+        AsyncFunctionDef nodes.
+        
         Add relevant information about the node to the context for use in tests
         which inspect function definitions. Add the function name to the
         current namespace for all descendants.
         
         @param node reference to the node being inspected
-        @type ast.FunctionDef
+        @type ast.FunctionDef, ast.AsyncFunctionDef
         """
         self.__context['function'] = node
         qualname = SecurityUtils.namespacePathJoin(self.namespace, node.name)

eric ide

mercurial