]> 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:

Use lowercase hex numbers fixes #1692 (#1775)
authorCasper Weiss Bang <c@cwb.dk>
Fri, 13 Nov 2020 15:25:17 +0000 (16:25 +0100)
committerGitHub <noreply@github.com>
Fri, 13 Nov 2020 15:25:17 +0000 (07:25 -0800)
* Made hex lower case

* Refactored numeric formatting section

* Redid some refactoring and removed bloat

* Removed additions from test_requirements.txt

* Primer now expects expected changes

* Undid some refactoring

* added to changelog

* Update src/black/__init__.py

Co-authored-by: Zsolt Dollenstein <zsol.zsol@gmail.com>
Co-authored-by: Zsolt Dollenstein <zsol.zsol@gmail.com>
Co-authored-by: Cooper Lees <me@cooperlees.com>
.gitignore
CHANGES.md
src/black/__init__.py
src/black_primer/primer.json
src/blib2to3/pytree.py
test_requirements.txt
tests/data/numeric_literals.py
tests/data/numeric_literals_py2.py
tests/data/numeric_literals_skip_underscores.py

index 3207e72ae28c55363363d3b4096b2a3860eb568b..30225ec776437f7e062c45ffb47c10311edf70cd 100644 (file)
@@ -1,3 +1,4 @@
+.venv
 .coverage
 _build
 .DS_Store
@@ -15,4 +16,4 @@ src/_black_version.py
 .dmypy.json
 *.swp
 .hypothesis/
-venv/
\ No newline at end of file
+venv/
index 240abe302a4b977f456627f8298bc10ccadf3b02..67697bd7b074e1b2bf0367acedd313effa9df61f 100644 (file)
@@ -21,6 +21,8 @@
 
 - Added support for PEP 614 relaxed decorator syntax on python 3.9 (#1711)
 
+- use lowercase hex strings (#1692)
+
 #### _Packaging_
 
 - Self-contained native _Black_ binaries are now provided for releases via GitHub
index 7e13a5d33f5169e35d195dd4f8bbbb05ef9f524a..44edeb0d9f1a0c09d4be1e2aee383a677d59f821 100644 (file)
@@ -5192,31 +5192,52 @@ def normalize_numeric_literal(leaf: Leaf) -> None:
         # Leave octal and binary literals alone.
         pass
     elif text.startswith("0x"):
-        # Change hex literals to upper case.
-        before, after = text[:2], text[2:]
-        text = f"{before}{after.upper()}"
+        text = format_hex(text)
     elif "e" in text:
-        before, after = text.split("e")
-        sign = ""
-        if after.startswith("-"):
-            after = after[1:]
-            sign = "-"
-        elif after.startswith("+"):
-            after = after[1:]
-        before = format_float_or_int_string(before)
-        text = f"{before}e{sign}{after}"
+        text = format_scientific_notation(text)
     elif text.endswith(("j", "l")):
-        number = text[:-1]
-        suffix = text[-1]
-        # Capitalize in "2L" because "l" looks too similar to "1".
-        if suffix == "l":
-            suffix = "L"
-        text = f"{format_float_or_int_string(number)}{suffix}"
+        text = format_long_or_complex_number(text)
     else:
         text = format_float_or_int_string(text)
     leaf.value = text
 
 
+def format_hex(text: str) -> str:
+    """
+    Formats a hexadecimal string like "0x12b3"
+
+    Uses lowercase because of similarity between "B" and "8", which
+    can cause security issues.
+    see: https://github.com/psf/black/issues/1692
+    """
+
+    before, after = text[:2], text[2:]
+    return f"{before}{after.lower()}"
+
+
+def format_scientific_notation(text: str) -> str:
+    """Formats a numeric string utilizing scentific notation"""
+    before, after = text.split("e")
+    sign = ""
+    if after.startswith("-"):
+        after = after[1:]
+        sign = "-"
+    elif after.startswith("+"):
+        after = after[1:]
+    before = format_float_or_int_string(before)
+    return f"{before}e{sign}{after}"
+
+
+def format_long_or_complex_number(text: str) -> str:
+    """Formats a long or complex string like `10L` or `10j`"""
+    number = text[:-1]
+    suffix = text[-1]
+    # Capitalize in "2L" because "l" looks too similar to "1".
+    if suffix == "l":
+        suffix = "L"
+    return f"{format_float_or_int_string(number)}{suffix}"
+
+
 def format_float_or_int_string(text: str) -> str:
     """Formats a float string like "1.0"."""
     if "." not in text:
index cdc863ca03288c73783da11c9e6de7626edb8cb9..32df01571a78c136397eb608285b338f5110d024 100644 (file)
@@ -10,7 +10,7 @@
     },
     "attrs": {
       "cli_arguments": [],
-      "expect_formatting_changes": false,
+      "expect_formatting_changes": true,
       "git_clone_url": "https://github.com/python-attrs/attrs.git",
       "long_checkout": false,
       "py_versions": ["all"]
@@ -47,7 +47,7 @@
     },
     "hypothesis": {
       "cli_arguments": [],
-      "expect_formatting_changes": false,
+      "expect_formatting_changes": true,
       "git_clone_url": "https://github.com/HypothesisWorks/hypothesis.git",
       "long_checkout": false,
       "py_versions": ["all"]
@@ -63,7 +63,7 @@
     },
     "pillow": {
       "cli_arguments": [],
-      "expect_formatting_changes": false,
+      "expect_formatting_changes": true,
       "git_clone_url": "https://github.com/python-pillow/Pillow.git",
       "long_checkout": false,
       "py_versions": ["all"]
@@ -77,7 +77,7 @@
     },
     "pyramid": {
       "cli_arguments": [],
-      "expect_formatting_changes": false,
+      "expect_formatting_changes": true,
       "git_clone_url": "https://github.com/Pylons/pyramid.git",
       "long_checkout": false,
       "py_versions": ["all"]
     },
     "virtualenv": {
       "cli_arguments": [],
-      "expect_formatting_changes": false,
+      "expect_formatting_changes": true,
       "git_clone_url": "https://github.com/pypa/virtualenv.git",
       "long_checkout": false,
       "py_versions": ["all"]
index 4b841b768e7fefcb64f04045edba9ce9ab162221..6dba3c7bb15880cdb5a039f804de6331d91dbcbf 100644 (file)
@@ -34,7 +34,7 @@ __author__ = "Guido van Rossum <guido@python.org>"
 import sys
 from io import StringIO
 
-HUGE: int = 0x7FFFFFFF  # maximum repeat count, default max
+HUGE: int = 0x7fffffff  # maximum repeat count, default max
 
 _type_reprs: Dict[int, Union[Text, int]] = {}
 
index 3e65cdb669fb6aa970ab1a0eaba68a7b099ff9d9..9f69b8edf83d899bcea2c092a3bbb932beee4e35 100644 (file)
@@ -2,4 +2,4 @@ pytest >= 6.1.1
 pytest-mock >= 3.3.1
 pytest-cases >= 2.3.0
 coverage >= 5.3
-parameterized >= 0.7.4
\ No newline at end of file
+parameterized >= 0.7.4
index 254da68d3308bf76cdf464dbf9aa5a5a74252828..06b7f7758ee5fe46d7642da7987376d6698660ab 100644 (file)
@@ -12,7 +12,7 @@ x = 123456789.123456789E123456789
 x = 123456789E123456789
 x = 123456789J
 x = 123456789.123456789J
-x = 0XB1ACC
+x = 0Xb1aCc
 x = 0B1011
 x = 0O777
 x = 0.000000006
@@ -36,7 +36,7 @@ x = 123456789.123456789e123456789
 x = 123456789e123456789
 x = 123456789j
 x = 123456789.123456789j
-x = 0xB1ACC
+x = 0xb1acc
 x = 0b1011
 x = 0o777
 x = 0.000000006
index 8f85c43f2653cf009c772522cb281bad9e73ba25..8b2c7faa3068168e8b6a0623b05c13a104a150e4 100644 (file)
@@ -3,7 +3,7 @@
 x = 123456789L
 x = 123456789l
 x = 123456789
-x = 0xb1acc
+x = 0xB1aCc
 
 # output
 
@@ -13,4 +13,4 @@ x = 0xb1acc
 x = 123456789L
 x = 123456789L
 x = 123456789
-x = 0xB1ACC
+x = 0xb1acc
index e345bb90276c709939125f2e366f45318e973486..f83e23312f21e3740b348989a9e3d08915065b63 100644 (file)
@@ -3,7 +3,7 @@
 x = 123456789
 x = 1_2_3_4_5_6_7
 x = 1E+1
-x = 0xb1acc
+x = 0xb1AcC
 x = 0.00_00_006
 x = 12_34_567J
 x = .1_2
@@ -16,8 +16,8 @@ x = 1_2.
 x = 123456789
 x = 1_2_3_4_5_6_7
 x = 1e1
-x = 0xB1ACC
+x = 0xb1acc
 x = 0.00_00_006
 x = 12_34_567j
 x = 0.1_2
-x = 1_2.0
\ No newline at end of file
+x = 1_2.0