autodetect Python 3.6 on the basis of underscores (#461)
This commit is contained in:
parent
66b82ced50
commit
b719d85ccc
@ -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)
|
||||
|
||||
|
7
black.py
7
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
|
||||
|
@ -722,6 +722,10 @@ def test_is_python36(self) -> None:
|
||||
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))
|
||||
|
Loading…
Reference in New Issue
Block a user