Implement warn.all (or any_directive.all).
authorRobert Bradshaw <robertwb@gmail.com>
Fri, 26 Jul 2013 17:54:18 +0000 (10:54 -0700)
committerRobert Bradshaw <robertwb@gmail.com>
Fri, 26 Jul 2013 17:54:18 +0000 (10:54 -0700)
Cython/Compiler/Options.py

index 795ae86..c81a756 100644 (file)
@@ -303,6 +303,11 @@ def parse_directive_list(s, relaxed_bool=False, ignore_unknown=False,
     Traceback (most recent call last):
        ...
     ValueError: Unknown option: "unknown"
+    >>> warnings = parse_directive_list('warn.all=True')
+    >>> len(warnings) > 1
+    True
+    >>> sum(warnings.values()) == len(warnings)  # all true.
+    True
     """
     if current_settings is None:
         result = {}
@@ -313,10 +318,18 @@ def parse_directive_list(s, relaxed_bool=False, ignore_unknown=False,
         if not item: continue
         if not '=' in item: raise ValueError('Expected "=" in option "%s"' % item)
         name, value = [ s.strip() for s in item.strip().split('=', 1) ]
-        parsed_value = parse_directive_value(name, value, relaxed_bool=relaxed_bool)
-        if parsed_value is None:
-            if not ignore_unknown:
+        if name not in directive_defaults:
+            found = False
+            if name.endswith('.all'):
+                prefix = name[:-3]
+                for directive in directive_defaults:
+                    if directive.startswith(prefix):
+                        found = True
+                        parsed_value = parse_directive_value(directive, value, relaxed_bool=relaxed_bool)
+                        result[directive] = parsed_value
+            if not found and not ignore_unknown:
                 raise ValueError('Unknown option: "%s"' % name)
         else:
+            parsed_value = parse_directive_value(name, value, relaxed_bool=relaxed_bool)
             result[name] = parsed_value
     return result