From 3bd56b51d8b7fbaf54a8ed092ce12d2a010ae7d9 Mon Sep 17 00:00:00 2001 From: mariettakyriazi Date: Thu, 28 May 2026 23:22:22 +0300 Subject: [PATCH] Fix adjacent tag matching in ReprHighlighter --- rich/highlighter.py | 2 +- tests/test_highlighter.py | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/rich/highlighter.py b/rich/highlighter.py index df28048f88..c3065fd7a0 100644 --- a/rich/highlighter.py +++ b/rich/highlighter.py @@ -82,7 +82,7 @@ class ReprHighlighter(RegexHighlighter): base_style = "repr." highlights: ClassVar[Sequence[str]] = [ - r"(?P<)(?P[-\w.:|]*)(?P[\w\W]*)(?P>)", + r"(?P<)(?P[-\w.:|]*)(?P[\w\W]*?)(?P>(?=<|$))", r'(?P[\w_]{1,50})=(?P"?[\w_]+"?)?', r"(?P[][{}()])", _combine_regex( diff --git a/tests/test_highlighter.py b/tests/test_highlighter.py index d19928274a..4db90ce24d 100644 --- a/tests/test_highlighter.py +++ b/tests/test_highlighter.py @@ -461,3 +461,25 @@ def test_highlight_iso8601_regex(test: str, spans: List[Span]): highlighter.highlight(text) print(text.spans) assert text.spans == spans + +def test_repr_highlighter_adjacent_tags(): + from rich.highlighter import ReprHighlighter + + highlighter = ReprHighlighter() + + text = highlighter("content1content2") + + tag_contents_spans = [ + span for span in text.spans + if span.style == "repr.tag_contents" + ] + + assert len(tag_contents_spans) == 2 + + assert [ + (span.start, span.end) + for span in tag_contents_spans + ] == [ + (2, 14), + (17, 29), + ] \ No newline at end of file