# HG changeset patch
# User Augie Fackler <raf@durin42.com>
# Date 2013-01-01 18:58:21
# Node ID c582a71457e5daaa973442b3efd1cc6336f1cc1e
# Parent  f614543733b6780c8b3faf9a01d11cf1e5d9fb9c

check-code: disallow two-argument form of raise

Using this old form makes any attempt to port to Python 3 harder, and
the new syntax is supported in 2.4 already.

diff --git a/contrib/check-code.py b/contrib/check-code.py
--- a/contrib/check-code.py
+++ b/contrib/check-code.py
@@ -185,6 +185,8 @@ pypats = [
     (r'[^^+=*/!<>&| %-](\s=|=\s)[^= ]',
      "wrong whitespace around ="),
     (r'raise Exception', "don't raise generic exceptions"),
+    (r'raise [^,(]+, (\([^\)]+\)|[^,\(\)]+)$',
+     "don't use old-style two-argument raise, use Exception(message)"),
     (r' is\s+(not\s+)?["\'0-9-]', "object comparison with literal"),
     (r' [=!]=\s+(True|False|None)',
      "comparison with singleton, use 'is' or 'is not' instead"),
diff --git a/tests/test-check-code.t b/tests/test-check-code.t
--- a/tests/test-check-code.t
+++ b/tests/test-check-code.t
@@ -159,3 +159,14 @@
    > except:
    warning: naked except clause
   [1]
+
+  $ cat > raise-format.py <<EOF
+  > raise SomeException, message
+  > # this next line is okay
+  > raise SomeException(arg1, arg2)
+  > EOF
+  $ "$check_code" raise-format.py
+  raise-format.py:1:
+   > raise SomeException, message
+   don't use old-style two-argument raise, use Exception(message)
+  [1]