diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveIRPass.cs b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveIRPass.cs index 60dcd061ce..f2dd916c25 100644 --- a/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveIRPass.cs +++ b/src/Microsoft.AspNetCore.Razor.Evolution/DefaultDirectiveIRPass.cs @@ -50,8 +50,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution { if (string.Equals(node.Name, CSharpCodeParser.FunctionsDirectiveDescriptor.Name, StringComparison.Ordinal)) { - node.Parent.Children.Remove(node); - foreach (var child in node.Children.Except(node.Tokens)) { child.Parent = _classNode; @@ -60,8 +58,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution } else if (string.Equals(node.Name, CSharpCodeParser.InheritsDirectiveDescriptor.Name, StringComparison.Ordinal)) { - node.Parent.Children.Remove(node); - var token = node.Tokens.FirstOrDefault(); if (token != null) @@ -72,7 +68,6 @@ namespace Microsoft.AspNetCore.Razor.Evolution else if (string.Equals(node.Name, CSharpCodeParser.SectionDirectiveDescriptor.Name, StringComparison.Ordinal)) { var sectionIndex = node.Parent.Children.IndexOf(node); - node.Parent.Children.Remove(node); var defineSectionEndStatement = new CSharpStatementIRNode() { @@ -94,18 +89,8 @@ namespace Microsoft.AspNetCore.Razor.Evolution node.Parent.Children.Insert(sectionIndex, defineSectionStartStatement); } - else if (string.Equals(node.Name, CSharpCodeParser.AddTagHelperDirectiveDescriptor.Name, StringComparison.Ordinal)) - { - node.Parent.Children.Remove(node); - } - else if (string.Equals(node.Name, CSharpCodeParser.RemoveTagHelperDirectiveDescriptor.Name, StringComparison.Ordinal)) - { - node.Parent.Children.Remove(node); - } - else if (string.Equals(node.Name, CSharpCodeParser.TagHelperPrefixDirectiveDescriptor.Name, StringComparison.Ordinal)) - { - node.Parent.Children.Remove(node); - } + + node.Parent.Children.Remove(node); } } } diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs index 54456f8436..936ed291ab 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/DefaultDirectiveIRPassTest.cs @@ -167,6 +167,41 @@ namespace Microsoft.AspNetCore.Razor.Evolution node => CSharpStatement("});", node)); } + [Fact] + public void Execute_Custom_RemovesDirectiveIRNodeFromIRDocument() + { + // Arrange + var content = "@custom Hello"; + var sourceDocument = TestRazorSourceDocument.Create(content); + var codeDocument = RazorCodeDocument.Create(sourceDocument); + var defaultEngine = RazorEngine.Create(b => + { + var customDirective = DirectiveDescriptorBuilder.Create("custom").AddString().Build(); + b.AddDirective(customDirective); + }); + var originalIRDocument = Lower(codeDocument, defaultEngine); + var pass = new DefaultDirectiveIRPass() + { + Engine = defaultEngine, + }; + + // Act + var irDocument = pass.Execute(codeDocument, originalIRDocument); + + // Assert + Children(irDocument, + node => Assert.IsType(node), + node => Assert.IsType(node)); + var @namespace = irDocument.Children[1]; + Children(@namespace, + node => Assert.IsType(node), + node => Assert.IsType(node), + node => Assert.IsType(node)); + var @class = @namespace.Children[2]; + var method = SingleChild(@class); + Assert.Empty(method.Children); + } + private static DocumentIRNode Lower(RazorCodeDocument codeDocument) { var engine = RazorEngine.Create();