diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentWhitespacePass.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentWhitespacePass.cs index 2713f96de8..0cc0e117e9 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentWhitespacePass.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Components/ComponentWhitespacePass.cs @@ -77,8 +77,11 @@ namespace Microsoft.AspNetCore.Razor.Language.Components break; case CSharpCodeIntermediateNode codeIntermediateNode: + // A C# code node could be empty. We can't remove them, but we can skip them. shouldRemoveNode = false; - shouldContinueIteration = ComponentDocumentClassifierPass.IsBuildRenderTreeBaseCall(codeIntermediateNode); + shouldContinueIteration = + IsEmpty(codeIntermediateNode) || + ComponentDocumentClassifierPass.IsBuildRenderTreeBaseCall(codeIntermediateNode); break; default: @@ -110,5 +113,18 @@ namespace Microsoft.AspNetCore.Razor.Language.Components Forwards, Backwards } + + private static bool IsEmpty(CSharpCodeIntermediateNode node) + { + for (var i = 0; i < node.Children.Count; i++) + { + if (!(node.Children[i] is IntermediateToken token && string.IsNullOrWhiteSpace(token.Content))) + { + return false; + } + } + + return true; + } } }