From b5d7d7816e9b7c5e3b2598e3a1dc322580aec65b Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Thu, 2 Oct 2025 15:25:48 +0200 Subject: feat(markdown): better error indicator --- mardown/ast_modifier.go | 8 ++++---- mardown/error.go | 20 +++++++++++++------- 2 files changed, 17 insertions(+), 11 deletions(-) (limited to 'mardown') diff --git a/mardown/ast_modifier.go b/mardown/ast_modifier.go index 93a5af3..36c6193 100644 --- a/mardown/ast_modifier.go +++ b/mardown/ast_modifier.go @@ -8,7 +8,7 @@ import ( ) var ( - ErrInvalidModifier = errors.Join(ErrInvalidParagraph, errors.New("invalid modifier organization")) + ErrInvalidUsage = errors.Join(ErrInvalidParagraph, errors.New("invalid modifier usage")) ErrInvalidTypeInModifier = errors.Join(ErrInvalidParagraph, errors.New("invalid type in modifier")) ) @@ -110,7 +110,7 @@ func modifier(lxs *lexers) (*astModifier, error) { case lexerBreak: lxs.Before() // because we did not use it if len(s) != 0 { - return nil, ErrInvalidModifier + return nil, ErrInvalidUsage } return mod, nil case lexerExternal: @@ -128,7 +128,7 @@ func modifier(lxs *lexers) (*astModifier, error) { } } if len(s) != 0 { - return nil, ErrInvalidModifier + return nil, ErrInvalidUsage } return mod, nil } @@ -144,7 +144,7 @@ func modifierDetect(val string) (*astModifier, error) { case 3: mod.super = true default: - return nil, ErrInvalidModifier + return nil, ErrInvalidUsage } return mod, nil } diff --git a/mardown/error.go b/mardown/error.go index bdcd9df..ad279fe 100644 --- a/mardown/error.go +++ b/mardown/error.go @@ -24,14 +24,20 @@ func (e *ParseError) Pretty() string { ind := "" for lxs.Next() && lxs.Current().Type != lexerBreak { contxt += lxs.Current().Value - ln := len(lxs.Current().Value) - if lxs.current == current-1 { - ln-- - ind += "^" - } - for range ln { - ind += "~" + if lxs.current <= current { + ch := "~" + if lxs.current == current { + ch = "^" + } + for range len(lxs.Current().Value) { + ind += ch + } } } + if lxs.current == current { + runes := []rune(ind) + runes[len(runes)-1] = '^' + ind = string(runes) + } return fmt.Sprintf("%v\n\n%s\n%s", e, contxt, ind) } -- cgit v1.2.3