diff --git a/.changeset/few-bikes-cheer.md b/.changeset/few-bikes-cheer.md new file mode 100644 index 0000000000..e1361cecc7 --- /dev/null +++ b/.changeset/few-bikes-cheer.md @@ -0,0 +1,5 @@ +--- +"effect": patch +--- + +add span stack trace to rendered causes diff --git a/packages/effect/src/internal/cause.ts b/packages/effect/src/internal/cause.ts index b7bc12babf..61ac666ad0 100644 --- a/packages/effect/src/internal/cause.ts +++ b/packages/effect/src/internal/cause.ts @@ -994,7 +994,11 @@ export const pretty = (cause: Cause.Cause): string => { let current: Span | AnySpan | undefined = e.span let i = 0 while (current && current._tag === "Span" && i < 10) { + const stack = current.attributes.get("code.stacktrace") message += `\r\n at ${current.name}` + if (typeof stack === "string") { + message += `\r\n ${filterStack(stack)}` + } current = Option.getOrUndefined(current.parent) i++ } diff --git a/packages/effect/test/Effect/cause-rendering.test.ts b/packages/effect/test/Effect/cause-rendering.test.ts index 93d805d4e4..dc1ff04017 100644 --- a/packages/effect/test/Effect/cause-rendering.test.ts +++ b/packages/effect/test/Effect/cause-rendering.test.ts @@ -16,7 +16,9 @@ describe("Effect", () => { ))) const rendered = Cause.pretty(cause) assert.include(rendered, "spanA") + assert.include(rendered, "cause-rendering.test.ts:12") assert.include(rendered, "spanB") + assert.include(rendered, "cause-rendering.test.ts:11") })) it.effect("catchTag should not invalidate traces", () => Effect.gen(function*($) {