From cf6b1d7135e1003f6839306ab214165ef1ea1154 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Thu, 6 Dec 2018 01:12:07 -0800 Subject: [PATCH] Correct logic for GetTagName \n\nCommit migrated from https://github.com/dotnet/aspnetcore-tooling/commit/72a389149acd31b7e28546b004b6bb7186fbe3c6 --- .../src/Legacy/TagHelperParseTreeRewriter.cs | 4 +-- .../src/Syntax/SyntaxNodeExtensions.cs | 32 ++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs index ca0bc08809..c46a0b0bab 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/TagHelperParseTreeRewriter.cs @@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy var tagName = startTag.GetTagName(); // Could not determine tag name, it can't be a TagHelper, continue on and track the element. - if (tagName == null) + if (tagName == null || tagName.StartsWith("!")) { return false; } @@ -288,7 +288,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy rewritten = null; var tagName = tagBlock.GetTagName(); // Could not determine tag name, it can't be a TagHelper, continue on and track the element. - if (tagName == null) + if (tagName == null || tagName.StartsWith("!")) { return false; } 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 521bb4ed79..b696e221da 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Syntax/SyntaxNodeExtensions.cs @@ -243,15 +243,33 @@ namespace Microsoft.AspNetCore.Razor.Language.Syntax throw new ArgumentNullException(nameof(tagBlock)); } - if (tagBlock.Children.Count == 0 || !(tagBlock.Children[0] is MarkupTextLiteralSyntax childLiteral)) + MarkupTextLiteralSyntax nameLiteral = null; + var isBangTag = false; + if (tagBlock.Children.Count > 0 && tagBlock.Children[0] is MarkupTextLiteralSyntax firstChild) + { + if (firstChild.GetContent().StartsWith("<") && + tagBlock.Children.Count >= 3 && + tagBlock.Children[1] is RazorMetaCodeSyntax && + tagBlock.Children[2] is MarkupTextLiteralSyntax potentialBangTagName) + { + isBangTag = true; + nameLiteral = potentialBangTagName; + } + else + { + nameLiteral = firstChild; + } + } + + if (nameLiteral == null) { return null; } SyntaxToken textToken = null; - for (var i = 0; i < childLiteral.LiteralTokens.Count; i++) + for (var i = 0; i < nameLiteral.LiteralTokens.Count; i++) { - var token = childLiteral.LiteralTokens[i]; + var token = nameLiteral.LiteralTokens[i]; if (token != null && (token.Kind == SyntaxKind.Whitespace || token.Kind == SyntaxKind.Text)) @@ -266,7 +284,13 @@ namespace Microsoft.AspNetCore.Razor.Language.Syntax return null; } - return textToken.Kind == SyntaxKind.Whitespace ? null : textToken.Content; + var name = textToken.Kind == SyntaxKind.Whitespace ? null : textToken.Content; + if (name != null && isBangTag) + { + name = "!" + name; + } + + return name; } public static bool IsSelfClosing(this MarkupTagBlockSyntax tagBlock)