diff -r 22bc345844e7 -r 5f206edea27e RadonMetrics/Documentation/source/Plugin_Metrics_Radon.RadonMetrics.radon.visitors.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RadonMetrics/Documentation/source/Plugin_Metrics_Radon.RadonMetrics.radon.visitors.html Sat Sep 19 20:00:54 2015 +0200 @@ -0,0 +1,467 @@ +<!DOCTYPE html> +<html><head> +<title>Plugin_Metrics_Radon.RadonMetrics.radon.visitors</title> +<meta charset="UTF-8"> +<style> +body { + background: #EDECE6; + margin: 0em 1em 10em 1em; + color: black; +} + +h1 { color: white; background: #85774A; } +h2 { color: white; background: #85774A; } +h3 { color: white; background: #9D936E; } +h4 { color: white; background: #9D936E; } + +a { color: #BA6D36; } + +</style> +</head> +<body><a NAME="top" ID="top"></a> +<h1>Plugin_Metrics_Radon.RadonMetrics.radon.visitors</h1> + +<h3>Global Attributes</h3> +<table> +<tr><td>BaseClass</td></tr><tr><td>BaseFunc</td></tr><tr><td>GET_COMPLEXITY</td></tr><tr><td>GET_ENDLINE</td></tr><tr><td>GET_REAL_COMPLEXITY</td></tr><tr><td>NAMES_GETTER</td></tr> +</table> +<h3>Classes</h3> +<table> +<tr> +<td><a href="#Class">Class</a></td> +<td>Object representing a class block.</td> +</tr><tr> +<td><a href="#CodeVisitor">CodeVisitor</a></td> +<td>Base class for every NodeVisitors in `radon.visitors`.</td> +</tr><tr> +<td><a href="#ComplexityVisitor">ComplexityVisitor</a></td> +<td>A visitor that keeps track of the cyclomatic complexity of the elements.</td> +</tr><tr> +<td><a href="#Function">Function</a></td> +<td>Object represeting a function block.</td> +</tr><tr> +<td><a href="#HalsteadVisitor">HalsteadVisitor</a></td> +<td>Visitor that keeps track of operators and operands, in order to compute Halstead metrics (see :func:`radon.metrics.h_visit`).</td> +</tr> +</table> +<h3>Functions</h3> +<table> +<tr> +<td><a href="#code2ast">code2ast</a></td> +<td>Convert a string object into an AST object.</td> +</tr> +</table> +<hr /><hr /> +<a NAME="Class" ID="Class"></a> +<h2>Class</h2> +<p> +Object representing a class block. +</p> +<h3>Derived from</h3> +BaseClass +<h3>Class Attributes</h3> +<table> +<tr><td>letter</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> +<table> +<tr> +<td><a href="#Class.__str__">__str__</a></td> +<td>String representation of a class block.</td> +</tr><tr> +<td><a href="#Class.complexity">complexity</a></td> +<td>The average complexity of the class.</td> +</tr><tr> +<td><a href="#Class.fullname">fullname</a></td> +<td>The full name of the class.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="Class.__str__" ID="Class.__str__"></a> +<h4>Class.__str__</h4> +<b>__str__</b>(<i></i>) +<p> +String representation of a class block. +</p><a NAME="Class.complexity" ID="Class.complexity"></a> +<h4>Class.complexity</h4> +<b>complexity</b>(<i></i>) +<p> +The average complexity of the class. It corresponds to the average + complexity of its methods plus one. +</p><a NAME="Class.fullname" ID="Class.fullname"></a> +<h4>Class.fullname</h4> +<b>fullname</b>(<i></i>) +<p> +The full name of the class. It is just its name. This attribute + exists for consistency (see :data:`Function.fullname`). +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="CodeVisitor" ID="CodeVisitor"></a> +<h2>CodeVisitor</h2> +<p> +Base class for every NodeVisitors in `radon.visitors`. It implements a + couple utility class methods and a static method. +</p> +<h3>Derived from</h3> +ast.NodeVisitor +<h3>Class Attributes</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr> +<td><a href="#CodeVisitor.from_ast">from_ast</a></td> +<td>Instantiate the class from an AST node.</td> +</tr><tr> +<td><a href="#CodeVisitor.from_code">from_code</a></td> +<td>Instanciate the class from source code (string object).</td> +</tr> +</table> +<h3>Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Static Methods</h3> +<table> +<tr> +<td><a href="#CodeVisitor.get_name">get_name</a></td> +<td>Shorthand for ``obj.__class__.__name__``.</td> +</tr> +</table> +<a NAME="CodeVisitor.from_ast" ID="CodeVisitor.from_ast"></a> +<h4>CodeVisitor.from_ast (class method)</h4> +<b>from_ast</b>(<i>ast_node, **kwargs</i>) +<p> +Instantiate the class from an AST node. The `**kwargs` are + directly passed to the `ast.NodeVisitor` constructor. +</p><a NAME="CodeVisitor.from_code" ID="CodeVisitor.from_code"></a> +<h4>CodeVisitor.from_code (class method)</h4> +<b>from_code</b>(<i>code, **kwargs</i>) +<p> +Instanciate the class from source code (string object). The + `**kwargs` are directly passed to the `ast.NodeVisitor` constructor. +</p><a NAME="CodeVisitor.get_name" ID="CodeVisitor.get_name"></a> +<h4>CodeVisitor.get_name (static)</h4> +<b>get_name</b>(<i></i>) +<p> +Shorthand for ``obj.__class__.__name__``. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="ComplexityVisitor" ID="ComplexityVisitor"></a> +<h2>ComplexityVisitor</h2> +<p> +A visitor that keeps track of the cyclomatic complexity of + the elements. +</p><p> + :param to_method: If True, every function is treated as a method. In this + case the *classname* parameter is used as class name. + :param classname: Name of parent class. + :param off: If True, the starting value for the complexity is set to 1, + otherwise to 0. +</p> +<h3>Derived from</h3> +CodeVisitor +<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="#ComplexityVisitor.__init__">ComplexityVisitor</a></td> +<td></td> +</tr><tr> +<td><a href="#ComplexityVisitor.blocks">blocks</a></td> +<td>All the blocks visited.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.classes_complexity">classes_complexity</a></td> +<td>The total complexity from all classes (i.e.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.functions_complexity">functions_complexity</a></td> +<td>The total complexity from all functions (i.e.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.generic_visit">generic_visit</a></td> +<td>Main entry point for the visitor.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.max_line">max_line</a></td> +<td>The maximum line number among the analyzed lines.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.total_complexity">total_complexity</a></td> +<td>The total complexity.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.visit_Assert">visit_Assert</a></td> +<td>When visiting `assert` statements, the complexity is increased only if the `no_assert` attribute is `False`.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.visit_ClassDef">visit_ClassDef</a></td> +<td>When visiting classes a new visitor is created to recursively analyze the class' body and methods.</td> +</tr><tr> +<td><a href="#ComplexityVisitor.visit_FunctionDef">visit_FunctionDef</a></td> +<td>When visiting functions a new visitor is created to recursively analyze the function's body.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="ComplexityVisitor.__init__" ID="ComplexityVisitor.__init__"></a> +<h4>ComplexityVisitor (Constructor)</h4> +<b>ComplexityVisitor</b>(<i>to_method=False, classname=None, off=True, no_assert=False</i>) +<a NAME="ComplexityVisitor.blocks" ID="ComplexityVisitor.blocks"></a> +<h4>ComplexityVisitor.blocks</h4> +<b>blocks</b>(<i></i>) +<p> +All the blocks visited. These include: all the functions, the + classes and their methods. The returned list is not sorted. +</p><a NAME="ComplexityVisitor.classes_complexity" ID="ComplexityVisitor.classes_complexity"></a> +<h4>ComplexityVisitor.classes_complexity</h4> +<b>classes_complexity</b>(<i></i>) +<p> +The total complexity from all classes (i.e. the total number of + decision points + 1). +</p><a NAME="ComplexityVisitor.functions_complexity" ID="ComplexityVisitor.functions_complexity"></a> +<h4>ComplexityVisitor.functions_complexity</h4> +<b>functions_complexity</b>(<i></i>) +<p> +The total complexity from all functions (i.e. the total number of + decision points + 1). +</p><p> + This is *not* the sum of all the complexity from the functions. Rather, + it's the complexity of the code *inside* all the functions. +</p><a NAME="ComplexityVisitor.generic_visit" ID="ComplexityVisitor.generic_visit"></a> +<h4>ComplexityVisitor.generic_visit</h4> +<b>generic_visit</b>(<i>node</i>) +<p> +Main entry point for the visitor. +</p><a NAME="ComplexityVisitor.max_line" ID="ComplexityVisitor.max_line"></a> +<h4>ComplexityVisitor.max_line</h4> +<b>max_line</b>(<i>value</i>) +<p> +The maximum line number among the analyzed lines. +</p><a NAME="ComplexityVisitor.total_complexity" ID="ComplexityVisitor.total_complexity"></a> +<h4>ComplexityVisitor.total_complexity</h4> +<b>total_complexity</b>(<i></i>) +<p> +The total complexity. Computed adding up the visitor complexity, the + functions complexity, and the classes complexity. +</p><a NAME="ComplexityVisitor.visit_Assert" ID="ComplexityVisitor.visit_Assert"></a> +<h4>ComplexityVisitor.visit_Assert</h4> +<b>visit_Assert</b>(<i>node</i>) +<p> +When visiting `assert` statements, the complexity is increased only + if the `no_assert` attribute is `False`. +</p><a NAME="ComplexityVisitor.visit_ClassDef" ID="ComplexityVisitor.visit_ClassDef"></a> +<h4>ComplexityVisitor.visit_ClassDef</h4> +<b>visit_ClassDef</b>(<i>node</i>) +<p> +When visiting classes a new visitor is created to recursively + analyze the class' body and methods. +</p><a NAME="ComplexityVisitor.visit_FunctionDef" ID="ComplexityVisitor.visit_FunctionDef"></a> +<h4>ComplexityVisitor.visit_FunctionDef</h4> +<b>visit_FunctionDef</b>(<i>node</i>) +<p> +When visiting functions a new visitor is created to recursively + analyze the function's body. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="Function" ID="Function"></a> +<h2>Function</h2> +<p> +Object represeting a function block. +</p> +<h3>Derived from</h3> +BaseFunc +<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="#Function.__str__">__str__</a></td> +<td>String representation of a function block.</td> +</tr><tr> +<td><a href="#Function.fullname">fullname</a></td> +<td>The full name of the function.</td> +</tr><tr> +<td><a href="#Function.letter">letter</a></td> +<td>The letter representing the function.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="Function.__str__" ID="Function.__str__"></a> +<h4>Function.__str__</h4> +<b>__str__</b>(<i></i>) +<p> +String representation of a function block. +</p><a NAME="Function.fullname" ID="Function.fullname"></a> +<h4>Function.fullname</h4> +<b>fullname</b>(<i></i>) +<p> +The full name of the function. If it is a method, then the full name + is: + {class name}.{method name} + Otherwise it is just the function name. +</p><a NAME="Function.letter" ID="Function.letter"></a> +<h4>Function.letter</h4> +<b>letter</b>(<i></i>) +<p> +The letter representing the function. It is `M` if the function is + actually a method, `F` otherwise. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="HalsteadVisitor" ID="HalsteadVisitor"></a> +<h2>HalsteadVisitor</h2> +<p> +Visitor that keeps track of operators and operands, in order to compute + Halstead metrics (see :func:`radon.metrics.h_visit`). +</p> +<h3>Derived from</h3> +CodeVisitor +<h3>Class Attributes</h3> +<table> +<tr><td>types</td></tr> +</table> +<h3>Class Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<h3>Methods</h3> +<table> +<tr> +<td><a href="#HalsteadVisitor.__init__">HalsteadVisitor</a></td> +<td>*context* is a string used to keep track the analysis' context.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.aux">aux</a></td> +<td>Actual function that updates the stats.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.dispatch">dispatch</a></td> +<td>This decorator does all the hard work needed for every node.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.distinct_operands">distinct_operands</a></td> +<td>The number of distinct operands.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.distinct_operators">distinct_operators</a></td> +<td>The number of distinct operators.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.visit_AugAssign">visit_AugAssign</a></td> +<td>An augmented assign (contains an operator).</td> +</tr><tr> +<td><a href="#HalsteadVisitor.visit_BinOp">visit_BinOp</a></td> +<td>A binary operator.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.visit_BoolOp">visit_BoolOp</a></td> +<td>A boolean operator.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.visit_Compare">visit_Compare</a></td> +<td>A comparison.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.visit_FunctionDef">visit_FunctionDef</a></td> +<td>When visiting functions, another visitor is created to recursively analyze the function's body.</td> +</tr><tr> +<td><a href="#HalsteadVisitor.visit_UnaryOp">visit_UnaryOp</a></td> +<td>A unary operator.</td> +</tr> +</table> +<h3>Static Methods</h3> +<table> +<tr><td>None</td></tr> +</table> +<a NAME="HalsteadVisitor.__init__" ID="HalsteadVisitor.__init__"></a> +<h4>HalsteadVisitor (Constructor)</h4> +<b>HalsteadVisitor</b>(<i>context=None</i>) +<p> +*context* is a string used to keep track the analysis' context. +</p><a NAME="HalsteadVisitor.aux" ID="HalsteadVisitor.aux"></a> +<h4>HalsteadVisitor.aux</h4> +<b>aux</b>(<i>node</i>) +<p> +Actual function that updates the stats. +</p><a NAME="HalsteadVisitor.dispatch" ID="HalsteadVisitor.dispatch"></a> +<h4>HalsteadVisitor.dispatch</h4> +<b>dispatch</b>(<i></i>) +<p> +This decorator does all the hard work needed for every node. +</p><p> + The decorated method must return a tuple of 4 elements: +</p><p> + * the number of operators + * the number of operands + * the operators seen (a sequence) + * the operands seen (a sequence) +</p><a NAME="HalsteadVisitor.distinct_operands" ID="HalsteadVisitor.distinct_operands"></a> +<h4>HalsteadVisitor.distinct_operands</h4> +<b>distinct_operands</b>(<i></i>) +<p> +The number of distinct operands. +</p><a NAME="HalsteadVisitor.distinct_operators" ID="HalsteadVisitor.distinct_operators"></a> +<h4>HalsteadVisitor.distinct_operators</h4> +<b>distinct_operators</b>(<i></i>) +<p> +The number of distinct operators. +</p><a NAME="HalsteadVisitor.visit_AugAssign" ID="HalsteadVisitor.visit_AugAssign"></a> +<h4>HalsteadVisitor.visit_AugAssign</h4> +<b>visit_AugAssign</b>(<i>node</i>) +<p> +An augmented assign (contains an operator). +</p><a NAME="HalsteadVisitor.visit_BinOp" ID="HalsteadVisitor.visit_BinOp"></a> +<h4>HalsteadVisitor.visit_BinOp</h4> +<b>visit_BinOp</b>(<i>node</i>) +<p> +A binary operator. +</p><a NAME="HalsteadVisitor.visit_BoolOp" ID="HalsteadVisitor.visit_BoolOp"></a> +<h4>HalsteadVisitor.visit_BoolOp</h4> +<b>visit_BoolOp</b>(<i>node</i>) +<p> +A boolean operator. +</p><a NAME="HalsteadVisitor.visit_Compare" ID="HalsteadVisitor.visit_Compare"></a> +<h4>HalsteadVisitor.visit_Compare</h4> +<b>visit_Compare</b>(<i>node</i>) +<p> +A comparison. +</p><a NAME="HalsteadVisitor.visit_FunctionDef" ID="HalsteadVisitor.visit_FunctionDef"></a> +<h4>HalsteadVisitor.visit_FunctionDef</h4> +<b>visit_FunctionDef</b>(<i>node</i>) +<p> +When visiting functions, another visitor is created to recursively + analyze the function's body. +</p><a NAME="HalsteadVisitor.visit_UnaryOp" ID="HalsteadVisitor.visit_UnaryOp"></a> +<h4>HalsteadVisitor.visit_UnaryOp</h4> +<b>visit_UnaryOp</b>(<i>node</i>) +<p> +A unary operator. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /><hr /> +<a NAME="code2ast" ID="code2ast"></a> +<h2>code2ast</h2> +<b>code2ast</b>(<i>source</i>) +<p> +Convert a string object into an AST object. This function attempts to + convert the string into bytes. +</p> +<div align="right"><a href="#top">Up</a></div> +<hr /> +</body></html> \ No newline at end of file