Skip to content

Commit

Permalink
pythongh-113317: Move FormatCounterFormatter into libclinic (python#1…
Browse files Browse the repository at this point in the history
  • Loading branch information
erlend-aasland authored and Glyphack committed Jan 27, 2024
1 parent 8f8b478 commit 2b39330
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 25 deletions.
21 changes: 1 addition & 20 deletions Tools/clinic/clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import pprint
import re
import shlex
import string
import sys
import textwrap

Expand Down Expand Up @@ -270,24 +269,6 @@ def __init__(self) -> None:
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 = ""
Expand Down Expand Up @@ -341,7 +322,7 @@ def assert_only_one(
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:
Expand Down
6 changes: 4 additions & 2 deletions Tools/clinic/libclinic/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@
wrapped_c_string_literal,
)
from .utils import (
create_regex,
FormatCounterFormatter,
compute_checksum,
create_regex,
write_file,
)

Expand All @@ -39,8 +40,9 @@
"wrapped_c_string_literal",

# Utility functions
"create_regex",
"FormatCounterFormatter",
"compute_checksum",
"create_regex",
"write_file",
]

Expand Down
29 changes: 26 additions & 3 deletions Tools/clinic/libclinic/utils.py
Original file line number Diff line number Diff line change
@@ -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:
Expand Down Expand Up @@ -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 ""

0 comments on commit 2b39330

Please sign in to comment.