StringInterpolationDefaultHandler (green) pins the
DefaultInterpolatedStringHandler shapes the decompiler already folds
back into interpolated strings on Roslyn 4 / .NET Core targets:
multi-hole strings, literals, alignment and format specifiers, nested
interpolations, ternary holes, char/bool/span/generic/nullable/object
values, constant holes, and interpolations inside concatenations and
branches.
InterpolatedStringHandlers is Assert.Ignore'd because custom
[InterpolatedStringHandler] call sites are not folded back yet (#829):
calls lowered to handler ctor + Append* + call remain raw, including
[InterpolatedStringHandlerArgument] receiver/parameter wiring, the
trailing out-bool ctor (conditional evaluation), and bool-returning
Append chains. The fixture is the desired output; the handler type
declarations themselves already round-trip. It also captures three
DefaultInterpolatedStringHandler shapes that leak: the three-arg
IFormatProvider ctor with string.Create, the four-arg ctor with a
stackalloc initial buffer, and a ReadOnlySpan<char> hole with
alignment. All four Roslyn 4.14/latest debug/opt configs compile the
fixture and fail only at the output comparison; the leaked output
recompiles cleanly.
Assisted-by: Claude:claude-fable-5:Claude Code