From 02675da46744594d7e1b8b375e445769324e7b39 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Wed, 8 Feb 2017 13:41:27 -0800 Subject: [PATCH] Handle single line directives properly --- .../Legacy/CSharpCodeParser.cs | 1 + .../Legacy/CSharpDirectivesTest.cs | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/CSharpCodeParser.cs b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/CSharpCodeParser.cs index 16098b483a..373f2af6ea 100644 --- a/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/CSharpCodeParser.cs +++ b/src/Microsoft.AspNetCore.Razor.Evolution/Legacy/CSharpCodeParser.cs @@ -1568,6 +1568,7 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy { case DirectiveDescriptorKind.SingleLine: Optional(CSharpSymbolType.Semicolon); + AcceptWhile(IsSpacingToken(includeNewLines: false, includeComments: true)); if (At(CSharpSymbolType.NewLine)) { diff --git a/test/Microsoft.AspNetCore.Razor.Evolution.Test/Legacy/CSharpDirectivesTest.cs b/test/Microsoft.AspNetCore.Razor.Evolution.Test/Legacy/CSharpDirectivesTest.cs index 31ca99f5c0..348a0739a5 100644 --- a/test/Microsoft.AspNetCore.Razor.Evolution.Test/Legacy/CSharpDirectivesTest.cs +++ b/test/Microsoft.AspNetCore.Razor.Evolution.Test/Legacy/CSharpDirectivesTest.cs @@ -218,6 +218,27 @@ namespace Microsoft.AspNetCore.Razor.Evolution.Legacy expectedErorr); } + [Fact] + public void DirectiveDescriptor_NoErrorsSemicolonAfterDirective() + { + // Arrange + var descriptor = DirectiveDescriptorBuilder.Create("custom").AddString().Build(); + + // Act & Assert + ParseCodeBlockTest( + "@custom hello ; ", + new[] { descriptor }, + new DirectiveBlock( + new DirectiveChunkGenerator(descriptor), + Factory.CodeTransition(), + Factory.MetaCode("custom").Accepts(AcceptedCharacters.None), + Factory.Span(SpanKind.Markup, " ", markup: false).Accepts(AcceptedCharacters.WhiteSpace), + Factory.Span(SpanKind.Markup, "hello", markup: false) + .With(new DirectiveTokenChunkGenerator(descriptor.Tokens[0])) + .Accepts(AcceptedCharacters.NonWhiteSpace), + Factory.Span(SpanKind.Markup, " ; ", markup: false).Accepts(AcceptedCharacters.WhiteSpace))); + } + [Fact] public void DirectiveDescriptor_ErrorsExtraContentAfterDirective() {