summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Thénault <sylvain.thenault@logilab.fr>2010-02-23 13:34:59 +0100
committerSylvain Thénault <sylvain.thenault@logilab.fr>2010-02-23 13:34:59 +0100
commit9686bf693764bdf9bb805afbbbe0ac71230b6cab (patch)
tree05fdd29deb1a24315b6708484c3ec1a4e3afd27d
parente8e8fd80f2787933494f67a9140c1710940e04ca (diff)
downloadpylint-git-9686bf693764bdf9bb805afbbbe0ac71230b6cab.tar.gz
patch for #5977. Yields do not increment the counter of returns.
* remove yields counting
-rw-r--r--ChangeLog5
-rw-r--r--checkers/design_analysis.py8
-rw-r--r--test/input/func_too_many_returns_yields.py42
-rw-r--r--test/messages/func_too_many_returns_yields.txt1
4 files changed, 48 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 4e5bcb466..72d218ec6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,9 @@
ChangeLog for PyLint
====================
- --
+ --
+ * fix #5977, yield and return statement have their own counters, no more R0911
+ (Too many return statements) when a function have many yield stamtements.
+
* implement #5564, function / methode arguments with leading "_" are ignored in
arguments / local variables count.
diff --git a/checkers/design_analysis.py b/checkers/design_analysis.py
index cfc81c303..0deb6c796 100644
--- a/checkers/design_analysis.py
+++ b/checkers/design_analysis.py
@@ -287,17 +287,11 @@ class MisdesignChecker(BaseChecker):
args=(self._stmts, self.config.max_statements))
def visit_return(self, _):
- """count number of returns/yields"""
+ """count number of returns"""
if not self._returns:
return # return outside function, reported by the base checker
self._returns[-1] += 1
- def visit_yield(self, _):
- """count number of returns/yields"""
- if not self._returns:
- return # yield outside function, reported by the base checker
- self._returns[-1] += 1
-
def visit_default(self, node):
"""default visit method -> increments the statements counter if
necessary
diff --git a/test/input/func_too_many_returns_yields.py b/test/input/func_too_many_returns_yields.py
new file mode 100644
index 000000000..c61bd7d5b
--- /dev/null
+++ b/test/input/func_too_many_returns_yields.py
@@ -0,0 +1,42 @@
+"""test"""
+
+__revision__ = None
+
+def too_many_returns(arg):
+ """is this real ?"""
+ if arg == 1:
+ return 1
+ elif arg == 2:
+ return 2
+ elif arg == 3:
+ return 3
+ elif arg == 4:
+ return 4
+ elif arg == 5:
+ return 5
+ elif arg == 6:
+ return 6
+ elif arg == 7:
+ return 7
+ elif arg == 8:
+ return 8
+ elif arg == 9:
+ return 9
+ elif arg == 10:
+ return 10
+ return None
+
+def many_yield(text):
+ """not a problem"""
+ if text:
+ yield " line 1: %s\n" % text
+ yield " line 2\n"
+ yield " line 3\n"
+ yield " line 4\n"
+ yield " line 5\n"
+ else:
+ yield " line 6\n"
+ yield " line 7\n"
+ yield " line 8\n"
+ yield " line 9\n"
+ yield " line 10\n"
diff --git a/test/messages/func_too_many_returns_yields.txt b/test/messages/func_too_many_returns_yields.txt
new file mode 100644
index 000000000..f8a0f0d20
--- /dev/null
+++ b/test/messages/func_too_many_returns_yields.txt
@@ -0,0 +1 @@
+R: 5:too_many_returns: Too many return statements (11/6)