From 73ca91f603a5091b6a2ade740cd1d4fe87d4e773 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Thu, 7 Feb 2019 14:04:57 -0800 Subject: [PATCH] Handle multiple nested sections correctly (dotnet/aspnetcore-tooling#196) \n\nCommit migrated from https://github.com/dotnet/aspnetcore-tooling/commit/26e8d86b2164ab1b324df935b8387872bd4d42b1 --- .../src/DefaultDirectiveSyntaxTreePass.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultDirectiveSyntaxTreePass.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultDirectiveSyntaxTreePass.cs index 8455c9e197..7f567b1109 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultDirectiveSyntaxTreePass.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/DefaultDirectiveSyntaxTreePass.cs @@ -65,15 +65,23 @@ namespace Microsoft.AspNetCore.Razor.Language public override SyntaxNode VisitRazorDirective(RazorDirectiveSyntax node) { - if (_nestedLevel > 0) + if (node.DirectiveDescriptor?.Directive != SectionDirective.Directive.Directive) + { + // We only want to track the nesting of section directives. + return base.VisitRazorDirective(node); + } + + _nestedLevel++; + var result = (RazorDirectiveSyntax)base.VisitRazorDirective(node); + + if (_nestedLevel > 1) { var directiveStart = node.Transition.GetSourceLocation(_syntaxTree.Source); var errorLength = /* @ */ 1 + SectionDirective.Directive.Directive.Length; var error = RazorDiagnosticFactory.CreateParsing_SectionsCannotBeNested(new SourceSpan(directiveStart, errorLength)); - node = node.AppendDiagnostic(error); + result = result.AppendDiagnostic(error); } - _nestedLevel++; - var result = base.VisitRazorDirective(node); + _nestedLevel--; return result;