]> git.madduck.net Git - etc/vim.git/commitdiff

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

autodetect Python 3.6 on the basis of underscores (#461)
authorJelle Zijlstra <jelle.zijlstra@gmail.com>
Mon, 20 Aug 2018 04:02:06 +0000 (21:02 -0700)
committerGitHub <noreply@github.com>
Mon, 20 Aug 2018 04:02:06 +0000 (21:02 -0700)
README.md
black.py
tests/test_black.py

index 96a24a1eb4ac1d63534ebf8a9cec06d45599a15a..9cb4f18c901e60c29e387c189d8e7bdeb6f81797 100644 (file)
--- a/README.md
+++ b/README.md
@@ -371,6 +371,12 @@ human-readable strings"](https://stackoverflow.com/a/56190)), you can
 pass `--skip-string-normalization` on the command line.  This is meant as
 an adoption helper, avoid using this for new projects.
 
+### Numeric literals
+
+*Black* standardizes all numeric literals to use lowercase letters: `0xab`
+instead of `0XAB` and `1e10` instead of `1E10`. In Python 3.6+, *Black*
+adds underscores to long numeric literals to aid readability: `100000000`
+becomes `100_000_000`.
 
 ### Line breaks & binary operators
 
@@ -843,6 +849,8 @@ More details can be found in [CONTRIBUTING](CONTRIBUTING.md).
 
 ### 18.8b0
 
+* code with `_` in numeric literals is recognized as Python 3.6+ (#461)
+
 * numeric literals are now normalized to include `_` separators on Python 3.6+ code
   (#452)
 
index c899bde36dbbb3fd4efdb6e9aaca7f03e5448d95..b65693e91d0cac0b5087b32397f22c64cee1b5e0 100644 (file)
--- a/black.py
+++ b/black.py
@@ -2891,7 +2891,8 @@ def is_python36(node: Node) -> bool:
     """Return True if the current file is using Python 3.6+ features.
 
     Currently looking for:
-    - f-strings; and
+    - f-strings;
+    - underscores in numeric literals; and
     - trailing commas after * or ** in function signatures and calls.
     """
     for n in node.pre_order():
@@ -2900,6 +2901,10 @@ def is_python36(node: Node) -> bool:
             if value_head in {'f"', 'F"', "f'", "F'", "rf", "fr", "RF", "FR"}:
                 return True
 
+        elif n.type == token.NUMBER:
+            if "_" in n.value:  # type: ignore
+                return True
+
         elif (
             n.type in {syms.typedargslist, syms.arglist}
             and n.children
index 884d0463a3fa294fcec898aaff2d51ea454adc02..10d7f28990d436beaaf5b5faa7f2ce66e6dd0bbb 100644 (file)
@@ -722,6 +722,10 @@ class BlackTestCase(unittest.TestCase):
         self.assertTrue(black.is_python36(node))
         node = black.lib2to3_parse("def f(*, arg): f'string'\n")
         self.assertTrue(black.is_python36(node))
+        node = black.lib2to3_parse("123_456\n")
+        self.assertTrue(black.is_python36(node))
+        node = black.lib2to3_parse("123456\n")
+        self.assertFalse(black.is_python36(node))
         source, expected = read_data("function")
         node = black.lib2to3_parse(source)
         self.assertTrue(black.is_python36(node))