From c9d493d6e9416ff2d6d524fd778f53a2b49aaf11 Mon Sep 17 00:00:00 2001 From: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com> Date: Fri, 2 Aug 2024 16:10:50 +0300 Subject: [PATCH] Name the regex groups --- src/linkotron/__init__.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/linkotron/__init__.py b/src/linkotron/__init__.py index 37b3917..0925bb9 100644 --- a/src/linkotron/__init__.py +++ b/src/linkotron/__init__.py @@ -21,8 +21,8 @@ def __eq__(self, pattern: Any) -> bool: self.m = re.fullmatch(pattern, self.text) return bool(self.m) - def __getitem__(self, num: int) -> str: - return str(self.m[num]) + def __getitem__(self, group: int | str) -> str: + return str(self.m[group]) class Patterns: @@ -30,16 +30,20 @@ class Patterns: USERNAME = "[a-zA-Z0-9]+([-_][a-zA-Z0-9]+)*" REPO = r"[a-zA-Z0-9]+([-_\.][a-zA-Z0-9]+)*[-_\.]?[a-zA-Z0-9]+" - REPO_URL = re.compile(rf"^https://github.com/({USERNAME})/({REPO})/?$") + REPO_URL = re.compile( + rf"^https://github.com/(?P{USERNAME})/(?P{REPO})/?$" + ) PR_OR_ISSUE = re.compile( - rf"^https://github.com/({USERNAME})/({REPO})/(pull|issues)/(\d+)/?$" + rf"^https://github.com/(?P{USERNAME})/(?P{REPO})/" + r"(pull|issues)/(?P\d+)/?$" ) COMMIT = re.compile( - rf"^https://github.com/({USERNAME})/({REPO})/commit/([0-9a-f]+)/?$" + rf"^https://github.com/(?P{USERNAME})/(?P{REPO})/" + r"commit/(?P[0-9a-f]+)/?$" ) COMMENT = re.compile( - rf"^https://github.com/({USERNAME})/({REPO})/" - r"(pull|issues)/(\d+)#issuecomment-\d+/?$" + rf"^https://github.com/(?P{USERNAME})/(?P{REPO})/" + r"(pull|issues)/(?P\d+)#issuecomment-\d+/?$" ) @@ -47,13 +51,13 @@ def shorten(line: str, *, formatter: str | None = None) -> str: """Shorten GitHub links""" match m := RegexMatcher(line): case Patterns.REPO_URL: - short = f"{m[1]}/{m[3]}" + short = f"{m['username']}/{m['repo']}" case Patterns.PR_OR_ISSUE: - short = f"{m[1]}/{m[3]}#{m[6]}" + short = f"{m['username']}/{m['repo']}#{m['number']}" case Patterns.COMMIT: - short = f"{m[1]}/{m[3]}#{m[5][:7]}" + short = f"{m['username']}/{m['repo']}#{m['sha'][:7]}" case Patterns.COMMENT: - short = f"{m[1]}/{m[3]}#{m[6]} (comment)" + short = f"{m['username']}/{m['repo']}#{m['number']} (comment)" case _: return line