From 1e24765b17d04bce1b4976e31ee9a91295a2deda Mon Sep 17 00:00:00 2001 From: yusing Date: Tue, 13 May 2025 19:40:04 +0800 Subject: [PATCH] fix: nil when printing error in edge cases --- internal/gperr/base.go | 7 +++++-- internal/gperr/hint.go | 2 +- internal/gperr/nested_error.go | 6 ++++-- internal/gperr/utils.go | 3 +++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/internal/gperr/base.go b/internal/gperr/base.go index 99c5077..6bdc457 100644 --- a/internal/gperr/base.go +++ b/internal/gperr/base.go @@ -36,8 +36,11 @@ func (err *baseError) Subjectf(format string, args ...any) Error { return err.Subject(format) } -func (err baseError) With(extra error) Error { - return &nestedError{&err, []error{extra}} +func (err *baseError) With(extra error) Error { + if extra == nil { + return err + } + return &nestedError{&baseError{err.Err}, []error{extra}} } func (err baseError) Withf(format string, args ...any) Error { diff --git a/internal/gperr/hint.go b/internal/gperr/hint.go index 95c87d1..f982460 100644 --- a/internal/gperr/hint.go +++ b/internal/gperr/hint.go @@ -31,7 +31,7 @@ func (h *Hint) String() string { return h.Error() } -func DoYouMean(s string) *Hint { +func DoYouMean(s string) error { if s == "" { return nil } diff --git a/internal/gperr/nested_error.go b/internal/gperr/nested_error.go index 8877804..7b620c3 100644 --- a/internal/gperr/nested_error.go +++ b/internal/gperr/nested_error.go @@ -78,8 +78,10 @@ func (err *nestedError) fmtError(appendLine appendLineFunc) []byte { } if err.Err != nil { buf := appendLine(nil, err.Err, 0) - buf = append(buf, '\n') - buf = appendLines(buf, err.Extras, 1, appendLine) + if len(err.Extras) > 0 { + buf = append(buf, '\n') + buf = appendLines(buf, err.Extras, 1, appendLine) + } return buf } return appendLines(nil, err.Extras, 0, appendLine) diff --git a/internal/gperr/utils.go b/internal/gperr/utils.go index 6dd1bb7..b39127b 100644 --- a/internal/gperr/utils.go +++ b/internal/gperr/utils.go @@ -87,6 +87,9 @@ func Join(errors ...error) Error { func JoinLines(main error, errors ...string) Error { errs := make([]error, len(errors)) for i, err := range errors { + if err == "" { + continue + } errs[i] = newError(err) } return &nestedError{Err: main, Extras: errs}