Wed, 29 Jul 2020 17:37:09 +0200
Code Style Checker: updated the return style checker.
--- 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)
--- 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)