check-code: catch yield inside try/finally (with tests)
authorThomas Arendsen Hein <thomas@intevation.de>
Wed, 19 Sep 2012 12:29:12 +0200
changeset 17620 efd1a4378b64
parent 17619 431e3e827ab0
child 17621 1a42f19ad958
check-code: catch yield inside try/finally (with tests) This is not allowed in Python 2.4.
contrib/check-code.py
tests/test-check-code.t
--- a/contrib/check-code.py	Tue Sep 18 16:30:21 2012 -0700
+++ b/contrib/check-code.py	Wed Sep 19 12:29:12 2012 +0200
@@ -137,6 +137,9 @@
     (r'^\s+\w+=\w+[^,)\n]$', "missing whitespace in assignment"),
     (r'(\s+)try:\n((?:\n|\1\s.*\n)+?)\1except.*?:\n'
      r'((?:\n|\1\s.*\n)+?)\1finally:', 'no try/except/finally in Python 2.4'),
+    (r'(\s+)try:\n((?:\n|\1\s.*\n)*?)\1\s*yield\b.*?'
+     r'((?:\n|\1\s.*\n)+?)\1finally:',
+     'no yield inside try/finally in Python 2.4'),
     (r'.{81}', "line too long"),
     (r' x+[xo][\'"]\n\s+[\'"]x', 'string join across lines with no space'),
     (r'[^\n]\Z', "no trailing newline"),
--- a/tests/test-check-code.t	Tue Sep 18 16:30:21 2012 -0700
+++ b/tests/test-check-code.t	Wed Sep 19 12:29:12 2012 +0200
@@ -43,6 +43,19 @@
   >             pass
   >     finally:
   >         pass
+  > 
+  > # yield inside a try/finally block is not allowed in Python 2.4
+  >     try:
+  >         pass
+  >         yield 1
+  >     finally:
+  >         pass
+  >     try:
+  >         yield
+  >         pass
+  >     finally:
+  >         pass
+  > 
   > EOF
   $ cat > classstyle.py <<EOF
   > class newstyle_class(object):
@@ -84,6 +97,12 @@
   ./non-py24.py:11:
    >     try:
    no try/except/finally in Python 2.4
+  ./non-py24.py:28:
+   >     try:
+   no yield inside try/finally in Python 2.4
+  ./non-py24.py:33:
+   >     try:
+   no yield inside try/finally in Python 2.4
   ./classstyle.py:4:
    > class oldstyle_class:
    old-style class, use class foo(object)