From ceb4d0853afe572a7b4688b647d7cf1a38d673b1 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Tue, 15 Jan 2019 15:26:44 -0800 Subject: [PATCH] Some minor cleanup (dotnet/aspnetcore-tooling#123) \n\nCommit migrated from https://github.com/dotnet/aspnetcore-tooling/commit/97930b91f8040d121dce3407256cb086465591c9 --- ...faultRazorIntermediateNodeLoweringPhase.cs | 62 ++++++++++++------- .../src/Syntax/SyntaxNodeExtensions.cs | 2 +- 2 files changed, 40 insertions(+), 24 deletions(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs index b92fea9890..395dc97d11 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultRazorIntermediateNodeLoweringPhase.cs @@ -751,7 +751,6 @@ namespace Microsoft.AspNetCore.Razor.Language var context = node.GetSpanContext(); if (context != null && context.ChunkGenerator == SpanChunkGenerator.Null) { - base.VisitMarkupTextLiteral(node); return; } @@ -763,11 +762,48 @@ namespace Microsoft.AspNetCore.Razor.Language token.Content.Length == 0) { // We don't want to create IR nodes for marker tokens. - base.VisitMarkupTextLiteral(node); return; } } + VisitHtmlContent(node); + } + + public override void VisitMarkupStartTag(MarkupStartTagSyntax node) + { + if (node.IsMarkupTransition) + { + // No need to visit tags. + return; + } + + foreach (var child in node.Children) + { + Visit(child); + } + } + + public override void VisitMarkupEndTag(MarkupEndTagSyntax node) + { + if (node.IsMarkupTransition) + { + // No need to visit tags. + return; + } + + foreach (var child in node.Children) + { + Visit(child); + } + } + + private void VisitHtmlContent(SyntaxNode node) + { + if (node == null || (node is SyntaxToken token && token.IsMissing)) + { + return; + } + var source = BuildSourceSpanFromNode(node); var currentChildren = _builder.Current.Children; if (currentChildren.Count > 0 && currentChildren[currentChildren.Count - 1] is HtmlContentIntermediateNode) @@ -777,7 +813,6 @@ namespace Microsoft.AspNetCore.Razor.Language if (existingHtmlContent.Source == null && source == null) { Combine(existingHtmlContent, node); - base.VisitMarkupTextLiteral(node); return; } @@ -787,7 +822,6 @@ namespace Microsoft.AspNetCore.Razor.Language existingHtmlContent.Source.Value.AbsoluteIndex + existingHtmlContent.Source.Value.Length == source.Value.AbsoluteIndex) { Combine(existingHtmlContent, node); - base.VisitMarkupTextLiteral(node); return; } } @@ -806,24 +840,6 @@ namespace Microsoft.AspNetCore.Razor.Language }); _builder.Pop(); - - base.VisitMarkupTextLiteral(node); - } - - public override void VisitMarkupStartTag(MarkupStartTagSyntax node) - { - foreach (var child in node.Children) - { - Visit(child); - } - } - - public override void VisitMarkupEndTag(MarkupEndTagSyntax node) - { - foreach (var child in node.Children) - { - Visit(child); - } } public override void VisitMarkupTagHelperElement(MarkupTagHelperElementSyntax node) @@ -1140,7 +1156,7 @@ namespace Microsoft.AspNetCore.Razor.Language // just process the attributes. // // Visit the attributes - foreach (var block in node.Children) + foreach (var block in node.Attributes) { if (block is MarkupAttributeBlockSyntax attribute) { diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs index 1b916ea75e..626eac6d29 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs @@ -216,7 +216,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Syntax throw new ArgumentNullException(nameof(node)); } - var tokens = node.DescendantNodes().Where(n => n.IsToken).Cast(); + var tokens = node.DescendantNodesAndSelf().Where(n => n.IsToken).Cast(); var content = string.Concat(tokens.Select(t => t.Content)); return content; }