changeset 17620:efd1a4378b64

check-code: catch yield inside try/finally (with tests) This is not allowed in Python 2.4.
author Thomas Arendsen Hein <thomas@intevation.de>
date Wed, 19 Sep 2012 12:29:12 +0200
parents 431e3e827ab0
children 1a42f19ad958
files contrib/check-code.py tests/test-check-code.t
diffstat 2 files changed, 22 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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)