summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErlend E. Aasland <erlend@python.org>2024-01-14 23:09:26 (GMT)
committerGitHub <noreply@github.com>2024-01-14 23:09:26 (GMT)
commit1709020e8ebaf9bf1bc9ee14d56173c860613931 (patch)
tree83a767a968552635c51413621bba30e7f2bb80b7
parent4de4e654e592c4b3b1a073140b97ff7f373c7553 (diff)
downloadcpython-1709020e8ebaf9bf1bc9ee14d56173c860613931.zip
cpython-1709020e8ebaf9bf1bc9ee14d56173c860613931.tar.gz
cpython-1709020e8ebaf9bf1bc9ee14d56173c860613931.tar.bz2
gh-113317: Move FormatCounterFormatter into libclinic (#114066)
-rwxr-xr-xTools/clinic/clinic.py21
-rw-r--r--Tools/clinic/libclinic/__init__.py6
-rw-r--r--Tools/clinic/libclinic/utils.py29
3 files changed, 31 insertions, 25 deletions
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index d45159f..c247bd0 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -23,7 +23,6 @@ import os
import pprint
import re
import shlex
-import string
import sys
import textwrap
@@ -270,24 +269,6 @@ class CRenderData:
self.unlock: list[str] = []
-class FormatCounterFormatter(string.Formatter):
- """
- This counts how many instances of each formatter
- "replacement string" appear in the format string.
-
- e.g. after evaluating "string {a}, {b}, {c}, {a}"
- the counts dict would now look like
- {'a': 2, 'b': 1, 'c': 1}
- """
- def __init__(self) -> None:
- self.counts = collections.Counter[str]()
-
- def get_value(
- self, key: str, args: object, kwargs: object # type: ignore[override]
- ) -> Literal['']:
- self.counts[key] += 1
- return ''
-
class Language(metaclass=abc.ABCMeta):
start_line = ""
@@ -341,7 +322,7 @@ class Language(metaclass=abc.ABCMeta):
fields = ['dsl_name']
fields.extend(additional_fields)
line: str = getattr(self, attr)
- fcf = FormatCounterFormatter()
+ fcf = libclinic.FormatCounterFormatter()
fcf.format(line)
def local_fail(should_be_there_but_isnt: bool) -> None:
if should_be_there_but_isnt:
diff --git a/Tools/clinic/libclinic/__init__.py b/Tools/clinic/libclinic/__init__.py
index f26bf3e..1b300b5 100644
--- a/Tools/clinic/libclinic/__init__.py
+++ b/Tools/clinic/libclinic/__init__.py
@@ -16,8 +16,9 @@ from .formatting import (
wrapped_c_string_literal,
)
from .utils import (
- create_regex,
+ FormatCounterFormatter,
compute_checksum,
+ create_regex,
write_file,
)
@@ -39,8 +40,9 @@ __all__ = [
"wrapped_c_string_literal",
# Utility functions
- "create_regex",
+ "FormatCounterFormatter",
"compute_checksum",
+ "create_regex",
"write_file",
]
diff --git a/Tools/clinic/libclinic/utils.py b/Tools/clinic/libclinic/utils.py
index 1514558..d2d0938 100644
--- a/Tools/clinic/libclinic/utils.py
+++ b/Tools/clinic/libclinic/utils.py
@@ -1,6 +1,9 @@
+import collections
import hashlib
-import re
import os
+import re
+import string
+from typing import Literal
def write_file(filename: str, new_contents: str) -> None:
@@ -39,7 +42,27 @@ def create_regex(
group_re = r"\w+" if word else ".+"
before = re.escape(before)
after = re.escape(after)
- pattern = fr"{before}({group_re}){after}"
+ pattern = rf"{before}({group_re}){after}"
if whole_line:
- pattern = fr"^{pattern}$"
+ pattern = rf"^{pattern}$"
return re.compile(pattern)
+
+
+class FormatCounterFormatter(string.Formatter):
+ """
+ This counts how many instances of each formatter
+ "replacement string" appear in the format string.
+
+ e.g. after evaluating "string {a}, {b}, {c}, {a}"
+ the counts dict would now look like
+ {'a': 2, 'b': 1, 'c': 1}
+ """
+
+ def __init__(self) -> None:
+ self.counts = collections.Counter[str]()
+
+ def get_value(
+ self, key: str, args: object, kwargs: object # type: ignore[override]
+ ) -> Literal[""]:
+ self.counts[key] += 1
+ return ""