From e19d722d9f651cfea7a4d13661fe1947eeb269a9 Mon Sep 17 00:00:00 2001 From: Mihail Stoykov Date: Wed, 29 Jun 2022 14:45:25 +0300 Subject: [PATCH] Return the actual symbols in the reversed range error --- regexp_test.go | 11 +++++++++++ syntax/parser.go | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/regexp_test.go b/regexp_test.go index 111fa74..951fad8 100644 --- a/regexp_test.go +++ b/regexp_test.go @@ -1241,3 +1241,14 @@ func TestConcatAccidentalPatternCharge(t *testing.T) { t.Fatal("Expected non-nil, got nil") } } + +func TestGoodReverseOrderMessage(t *testing.T) { + _, err := Compile(`[h-c]`, ECMAScript) + if err == nil { + t.Fatal("expected error") + } + expected := "error parsing regexp: [h-c] range in reverse order in `[h-c]`" + if err.Error() != expected { + t.Fatalf("expected %q got %q", expected, err.Error()) + } +} diff --git a/syntax/parser.go b/syntax/parser.go index 5b7eafa..02a4ee3 100644 --- a/syntax/parser.go +++ b/syntax/parser.go @@ -104,7 +104,7 @@ const ( ErrBadClassInCharRange = "cannot include class \\%v in character range" ErrUnterminatedBracket = "unterminated [] set" ErrSubtractionMustBeLast = "a subtraction must be the last element in a character class" - ErrReversedCharRange = "[x-y] range in reverse order" + ErrReversedCharRange = "[%c-%c] range in reverse order" ) func (e ErrorCode) String() string { @@ -1571,7 +1571,7 @@ func (p *parser) scanCharSet(caseInsensitive, scanOnly bool) (*CharSet, error) { } else { // a regular range, like a-z if chPrev > ch { - return nil, p.getErr(ErrReversedCharRange) + return nil, p.getErr(ErrReversedCharRange, chPrev, ch) } cc.addRange(chPrev, ch) }