@@ -108,6 +108,8 @@ func (e *assertionFailureError) Error() string {
108108const (
109109 runtimeErrorTypeBase = "RuntimeError"
110110 runtimeErrorTypeAssertion = "AssertionError"
111+ runtimeErrorFrameHead = 8
112+ runtimeErrorFrameTail = 8
111113)
112114
113115var (
@@ -123,18 +125,32 @@ func (re *RuntimeError) Error() string {
123125 b .WriteString ("\n " )
124126 b .WriteString (re .CodeFrame )
125127 }
126- for _ , frame := range re .Frames {
127- // Show position if line number is valid (1-based)
128+ renderFrame := func (frame StackFrame ) {
128129 if frame .Pos .Line > 0 && frame .Pos .Column > 0 {
129130 fmt .Fprintf (& b , "\n at %s (%d:%d)" , frame .Function , frame .Pos .Line , frame .Pos .Column )
130131 } else if frame .Pos .Line > 0 {
131- // Line valid but column missing
132132 fmt .Fprintf (& b , "\n at %s (line %d)" , frame .Function , frame .Pos .Line )
133133 } else {
134- // No position information available
135134 fmt .Fprintf (& b , "\n at %s" , frame .Function )
136135 }
137136 }
137+
138+ if len (re .Frames ) <= runtimeErrorFrameHead + runtimeErrorFrameTail {
139+ for _ , frame := range re .Frames {
140+ renderFrame (frame )
141+ }
142+ return b .String ()
143+ }
144+
145+ for _ , frame := range re .Frames [:runtimeErrorFrameHead ] {
146+ renderFrame (frame )
147+ }
148+ omitted := len (re .Frames ) - (runtimeErrorFrameHead + runtimeErrorFrameTail )
149+ fmt .Fprintf (& b , "\n ... %d frames omitted ..." , omitted )
150+ for _ , frame := range re .Frames [len (re .Frames )- runtimeErrorFrameTail :] {
151+ renderFrame (frame )
152+ }
153+
138154 return b .String ()
139155}
140156
0 commit comments