[Fixes #428] Removed newlines at the end of razor comments

This commit is contained in:
Ajay Bhargav Baaskaran 2015-08-11 19:39:32 -07:00
parent b6765d370c
commit 71c4c8dac6
3 changed files with 252 additions and 5 deletions

View File

@ -134,12 +134,35 @@ namespace Microsoft.AspNet.Razor.Parser
{
if (last != null)
{
// Don't render the whitespace between the start of the line and the razor comment.
if (startOfLine && last.Type == HtmlSymbolType.WhiteSpace)
{
AddMarkerSymbolIfNecessary();
// Output the symbols that may have been accepted prior to the whitespace.
Output(SpanKind.Markup);
Span.ChunkGenerator = SpanChunkGenerator.Null;
}
Accept(last);
last = null;
}
AddMarkerSymbolIfNecessary();
Output(SpanKind.Markup);
RazorComment();
// Handle the whitespace and newline at the end of a razor comment.
if (startOfLine &&
(At(HtmlSymbolType.NewLine) ||
(At(HtmlSymbolType.WhiteSpace) && NextIs(HtmlSymbolType.NewLine))))
{
AcceptWhile(IsSpacingToken(includeNewLines: false));
AcceptAndMoveNext();
Span.ChunkGenerator = SpanChunkGenerator.Null;
Output(SpanKind.Markup);
}
}
else
{

View File

@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNet.Razor.Chunks.Generators;
using Microsoft.AspNet.Razor.Parser;
using Microsoft.AspNet.Razor.Parser.SyntaxTree;
using Microsoft.AspNet.Razor.Test.Framework;
@ -128,7 +129,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
new MarkupBlock(
new MarkupTagBlock(
Factory.MarkupTransition("<text").Accepts(AcceptedCharacters.Any)),
Factory.Markup(Environment.NewLine + " ").Accepts(AcceptedCharacters.None),
Factory.Markup(Environment.NewLine).Accepts(AcceptedCharacters.None),
Factory.Markup(" ").With(SpanChunkGenerator.Null),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
@ -143,7 +145,8 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine + "}")))),
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
Factory.Markup("}")))),
new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, 6 + Environment.NewLine.Length, 1, 4),
new RazorError(RazorResources.FormatParseError_MissingEndTag("text"), 6 + Environment.NewLine.Length, 1, 4),
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
@ -173,5 +176,227 @@ namespace Microsoft.AspNet.Razor.Test.Parser.CSharp
new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 2, 0, 2),
new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
}
[Fact]
public void RazorCommentInMarkup()
{
ParseDocumentTest(
"<p>" + Environment.NewLine
+ "@**@" + Environment.NewLine
+ "</p>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<p>")),
Factory.Markup(Environment.NewLine),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
string.Empty,
HtmlSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
new MarkupTagBlock(
Factory.Markup("</p>"))
));
}
[Fact]
public void MultipleRazorCommentInMarkup()
{
ParseDocumentTest(
"<p>" + Environment.NewLine
+ " @**@ " + Environment.NewLine
+ "@**@" + Environment.NewLine
+ "</p>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<p>")),
Factory.Markup(Environment.NewLine),
Factory.Markup(" ").With(SpanChunkGenerator.Null),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
string.Empty,
HtmlSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(" " + Environment.NewLine).With(SpanChunkGenerator.Null),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
string.Empty,
HtmlSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
new MarkupTagBlock(
Factory.Markup("</p>"))
));
}
[Fact]
public void MultipleRazorCommentsInSameLineInMarkup()
{
ParseDocumentTest(
"<p>" + Environment.NewLine
+ "@**@ @**@" + Environment.NewLine
+ "</p>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<p>")),
Factory.Markup(Environment.NewLine),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
string.Empty,
HtmlSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.EmptyHtml(),
Factory.Markup(" ").With(SpanChunkGenerator.Null),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
string.Empty,
HtmlSymbolType.Unknown))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
new MarkupTagBlock(
Factory.Markup("</p>"))
));
}
[Fact]
public void RazorCommentsSurroundingMarkup()
{
ParseDocumentTest(
"<p>" + Environment.NewLine
+ "@* hello *@ content @* world *@" + Environment.NewLine
+ "</p>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<p>")),
Factory.Markup(Environment.NewLine),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
" hello ",
HtmlSymbolType.RazorComment))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(" content "),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
" world ",
HtmlSymbolType.RazorComment))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine),
new MarkupTagBlock(
Factory.Markup("</p>"))
));
}
[Fact]
public void RazorCommentWithExtraNewLineInMarkup()
{
ParseDocumentTest(
"<p>" + Environment.NewLine + Environment.NewLine
+ "@* content *@" + Environment.NewLine
+ "@*" + Environment.NewLine
+ "content" + Environment.NewLine
+ "*@" + Environment.NewLine + Environment.NewLine
+ "</p>",
new MarkupBlock(
new MarkupTagBlock(
Factory.Markup("<p>")),
Factory.Markup(Environment.NewLine + Environment.NewLine),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
" content ",
HtmlSymbolType.RazorComment))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
new CommentBlock(
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.Span(SpanKind.Comment, new HtmlSymbol(
Factory.LocationTracker.CurrentLocation,
Environment.NewLine + "content" + Environment.NewLine,
HtmlSymbolType.RazorComment))
.Accepts(AcceptedCharacters.Any),
Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
.Accepts(AcceptedCharacters.None),
Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
.Accepts(AcceptedCharacters.None)),
Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
Factory.Markup(Environment.NewLine),
new MarkupTagBlock(
Factory.Markup("</p>"))
));
}
}
}

View File

@ -156,9 +156,8 @@ WriteTo(__razor_template_writer, item);
#line default
#line hidden
Instrumentation.BeginContext(574, 93, true);
WriteLiteralTo(__razor_template_writer, "\r\n <ul>\r\n <li>Child Items... ?</li>\r\n \r\n </ul" +
">\r\n </li>");
Instrumentation.BeginContext(574, 79, true);
WriteLiteralTo(__razor_template_writer, "\r\n <ul>\r\n <li>Child Items... ?</li>\r\n </ul>\r\n </li>");
Instrumentation.EndContext();
}
)