diff --git a/index/resolver.go b/index/resolver.go index 088f129..5815c64 100644 --- a/index/resolver.go +++ b/index/resolver.go @@ -4,6 +4,7 @@ package index import ( + "errors" "fmt" "github.com/pb33f/libopenapi/utils" "golang.org/x/exp/slices" @@ -32,8 +33,14 @@ func (r *ResolvingError) Error() string { errs := utils.UnwrapErrors(r.ErrorRef) var msgs []string for _, e := range errs { - msgs = append(msgs, fmt.Sprintf("%s: %s [%d:%d]", e.Error(), - r.Path, r.Node.Line, r.Node.Column)) + var idxErr *IndexingError + if errors.As(e, &idxErr) { + msgs = append(msgs, fmt.Sprintf("%s: %s [%d:%d]", idxErr.Error(), + idxErr.Path, idxErr.Node.Line, idxErr.Node.Column)) + } else { + msgs = append(msgs, fmt.Sprintf("%s: %s [%d:%d]", e.Error(), + r.Path, r.Node.Line, r.Node.Column)) + } } return strings.Join(msgs, "\n") } diff --git a/index/resolver_test.go b/index/resolver_test.go index ba38a22..31e0904 100644 --- a/index/resolver_test.go +++ b/index/resolver_test.go @@ -44,6 +44,43 @@ func TestResolvingError_Error(t *testing.T) { assert.Equal(t, "test2: $.test2 [1:1]", errs[1].Error()) } +func TestResolvingError_Error_Index(t *testing.T) { + + errs := []error{ + &ResolvingError{ + ErrorRef: errors.Join(&IndexingError{ + Path: "$.test1", + Err: errors.New("test1"), + Node: &yaml.Node{ + Line: 1, + Column: 1, + }, + }), + Node: &yaml.Node{ + Line: 1, + Column: 1, + }, + }, + &ResolvingError{ + ErrorRef: errors.Join(&IndexingError{ + Path: "$.test2", + Err: errors.New("test2"), + Node: &yaml.Node{ + Line: 1, + Column: 1, + }, + }), + Node: &yaml.Node{ + Line: 1, + Column: 1, + }, + }, + } + + assert.Equal(t, "test1: $.test1 [1:1]", errs[0].Error()) + assert.Equal(t, "test2: $.test2 [1:1]", errs[1].Error()) +} + func Benchmark_ResolveDocumentStripe(b *testing.B) { baseDir := "../test_specs/stripe.yaml" resolveFile, _ := os.ReadFile(baseDir)