diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpRazorCommentsTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpRazorCommentsTest.cs
index eb626f3abe..d9aa3aa40c 100644
--- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpRazorCommentsTest.cs
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpRazorCommentsTest.cs
@@ -8,102 +8,34 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
public class CSharpRazorCommentsTest : CsHtmlMarkupParserTestBase
{
+ public CSharpRazorCommentsTest()
+ {
+ UseBaselineTests = true;
+ }
+
[Fact]
public void UnterminatedRazorComment()
{
- ParseDocumentTest("@*",
- new MarkupBlock(
- Factory.EmptyHtml(),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(
- SpanKindInternal.Comment,
- new HtmlSymbol(
- string.Empty,
- HtmlSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any))),
- RazorDiagnosticFactory.CreateParsing_RazorCommentNotTerminated(
- new SourceSpan(SourceLocation.Zero, contentLength: 2)));
+ ParseDocumentTest("@*");
}
[Fact]
public void EmptyRazorComment()
{
- ParseDocumentTest("@**@",
- new MarkupBlock(
- Factory.EmptyHtml(),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- string.Empty,
- HtmlSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml()));
+ ParseDocumentTest("@**@");
}
[Fact]
public void RazorCommentInImplicitExpressionMethodCall()
{
ParseDocumentTest("@foo(" + Environment.NewLine
- + "@**@" + Environment.NewLine,
- new MarkupBlock(
- Factory.EmptyHtml(),
- new ExpressionBlock(
- Factory.CodeTransition(),
- Factory.Code("foo(" + Environment.NewLine)
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords),
- new CommentBlock(
- Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new CSharpSymbol(
- string.Empty,
- CSharpSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Code(Environment.NewLine)
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords))),
- RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF(
- new SourceSpan(new SourceLocation(4, 0, 4), contentLength: 1), "(", ")"));
+ + "@**@" + Environment.NewLine);
}
[Fact]
public void UnterminatedRazorCommentInImplicitExpressionMethodCall()
{
- ParseDocumentTest("@foo(@*",
- new MarkupBlock(
- Factory.EmptyHtml(),
- new ExpressionBlock(
- Factory.CodeTransition(),
- Factory.Code("foo(")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords),
- new CommentBlock(
- Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new CSharpSymbol(
- string.Empty,
- CSharpSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any)))),
- RazorDiagnosticFactory.CreateParsing_RazorCommentNotTerminated(
- new SourceSpan(new SourceLocation(5, 0, 5), contentLength: 2)),
- RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF(
- new SourceSpan(new SourceLocation(4, 0, 4), contentLength: 1), "(", ")"));
+ ParseDocumentTest("@foo(@*");
}
[Fact]
@@ -112,66 +44,13 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
ParseDocumentTest("@{" + Environment.NewLine
+ " " + Environment.NewLine
+ "@**@" + Environment.NewLine
- + "
",
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup(Environment.NewLine),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- string.Empty,
- HtmlSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
- new MarkupTagBlock(
- Factory.Markup("
"))
- ));
+ + "");
}
[Fact]
@@ -211,43 +69,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
"" + Environment.NewLine
+ " @**@ " + Environment.NewLine
+ "@**@" + Environment.NewLine
- + "
",
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup(Environment.NewLine),
- Factory.Markup(" ").With(SpanChunkGenerator.Null),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- string.Empty,
- HtmlSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" " + Environment.NewLine).With(SpanChunkGenerator.Null),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- string.Empty,
- HtmlSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
- new MarkupTagBlock(
- Factory.Markup("
"))
- ));
+ + "");
}
[Fact]
@@ -256,43 +78,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
ParseDocumentTest(
"" + Environment.NewLine
+ "@**@ @**@" + Environment.NewLine
- + "
",
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup(Environment.NewLine),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- string.Empty,
- HtmlSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.EmptyHtml(),
- Factory.Markup(" ").With(SpanChunkGenerator.Null),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- string.Empty,
- HtmlSymbolType.Unknown))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
- new MarkupTagBlock(
- Factory.Markup("
"))
- ));
+ + "");
}
[Fact]
@@ -301,42 +87,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
ParseDocumentTest(
"" + Environment.NewLine
+ "@* hello *@ content @* world *@" + Environment.NewLine
- + "
",
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup(Environment.NewLine),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- " hello ",
- HtmlSymbolType.RazorComment))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" content "),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- " world ",
- HtmlSymbolType.RazorComment))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine),
- new MarkupTagBlock(
- Factory.Markup("
"))
- ));
+ + "");
}
[Fact]
@@ -348,43 +99,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ "@*" + Environment.NewLine
+ "content" + Environment.NewLine
+ "*@" + Environment.NewLine + Environment.NewLine
- + "",
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("")),
- Factory.Markup(Environment.NewLine + Environment.NewLine),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- " content ",
- HtmlSymbolType.RazorComment))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
- new CommentBlock(
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.Span(SpanKindInternal.Comment, new HtmlSymbol(
- Environment.NewLine + "content" + Environment.NewLine,
- HtmlSymbolType.RazorComment))
- .Accepts(AcceptedCharactersInternal.Any),
- Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
- .Accepts(AcceptedCharactersInternal.None),
- Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
- .Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
- Factory.Markup(Environment.NewLine),
- new MarkupTagBlock(
- Factory.Markup("
"))
- ));
+ + "");
}
}
}
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpReservedWordsTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpReservedWordsTest.cs
index 7248a798bc..57ac9757fc 100644
--- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpReservedWordsTest.cs
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpReservedWordsTest.cs
@@ -11,35 +11,17 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
UseBaselineTests = true;
}
-
- [Theory]
- [InlineData("namespace")]
- [InlineData("class")]
- public void ReservedWords(string word)
+
+ [Fact]
+ public void ReservedWord()
{
- ParseBlockTest(word,
- new DirectiveBlock(
- Factory.MetaCode(word).Accepts(AcceptedCharactersInternal.None)
- ),
- RazorDiagnosticFactory.CreateParsing_ReservedWord(
- new SourceSpan(SourceLocation.Zero, word.Length), word));
+ ParseBlockTest("namespace");
}
- [Theory]
- [InlineData("Namespace")]
- [InlineData("Class")]
- [InlineData("NAMESPACE")]
- [InlineData("CLASS")]
- [InlineData("nameSpace")]
- [InlineData("NameSpace")]
- private void ReservedWordsAreCaseSensitive(string word)
+ [Fact]
+ private void ReservedWordIsCaseSensitive()
{
- ParseBlockTest(word,
- new ExpressionBlock(
- Factory.Code(word)
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
- .Accepts(AcceptedCharactersInternal.NonWhiteSpace)
- ));
+ ParseBlockTest("NameSpace");
}
}
}
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpToMarkupSwitchTest.cs b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpToMarkupSwitchTest.cs
index 1d96a65590..adf71262af 100644
--- a/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpToMarkupSwitchTest.cs
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/Legacy/CSharpToMarkupSwitchTest.cs
@@ -8,40 +8,21 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
public class CSharpToMarkupSwitchTest : CsHtmlCodeParserTestBase
{
+ public CSharpToMarkupSwitchTest()
+ {
+ UseBaselineTests = true;
+ }
+
[Fact]
public void SingleAngleBracketDoesNotCauseSwitchIfOuterBlockIsTerminated()
{
- ParseBlockTest("{ List< }",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(" List< ")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)));
+ ParseBlockTest("{ List< }");
}
[Fact]
public void ParseBlockGivesSpacesToCodeOnAtTagTemplateTransitionInDesignTimeMode()
{
- ParseBlockTest("Foo( @Foo
)",
- new ExpressionBlock(
- Factory.Code("Foo( ")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
- .Accepts(AcceptedCharactersInternal.Any),
- new TemplateBlock(
- new MarkupBlock(
- Factory.MarkupTransition(),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None))
- )
- ),
- Factory.Code(" )")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
- .Accepts(AcceptedCharactersInternal.NonWhiteSpace)
- ), designTime: true);
+ ParseBlockTest("Foo( @Foo
)", designTime: true);
}
[Fact]
@@ -49,21 +30,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseBlockTest("Foo( " + Environment.NewLine
+ "@:Foo
" + Environment.NewLine
- + ")",
- new ExpressionBlock(
- Factory.Code("Foo( " + Environment.NewLine).AsImplicitExpression(CSharpCodeParser.DefaultKeywords),
- new TemplateBlock(
- new MarkupBlock(
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Foo
" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- )
- ),
- Factory.Code(")")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
- .Accepts(AcceptedCharactersInternal.NonWhiteSpace)
- ), designTime: true);
+ + ")", designTime: true);
}
[Fact]
@@ -71,22 +38,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseBlockTest("{" + Environment.NewLine
+ " Foo
" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(Environment.NewLine + " ")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None))
- ),
- Factory.Code(" " + Environment.NewLine).AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)
- ), designTime: true);
+ + "}", designTime: true);
}
[Fact]
@@ -94,25 +46,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseBlockTest("{" + Environment.NewLine
+ " @Foo
" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(Environment.NewLine + " ")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- Factory.MarkupTransition(),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None))
- ),
- Factory.Code(" " + Environment.NewLine).AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)
- ), true,
- RazorDiagnosticFactory.CreateParsing_AtInCodeMustBeFollowedByColonParenOrIdentifierStart(
- new SourceSpan(new SourceLocation(5 + Environment.NewLine.Length, 1, 4), contentLength: 1)));
+ + "}", designTime: true);
}
[Fact]
@@ -120,21 +54,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseBlockTest("{" + Environment.NewLine
+ " @:Foo
" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(Environment.NewLine + " ")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Foo
" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.EmptyCSharp().AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)
- ), designTime: true);
+ + "}", designTime: true);
}
[Fact]
@@ -142,32 +62,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
ParseBlockTest("Repeat(10," + Environment.NewLine
+ " @: @{}" + Environment.NewLine
- + ")",
- new ExpressionBlock(
- Factory.Code($"Repeat(10,{Environment.NewLine} ")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords),
- new TemplateBlock(
- new MarkupBlock(
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup(" ")
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString)),
- new StatementBlock(
- Factory.CodeTransition(),
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.EmptyCSharp()
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Markup(Environment.NewLine)
- .Accepts(AcceptedCharactersInternal.None)
- )
- ),
- Factory.Code(")")
- .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
- .Accepts(AcceptedCharactersInternal.NonWhiteSpace)
- ));
+ + ")");
}
[Fact]
@@ -180,35 +75,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ "
" + Environment.NewLine
+ "Foo" + Environment.NewLine
+ "@:Bar" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.Code(string.Format("foreach(var file in files){{{0}{0}{0}", Environment.NewLine)).AsStatement(),
- new MarkupBlock(
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Baz" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)),
- new MarkupBlock(
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Bar" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.Code("}").AsStatement().Accepts(AcceptedCharactersInternal.None)
- ));
+ + "}");
}
[Fact]
@@ -222,115 +89,19 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " " + Environment.NewLine
+ " @:Hello!" + Environment.NewLine
+ " var biz = boz;" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.Code(
- $"if(foo) {{{Environment.NewLine} var foo = \"After this statement there are " +
- "10 spaces\"; " + Environment.NewLine).AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup($"{Environment.NewLine} Foo{Environment.NewLine}"),
- new ExpressionBlock(
- Factory.Code(" ").AsStatement(),
- Factory.CodeTransition(),
- Factory.Code("bar").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharactersInternal.NonWhiteSpace)
- ),
- Factory.Markup(Environment.NewLine + " "),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- new MarkupBlock(
- Factory.Markup(" "),
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Hello!" + Environment.NewLine).With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.Code($" var biz = boz;{Environment.NewLine}}}").AsStatement()));
+ + "}");
}
[Fact]
public void ParseBlockAllowsMarkupInIfBodyWithBraces()
{
- ParseBlockTest("if(foo) { Bar
} else if(bar) { Baz
} else { Boz
}",
- new StatementBlock(
- Factory.Code("if(foo) {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Bar"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("} else if(bar) {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Baz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("} else {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Boz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("}").AsStatement().Accepts(AcceptedCharactersInternal.None)
- ));
+ ParseBlockTest("if(foo) { Bar
} else if(bar) { Baz
} else { Boz
}");
}
[Fact]
public void ParseBlockAllowsMarkupInIfBodyWithBracesWithinCodeBlock()
{
- ParseBlockTest("{ if(foo) { Bar
} else if(bar) { Baz
} else { Boz
} }",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(" if(foo) {")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Bar"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("} else if(bar) {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Baz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("} else {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Boz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("} ").AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)
- ));
+ ParseBlockTest("{ if(foo) { Bar
} else if(bar) { Baz
} else { Boz
} }");
}
[Fact]
@@ -351,60 +122,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " }" + Environment.NewLine
+ " default:" + Environment.NewLine
+ " Biz
" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.Code($"switch(foo) {{{Environment.NewLine} case 0:{Environment.NewLine}").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code($" break;{Environment.NewLine} case 1:{Environment.NewLine}").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Bar"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code(
- $" return;{Environment.NewLine} case 2:{Environment.NewLine}" +
- " {" + Environment.NewLine).AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Baz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Boz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code($" }}{Environment.NewLine} default:{Environment.NewLine}").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Biz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("}").AsStatement().Accepts(AcceptedCharactersInternal.None)));
+ + "}");
}
[Fact]
@@ -425,105 +143,19 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " }" + Environment.NewLine
+ " default:" + Environment.NewLine
+ " Biz
" + Environment.NewLine
- + "} }",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code($" switch(foo) {{{Environment.NewLine} case 0:{Environment.NewLine}")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code($" break;{Environment.NewLine} case 1:{Environment.NewLine}").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Bar"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code(
- $" return;{Environment.NewLine} case 2:{Environment.NewLine}" +
- " {" + Environment.NewLine).AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Baz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Boz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code($" }}{Environment.NewLine} default:{Environment.NewLine}").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Biz"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("} ").AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)));
+ + "} }");
}
[Fact]
public void ParseBlockParsesMarkupStatementOnOpenAngleBracket()
{
- ParseBlockTest("for(int i = 0; i < 10; i++) { Foo
}",
- new StatementBlock(
- Factory.Code("for(int i = 0; i < 10; i++) {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("}").AsStatement().Accepts(AcceptedCharactersInternal.None)
- ));
+ ParseBlockTest("for(int i = 0; i < 10; i++) { Foo
}");
}
[Fact]
public void ParseBlockParsesMarkupStatementOnOpenAngleBracketInCodeBlock()
{
- ParseBlockTest("{ for(int i = 0; i < 10; i++) { Foo
} }",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(" for(int i = 0; i < 10; i++) {")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("Foo"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code("} ").AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)));
+ ParseBlockTest("{ for(int i = 0; i < 10; i++) { Foo
} }");
}
[Fact]
@@ -531,17 +163,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
// Arrange
ParseBlockTest("if(foo) { @:Bar" + Environment.NewLine
- + "} zoop",
- new StatementBlock(
- Factory.Code("if(foo) {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Bar" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.Code("}").AsStatement()));
+ + "} zoop");
}
[Fact]
@@ -549,17 +171,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
// Arrange
ParseBlockTest("if(foo) { @::Sometext" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.Code("if(foo) {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup(":Sometext" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.Code("}").AsStatement()));
+ + "}");
}
@@ -568,17 +180,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
// Arrange
ParseBlockTest("if(foo) { @:::Sometext" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.Code("if(foo) {").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("::Sometext" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.Code("}").AsStatement()));
+ + "}");
}
[Fact]
@@ -586,55 +188,19 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
{
// Arrange
ParseBlockTest("{ if(foo) { @:Bar" + Environment.NewLine
- + "} } zoop",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(" if(foo) {")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- Factory.Markup(" "),
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Bar" + Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.Code("} ").AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)));
+ + "} } zoop");
}
[Fact]
public void ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTag()
{
- ParseBlockTest("if (i > 0) { ; }",
- new StatementBlock(
- Factory.Code("if (i > 0) { ").AsStatement(),
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.MarkupTransition("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(";").Accepts(AcceptedCharactersInternal.None),
- new MarkupTagBlock(
- Factory.MarkupTransition("").Accepts(AcceptedCharactersInternal.None))),
- Factory.Code(" }").AsStatement()));
+ ParseBlockTest("if (i > 0) { ; }");
}
[Fact]
public void ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTagInCodeBlock()
{
- ParseBlockTest("{ if (i > 0) { ; } }",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code(" if (i > 0) { ")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.MarkupTransition("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(";").Accepts(AcceptedCharactersInternal.None),
- new MarkupTagBlock(
- Factory.MarkupTransition("").Accepts(AcceptedCharactersInternal.None))),
- Factory.Code(" } ").AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)));
+ ParseBlockTest("{ if (i > 0) { ; } }");
}
[Fact]
@@ -650,42 +216,7 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy
+ " if(!false) {" + Environment.NewLine
+ " A real tag!
" + Environment.NewLine
+ " }" + Environment.NewLine
- + "}",
- new StatementBlock(
- Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None),
- Factory.Code($"{Environment.NewLine} if(true) {{{Environment.NewLine}")
- .AsStatement()
- .AutoCompleteWith(autoCompleteString: null),
- new MarkupBlock(
- Factory.Markup(" "),
- Factory.MarkupTransition(),
- Factory.MetaMarkup(":", HtmlSymbolType.Colon),
- Factory.Markup("Single Line Markup" + Environment.NewLine)
- .With(new SpanEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString, AcceptedCharactersInternal.None))
- ),
- Factory.Code($" }}{Environment.NewLine} foreach (var p in Enumerable.Range(1, 10)) {{{Environment.NewLine} ").AsStatement(),
- new MarkupBlock(
- new MarkupTagBlock(
- Factory.MarkupTransition("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("The number is ").Accepts(AcceptedCharactersInternal.None),
- new ExpressionBlock(
- Factory.CodeTransition(),
- Factory.Code("p").AsImplicitExpression(CSharpCodeParser.DefaultKeywords).Accepts(AcceptedCharactersInternal.NonWhiteSpace)
- ),
- new MarkupTagBlock(
- Factory.MarkupTransition("").Accepts(AcceptedCharactersInternal.None))),
- Factory.Code($"{Environment.NewLine} }}{Environment.NewLine} if(!false) {{{Environment.NewLine}").AsStatement(),
- new MarkupBlock(
- Factory.Markup(" "),
- new MarkupTagBlock(
- Factory.Markup("").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup("A real tag!"),
- new MarkupTagBlock(
- Factory.Markup("
").Accepts(AcceptedCharactersInternal.None)),
- Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)
- ),
- Factory.Code(" }" + Environment.NewLine).AsStatement(),
- Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)));
+ + "}");
}
}
}
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/EmptyRazorComment.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/EmptyRazorComment.syntaxtree.txt
new file mode 100644
index 0000000000..87e94e8487
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/EmptyRazorComment.syntaxtree.txt
@@ -0,0 +1,16 @@
+Markup block - Gen - 4 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Comment block - Gen - 4 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (2:0,2) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (3:0,3) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (4:0,4) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/MultipleRazorCommentInMarkup.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/MultipleRazorCommentInMarkup.syntaxtree.txt
new file mode 100644
index 0000000000..fb0fc05609
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/MultipleRazorCommentInMarkup.syntaxtree.txt
@@ -0,0 +1,43 @@
+Markup block - Gen - 25 - (0:0,0)
+ Tag block - Gen - 3 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (3:0,3) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (5:1,0) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Comment block - Gen - 4 - (7:1,2)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (7:1,2) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (8:1,3) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (9:1,4) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (9:1,4) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (10:1,5) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [ LF] - SpanEditHandler;Accepts:Any - (11:1,6) - Symbols:2
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.NewLine;[LF];
+ Comment block - Gen - 4 - (15:2,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (15:2,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (16:2,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (17:2,2) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (17:2,2) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (18:2,3) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (19:2,4) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Tag block - Gen - 4 - (21:3,0)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (21:3,0) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/MultipleRazorCommentsInSameLineInMarkup.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/MultipleRazorCommentsInSameLineInMarkup.syntaxtree.txt
new file mode 100644
index 0000000000..8e60c9043c
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/MultipleRazorCommentsInSameLineInMarkup.syntaxtree.txt
@@ -0,0 +1,42 @@
+Markup block - Gen - 21 - (0:0,0)
+ Tag block - Gen - 3 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (3:0,3) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Comment block - Gen - 4 - (5:1,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (5:1,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (6:1,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (7:1,2) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (7:1,2) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (8:1,3) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (9:1,4) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (9:1,4) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Comment block - Gen - 4 - (11:1,6)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (11:1,6) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (12:1,7) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (13:1,8) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (13:1,8) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (14:1,9) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (15:1,10) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Tag block - Gen - 4 - (17:2,0)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (17:2,0) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInImplicitExpressionMethodCall.diagnostics.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInImplicitExpressionMethodCall.diagnostics.txt
new file mode 100644
index 0000000000..ade6c85b25
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInImplicitExpressionMethodCall.diagnostics.txt
@@ -0,0 +1 @@
+(1,5): Error RZ1027: An opening "(" is missing the corresponding closing ")".
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInImplicitExpressionMethodCall.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInImplicitExpressionMethodCall.syntaxtree.txt
new file mode 100644
index 0000000000..8e31004d17
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInImplicitExpressionMethodCall.syntaxtree.txt
@@ -0,0 +1,23 @@
+Markup block - Gen - 13 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Expression block - Gen - 13 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ Code span - Gen - [foo(LF] - ImplicitExpressionEditHandler;Accepts:Any;ImplicitExpression[RTD];K14 - (1:0,1) - Symbols:3
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.NewLine;[LF];
+ Comment block - Gen - 4 - (7:1,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (7:1,0) - Symbols:1
+ CSharpSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (8:1,1) - Symbols:1
+ CSharpSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (9:1,2) - Symbols:1
+ CSharpSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (9:1,2) - Symbols:1
+ CSharpSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (10:1,3) - Symbols:1
+ CSharpSymbolType.RazorCommentTransition;[@];
+ Code span - Gen - [LF] - ImplicitExpressionEditHandler;Accepts:Any;ImplicitExpression[RTD];K14 - (11:1,4) - Symbols:1
+ CSharpSymbolType.NewLine;[LF];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInMarkup.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInMarkup.syntaxtree.txt
new file mode 100644
index 0000000000..8a702cad41
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInMarkup.syntaxtree.txt
@@ -0,0 +1,27 @@
+Markup block - Gen - 15 - (0:0,0)
+ Tag block - Gen - 3 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (3:0,3) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Comment block - Gen - 4 - (5:1,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (5:1,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (6:1,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (7:1,2) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (7:1,2) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (8:1,3) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (9:1,4) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Tag block - Gen - 4 - (11:2,0)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (11:2,0) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInVerbatimBlock.diagnostics.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInVerbatimBlock.diagnostics.txt
new file mode 100644
index 0000000000..1567f665b6
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInVerbatimBlock.diagnostics.txt
@@ -0,0 +1,3 @@
+(2,6): Error RZ1023: "" and "" tags cannot contain attributes.
+(2,6): Error RZ1025: The "text" element was not closed. All elements must be either self-closing or have a matching end tag.
+(1,2): Error RZ1006: The code block is missing a closing "}" character. Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup.
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInVerbatimBlock.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInVerbatimBlock.syntaxtree.txt
new file mode 100644
index 0000000000..ca37c88848
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentInVerbatimBlock.syntaxtree.txt
@@ -0,0 +1,35 @@
+Markup block - Gen - 26 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Statement block - Gen - 26 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [LF ] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[}];AtEOL - (2:0,2) - Symbols:2
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Markup block - Gen - 18 - (8:1,4)
+ Tag block - Gen - 5 - (8:1,4)
+ Transition span - Gen - [ - [LF] - SpanEditHandler;Accepts:None - (13:1,9) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (15:2,0) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Comment block - Gen - 4 - (19:2,4)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (19:2,4) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (20:2,5) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (21:2,6) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (21:2,6) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (22:2,7) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (23:2,8) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Markup span - Gen - [}] - SpanEditHandler;Accepts:Any - (25:3,0) - Symbols:1
+ HtmlSymbolType.Text;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentWithExtraNewLineInMarkup.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentWithExtraNewLineInMarkup.syntaxtree.txt
new file mode 100644
index 0000000000..68282435f9
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentWithExtraNewLineInMarkup.syntaxtree.txt
@@ -0,0 +1,43 @@
+Markup block - Gen - 45 - (0:0,0)
+ Tag block - Gen - 3 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LFLF] - SpanEditHandler;Accepts:Any - (3:0,3) - Symbols:2
+ HtmlSymbolType.NewLine;[LF];
+ HtmlSymbolType.NewLine;[LF];
+ Comment block - Gen - 13 - (7:2,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (7:2,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (8:2,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [ content ] - SpanEditHandler;Accepts:Any - (9:2,2) - Symbols:1
+ HtmlSymbolType.RazorComment;[ content ];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (18:2,11) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (19:2,12) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (20:2,13) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Comment block - Gen - 15 - (22:3,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (22:3,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (23:3,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [LFcontentLF] - SpanEditHandler;Accepts:Any - (24:3,2) - Symbols:1
+ HtmlSymbolType.RazorComment;[LFcontentLF];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (35:5,0) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (36:5,1) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (37:5,2) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (39:6,0) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Tag block - Gen - 4 - (41:7,0)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (41:7,0) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentsSurroundingMarkup.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentsSurroundingMarkup.syntaxtree.txt
new file mode 100644
index 0000000000..3dd0ba4972
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/RazorCommentsSurroundingMarkup.syntaxtree.txt
@@ -0,0 +1,42 @@
+Markup block - Gen - 42 - (0:0,0)
+ Tag block - Gen - 3 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (3:0,3) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Comment block - Gen - 11 - (5:1,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (5:1,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (6:1,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [ hello ] - SpanEditHandler;Accepts:Any - (7:1,2) - Symbols:1
+ HtmlSymbolType.RazorComment;[ hello ];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (14:1,9) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (15:1,10) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [ content ] - SpanEditHandler;Accepts:Any - (16:1,11) - Symbols:3
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[content];
+ HtmlSymbolType.WhiteSpace;[ ];
+ Comment block - Gen - 11 - (25:1,20)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (25:1,20) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (26:1,21) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [ world ] - SpanEditHandler;Accepts:Any - (27:1,22) - Symbols:1
+ HtmlSymbolType.RazorComment;[ world ];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (34:1,29) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (35:1,30) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:Any - (36:1,31) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Tag block - Gen - 4 - (38:2,0)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:Any - (38:2,0) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorComment.diagnostics.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorComment.diagnostics.txt
new file mode 100644
index 0000000000..4f3108141d
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorComment.diagnostics.txt
@@ -0,0 +1 @@
+(1,1): Error RZ1028: End of file was reached before the end of the block comment. All comments that start with the "@*" sequence must be terminated with a matching "*@" sequence.
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorComment.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorComment.syntaxtree.txt
new file mode 100644
index 0000000000..b2de99c70f
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorComment.syntaxtree.txt
@@ -0,0 +1,10 @@
+Markup block - Gen - 2 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Comment block - Gen - 2 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ HtmlSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ HtmlSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (2:0,2) - Symbols:1
+ HtmlSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInImplicitExpressionMethodCall.diagnostics.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInImplicitExpressionMethodCall.diagnostics.txt
new file mode 100644
index 0000000000..b65a64c148
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInImplicitExpressionMethodCall.diagnostics.txt
@@ -0,0 +1,2 @@
+(1,6): Error RZ1028: End of file was reached before the end of the block comment. All comments that start with the "@*" sequence must be terminated with a matching "*@" sequence.
+(1,5): Error RZ1027: An opening "(" is missing the corresponding closing ")".
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInImplicitExpressionMethodCall.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInImplicitExpressionMethodCall.syntaxtree.txt
new file mode 100644
index 0000000000..8a9ca61d07
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInImplicitExpressionMethodCall.syntaxtree.txt
@@ -0,0 +1,16 @@
+Markup block - Gen - 7 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Expression block - Gen - 7 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ Code span - Gen - [foo(] - ImplicitExpressionEditHandler;Accepts:Any;ImplicitExpression[RTD];K14 - (1:0,1) - Symbols:2
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.LeftParenthesis;[(];
+ Comment block - Gen - 2 - (5:0,5)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (5:0,5) - Symbols:1
+ CSharpSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (6:0,6) - Symbols:1
+ CSharpSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (7:0,7) - Symbols:1
+ CSharpSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInVerbatimBlock.diagnostics.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInVerbatimBlock.diagnostics.txt
new file mode 100644
index 0000000000..37d6bd7155
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInVerbatimBlock.diagnostics.txt
@@ -0,0 +1,2 @@
+(1,3): Error RZ1028: End of file was reached before the end of the block comment. All comments that start with the "@*" sequence must be terminated with a matching "*@" sequence.
+(1,2): Error RZ1006: The code block is missing a closing "}" character. Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup.
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInVerbatimBlock.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInVerbatimBlock.syntaxtree.txt
new file mode 100644
index 0000000000..9acfe929f8
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpRazorCommentsTest/UnterminatedRazorCommentInVerbatimBlock.syntaxtree.txt
@@ -0,0 +1,17 @@
+Markup block - Gen - 4 - (0:0,0)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:1
+ HtmlSymbolType.Unknown;[];
+ Statement block - Gen - 4 - (0:0,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (1:0,1) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[}];AtEOL - (2:0,2) - Symbols:1
+ CSharpSymbolType.Unknown;[];
+ Comment block - Gen - 2 - (2:0,2)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (2:0,2) - Symbols:1
+ CSharpSymbolType.RazorCommentTransition;[@];
+ MetaCode span - Gen - [*] - SpanEditHandler;Accepts:None - (3:0,3) - Symbols:1
+ CSharpSymbolType.RazorCommentStar;[*];
+ Comment span - Gen - [] - SpanEditHandler;Accepts:Any - (4:0,4) - Symbols:1
+ CSharpSymbolType.Unknown;[];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWord.diagnostics.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWord.diagnostics.txt
new file mode 100644
index 0000000000..7b748fffe4
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWord.diagnostics.txt
@@ -0,0 +1 @@
+(1,1): Error RZ1007: "namespace" is a reserved word and cannot be used in implicit expressions. An explicit expression ("@()") must be used.
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWord.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWord.syntaxtree.txt
new file mode 100644
index 0000000000..700a0bc901
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWord.syntaxtree.txt
@@ -0,0 +1,3 @@
+Directive block - Gen - 9 - (0:0,0)
+ MetaCode span - Gen - [namespace] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.Keyword;[namespace];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWordIsCaseSensitive.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWordIsCaseSensitive.syntaxtree.txt
new file mode 100644
index 0000000000..5e115a5168
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpReservedWordsTest/ReservedWordIsCaseSensitive.syntaxtree.txt
@@ -0,0 +1,3 @@
+Expression block - Gen - 9 - (0:0,0)
+ Code span - Gen - [NameSpace] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (0:0,0) - Symbols:1
+ CSharpSymbolType.Identifier;[NameSpace];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockAllowsMarkupInIfBodyWithBraces.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockAllowsMarkupInIfBodyWithBraces.syntaxtree.txt
new file mode 100644
index 0000000000..8b97a3aab7
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockAllowsMarkupInIfBodyWithBraces.syntaxtree.txt
@@ -0,0 +1,81 @@
+Statement block - Gen - 70 - (0:0,0)
+ Code span - Gen - [if(foo) {] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:6
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (9:0,9)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (10:0,10)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Bar] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:1
+ HtmlSymbolType.Text;[Bar];
+ Tag block - Gen - 4 - (16:0,16)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (16:0,16) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (20:0,20) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [} else if(bar) {] - SpanEditHandler;Accepts:Any - (21:0,21) - Symbols:10
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[else];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[bar];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (37:0,37)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (37:0,37) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (38:0,38)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (38:0,38) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Baz] - SpanEditHandler;Accepts:Any - (41:0,41) - Symbols:1
+ HtmlSymbolType.Text;[Baz];
+ Tag block - Gen - 4 - (44:0,44)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (44:0,44) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (48:0,48) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [} else {] - SpanEditHandler;Accepts:Any - (49:0,49) - Symbols:5
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[else];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (57:0,57)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (57:0,57) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (58:0,58)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (58:0,58) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Boz] - SpanEditHandler;Accepts:Any - (61:0,61) - Symbols:1
+ HtmlSymbolType.Text;[Boz];
+ Tag block - Gen - 4 - (64:0,64)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (64:0,64) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (68:0,68) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [}] - SpanEditHandler;Accepts:None - (69:0,69) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockAllowsMarkupInIfBodyWithBracesWithinCodeBlock.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockAllowsMarkupInIfBodyWithBracesWithinCodeBlock.syntaxtree.txt
new file mode 100644
index 0000000000..a0e6a7d0d0
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockAllowsMarkupInIfBodyWithBracesWithinCodeBlock.syntaxtree.txt
@@ -0,0 +1,87 @@
+Statement block - Gen - 74 - (0:0,0)
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [ if(foo) {] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:7
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (11:0,11)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (12:0,12)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (12:0,12) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Bar] - SpanEditHandler;Accepts:Any - (15:0,15) - Symbols:1
+ HtmlSymbolType.Text;[Bar];
+ Tag block - Gen - 4 - (18:0,18)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (18:0,18) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (22:0,22) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [} else if(bar) {] - SpanEditHandler;Accepts:Any - (23:0,23) - Symbols:10
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[else];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[bar];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (39:0,39)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (39:0,39) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (40:0,40)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (40:0,40) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Baz] - SpanEditHandler;Accepts:Any - (43:0,43) - Symbols:1
+ HtmlSymbolType.Text;[Baz];
+ Tag block - Gen - 4 - (46:0,46)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (46:0,46) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (50:0,50) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [} else {] - SpanEditHandler;Accepts:Any - (51:0,51) - Symbols:5
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[else];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (59:0,59)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (59:0,59) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (60:0,60)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (60:0,60) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Boz] - SpanEditHandler;Accepts:Any - (63:0,63) - Symbols:1
+ HtmlSymbolType.Text;[Boz];
+ Tag block - Gen - 4 - (66:0,66)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (66:0,66) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (70:0,70) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [} ] - SpanEditHandler;Accepts:Any - (71:0,71) - Symbols:2
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (73:0,73) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTag.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTag.syntaxtree.txt
new file mode 100644
index 0000000000..8767ea9b4e
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTag.syntaxtree.txt
@@ -0,0 +1,31 @@
+Statement block - Gen - 29 - (0:0,0)
+ Code span - Gen - [if (i > 0) { ] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:12
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.GreaterThan;[>];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.IntegerLiteral;[0];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Markup block - Gen - 14 - (13:0,13)
+ Tag block - Gen - 6 - (13:0,13)
+ Transition span - Gen - [] - SpanEditHandler;Accepts:None - (13:0,13) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[text];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [;] - SpanEditHandler;Accepts:None - (19:0,19) - Symbols:1
+ HtmlSymbolType.Text;[;];
+ Tag block - Gen - 7 - (20:0,20)
+ Transition span - Gen - [] - SpanEditHandler;Accepts:None - (20:0,20) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[text];
+ HtmlSymbolType.CloseAngle;[>];
+ Code span - Gen - [ }] - SpanEditHandler;Accepts:Any - (27:0,27) - Symbols:2
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTagInCodeBlock.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTagInCodeBlock.syntaxtree.txt
new file mode 100644
index 0000000000..470eac3553
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockCorrectlyReturnsFromMarkupBlockWithPseudoTagInCodeBlock.syntaxtree.txt
@@ -0,0 +1,37 @@
+Statement block - Gen - 33 - (0:0,0)
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [ if (i > 0) { ] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:13
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.GreaterThan;[>];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.IntegerLiteral;[0];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Markup block - Gen - 14 - (15:0,15)
+ Tag block - Gen - 6 - (15:0,15)
+ Transition span - Gen - [] - SpanEditHandler;Accepts:None - (15:0,15) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[text];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [;] - SpanEditHandler;Accepts:None - (21:0,21) - Symbols:1
+ HtmlSymbolType.Text;[;];
+ Tag block - Gen - 7 - (22:0,22)
+ Transition span - Gen - [] - SpanEditHandler;Accepts:None - (22:0,22) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[text];
+ HtmlSymbolType.CloseAngle;[>];
+ Code span - Gen - [ } ] - SpanEditHandler;Accepts:Any - (29:0,29) - Symbols:3
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (32:0,32) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesAllWhitespaceOnSameLineExcludingPreceedingNewlineButIncludingTrailingNewLineToMarkup.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesAllWhitespaceOnSameLineExcludingPreceedingNewlineButIncludingTrailingNewLineToMarkup.syntaxtree.txt
new file mode 100644
index 0000000000..2273388c86
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesAllWhitespaceOnSameLineExcludingPreceedingNewlineButIncludingTrailingNewLineToMarkup.syntaxtree.txt
@@ -0,0 +1,74 @@
+Statement block - Gen - 161 - (0:0,0)
+ Code span - Gen - [if(foo) {LF var foo = "After this statement there are 10 spaces"; LF] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:18
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[var];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Assign;[=];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.StringLiteral;["After this statement there are 10 spaces"];
+ CSharpSymbolType.Semicolon;[;];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.NewLine;[LF];
+ Markup block - Gen - 46 - (80:2,0)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (80:2,0) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (84:2,4)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (84:2,4) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF FooLF] - SpanEditHandler;Accepts:Any - (87:2,7) - Symbols:4
+ HtmlSymbolType.NewLine;[LF];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.Text;[Foo];
+ HtmlSymbolType.NewLine;[LF];
+ Expression block - Gen - 12 - (102:4,0)
+ Code span - Gen - [ ] - SpanEditHandler;Accepts:Any - (102:4,0) - Symbols:1
+ CSharpSymbolType.WhiteSpace;[ ];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (110:4,8) - Symbols:1
+ CSharpSymbolType.Transition;[@];
+ Code span - Gen - [bar] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (111:4,9) - Symbols:1
+ CSharpSymbolType.Identifier;[bar];
+ Markup span - Gen - [LF ] - SpanEditHandler;Accepts:Any - (114:4,12) - Symbols:2
+ HtmlSymbolType.NewLine;[LF];
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 4 - (120:5,4)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (120:5,4) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [LF] - SpanEditHandler;Accepts:None - (124:5,8) - Symbols:1
+ HtmlSymbolType.NewLine;[LF];
+ Markup block - Gen - 14 - (126:6,0)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (126:6,0) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (130:6,4) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ MetaCode span - Gen - [:] - SpanEditHandler;Accepts:Any - (131:6,5) - Symbols:1
+ HtmlSymbolType.Colon;[:];
+ Markup span - Gen - [Hello!LF] - SpanEditHandler;Accepts:None - (132:6,6) - Symbols:3
+ HtmlSymbolType.Text;[Hello];
+ HtmlSymbolType.Bang;[!];
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen - [ var biz = boz;LF}] - SpanEditHandler;Accepts:Any - (140:7,0) - Symbols:11
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[var];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[biz];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Assign;[=];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[boz];
+ CSharpSymbolType.Semicolon;[;];
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtColonTemplateTransitionInDesignTimeMode.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtColonTemplateTransitionInDesignTimeMode.syntaxtree.txt
new file mode 100644
index 0000000000..6527c987fe
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtColonTemplateTransitionInDesignTimeMode.syntaxtree.txt
@@ -0,0 +1,25 @@
+Expression block - Gen - 29 - (0:0,0)
+ Code span - Gen - [Foo( LF] - ImplicitExpressionEditHandler;Accepts:Any;ImplicitExpression[RTD];K14 - (0:0,0) - Symbols:4
+ CSharpSymbolType.Identifier;[Foo];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.NewLine;[LF];
+ Template block - Gen - 18 - (10:1,0)
+ Markup block - Gen - 18 - (10:1,0)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (10:1,0) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ MetaCode span - Gen - [:] - SpanEditHandler;Accepts:Any - (11:1,1) - Symbols:1
+ HtmlSymbolType.Colon;[:];
+ Markup span - Gen - [Foo
LF] - SpanEditHandler;Accepts:None - (12:1,2) - Symbols:10
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ HtmlSymbolType.Text;[Foo];
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen - [)] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (28:2,0) - Symbols:1
+ CSharpSymbolType.RightParenthesis;[)];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtColonTransitionInDesignTimeMode.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtColonTransitionInDesignTimeMode.syntaxtree.txt
new file mode 100644
index 0000000000..9af8830a59
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtColonTransitionInDesignTimeMode.syntaxtree.txt
@@ -0,0 +1,26 @@
+Statement block - Gen - 26 - (0:0,0)
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [LF ] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:2
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Markup block - Gen - 18 - (7:1,4)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (7:1,4) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ MetaCode span - Gen - [:] - SpanEditHandler;Accepts:Any - (8:1,5) - Symbols:1
+ HtmlSymbolType.Colon;[:];
+ Markup span - Gen - [Foo
LF] - SpanEditHandler;Accepts:None - (9:1,6) - Symbols:10
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ HtmlSymbolType.Text;[Foo];
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ HtmlSymbolType.WhiteSpace;[ ];
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen - [] - SpanEditHandler;Accepts:Any - (25:2,0) - Symbols:1
+ CSharpSymbolType.Unknown;[];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (25:2,0) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtTagTemplateTransitionInDesignTimeMode.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtTagTemplateTransitionInDesignTimeMode.syntaxtree.txt
new file mode 100644
index 0000000000..03da3b909a
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnAtTagTemplateTransitionInDesignTimeMode.syntaxtree.txt
@@ -0,0 +1,25 @@
+Expression block - Gen - 24 - (0:0,0)
+ Code span - Gen - [Foo( ] - ImplicitExpressionEditHandler;Accepts:Any;ImplicitExpression[RTD];K14 - (0:0,0) - Symbols:3
+ CSharpSymbolType.Identifier;[Foo];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Template block - Gen - 11 - (8:0,8)
+ Markup block - Gen - 11 - (8:0,8)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (8:0,8) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ Tag block - Gen - 3 - (9:0,9)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (9:0,9) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo] - SpanEditHandler;Accepts:Any - (12:0,12) - Symbols:1
+ HtmlSymbolType.Text;[Foo];
+ Tag block - Gen - 4 - (15:0,15)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (15:0,15) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Code span - Gen - [ )] - ImplicitExpressionEditHandler;Accepts:NonWhiteSpace;ImplicitExpression[RTD];K14 - (19:0,19) - Symbols:2
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.RightParenthesis;[)];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode.diagnostics.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode.diagnostics.txt
new file mode 100644
index 0000000000..fd4615efa6
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode.diagnostics.txt
@@ -0,0 +1,5 @@
+(2,5): Error RZ1009: The "@" character must be followed by a ":", "(", or a C# identifier. If you intended to switch to markup, use an HTML start tag, for example:
+
+@if(isLoggedIn) {
+ Hello, @user!
+}
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode.syntaxtree.txt
new file mode 100644
index 0000000000..72ded8411b
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnInvalidAtTagTransitionInDesignTimeMode.syntaxtree.txt
@@ -0,0 +1,27 @@
+Statement block - Gen - 25 - (0:0,0)
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [LF ] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:2
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Markup block - Gen - 11 - (7:1,4)
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (7:1,4) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ Tag block - Gen - 3 - (8:1,5)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (8:1,5) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo] - SpanEditHandler;Accepts:Any - (11:1,8) - Symbols:1
+ HtmlSymbolType.Text;[Foo];
+ Tag block - Gen - 4 - (14:1,11)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (14:1,11) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Code span - Gen - [ LF] - SpanEditHandler;Accepts:Any - (18:1,15) - Symbols:2
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.NewLine;[LF];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (24:2,0) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnTagTransitionInDesignTimeMode.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnTagTransitionInDesignTimeMode.syntaxtree.txt
new file mode 100644
index 0000000000..71972424ba
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockGivesSpacesToCodeOnTagTransitionInDesignTimeMode.syntaxtree.txt
@@ -0,0 +1,25 @@
+Statement block - Gen - 24 - (0:0,0)
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [LF ] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:2
+ CSharpSymbolType.NewLine;[LF];
+ CSharpSymbolType.WhiteSpace;[ ];
+ Markup block - Gen - 10 - (7:1,4)
+ Tag block - Gen - 3 - (7:1,4)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (7:1,4) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo] - SpanEditHandler;Accepts:Any - (10:1,7) - Symbols:1
+ HtmlSymbolType.Text;[Foo];
+ Tag block - Gen - 4 - (13:1,10)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (13:1,10) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Code span - Gen - [ LF] - SpanEditHandler;Accepts:Any - (17:1,14) - Symbols:2
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.NewLine;[LF];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (23:2,0) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnOpenAngleBracket.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnOpenAngleBracket.syntaxtree.txt
new file mode 100644
index 0000000000..4d5df85b66
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnOpenAngleBracket.syntaxtree.txt
@@ -0,0 +1,45 @@
+Statement block - Gen - 42 - (0:0,0)
+ Code span - Gen - [for(int i = 0; i < 10; i++) {] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:23
+ CSharpSymbolType.Keyword;[for];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Keyword;[int];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Assign;[=];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.IntegerLiteral;[0];
+ CSharpSymbolType.Semicolon;[;];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LessThan;[<];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.IntegerLiteral;[10];
+ CSharpSymbolType.Semicolon;[;];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.Increment;[++];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (29:0,29)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (29:0,29) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (30:0,30)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (30:0,30) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo] - SpanEditHandler;Accepts:Any - (33:0,33) - Symbols:1
+ HtmlSymbolType.Text;[Foo];
+ Tag block - Gen - 4 - (36:0,36)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (36:0,36) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (40:0,40) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [}] - SpanEditHandler;Accepts:None - (41:0,41) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnOpenAngleBracketInCodeBlock.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnOpenAngleBracketInCodeBlock.syntaxtree.txt
new file mode 100644
index 0000000000..9a96ec2028
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnOpenAngleBracketInCodeBlock.syntaxtree.txt
@@ -0,0 +1,51 @@
+Statement block - Gen - 46 - (0:0,0)
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [ for(int i = 0; i < 10; i++) {] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:24
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[for];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Keyword;[int];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Assign;[=];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.IntegerLiteral;[0];
+ CSharpSymbolType.Semicolon;[;];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LessThan;[<];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.IntegerLiteral;[10];
+ CSharpSymbolType.Semicolon;[;];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Identifier;[i];
+ CSharpSymbolType.Increment;[++];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 12 - (31:0,31)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (31:0,31) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Tag block - Gen - 3 - (32:0,32)
+ Markup span - Gen - [] - SpanEditHandler;Accepts:None - (32:0,32) - Symbols:3
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [Foo] - SpanEditHandler;Accepts:Any - (35:0,35) - Symbols:1
+ HtmlSymbolType.Text;[Foo];
+ Tag block - Gen - 4 - (38:0,38)
+ Markup span - Gen - [
] - SpanEditHandler;Accepts:None - (38:0,38) - Symbols:4
+ HtmlSymbolType.OpenAngle;[<];
+ HtmlSymbolType.ForwardSlash;[/];
+ HtmlSymbolType.Text;[p];
+ HtmlSymbolType.CloseAngle;[>];
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:None - (42:0,42) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Code span - Gen - [} ] - SpanEditHandler;Accepts:Any - (43:0,43) - Symbols:2
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (45:0,45) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColon.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColon.syntaxtree.txt
new file mode 100644
index 0000000000..be2d69622d
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColon.syntaxtree.txt
@@ -0,0 +1,20 @@
+Statement block - Gen - 18 - (0:0,0)
+ Code span - Gen - [if(foo) {] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:6
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 8 - (9:0,9)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ MetaCode span - Gen - [:] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:1
+ HtmlSymbolType.Colon;[:];
+ Markup span - Gen - [BarLF] - SpanEditHandler;Accepts:None - (12:0,12) - Symbols:2
+ HtmlSymbolType.Text;[Bar];
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen - [}] - SpanEditHandler;Accepts:Any - (17:1,0) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColonInCodeBlock.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColonInCodeBlock.syntaxtree.txt
new file mode 100644
index 0000000000..1fb5f39957
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByColonInCodeBlock.syntaxtree.txt
@@ -0,0 +1,26 @@
+Statement block - Gen - 22 - (0:0,0)
+ MetaCode span - Gen - [{] - SpanEditHandler;Accepts:None - (0:0,0) - Symbols:1
+ CSharpSymbolType.LeftBrace;[{];
+ Code span - Gen - [ if(foo) {] - AutoCompleteEditHandler;Accepts:Any,AutoComplete:[];AtEOL - (1:0,1) - Symbols:7
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 8 - (11:0,11)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (12:0,12) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ MetaCode span - Gen - [:] - SpanEditHandler;Accepts:Any - (13:0,13) - Symbols:1
+ HtmlSymbolType.Colon;[:];
+ Markup span - Gen - [BarLF] - SpanEditHandler;Accepts:None - (14:0,14) - Symbols:2
+ HtmlSymbolType.Text;[Bar];
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen - [} ] - SpanEditHandler;Accepts:Any - (19:1,0) - Symbols:2
+ CSharpSymbolType.RightBrace;[}];
+ CSharpSymbolType.WhiteSpace;[ ];
+ MetaCode span - Gen - [}] - SpanEditHandler;Accepts:None - (21:1,2) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByDoubleColon.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByDoubleColon.syntaxtree.txt
new file mode 100644
index 0000000000..3ae830ee85
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByDoubleColon.syntaxtree.txt
@@ -0,0 +1,20 @@
+Statement block - Gen - 24 - (0:0,0)
+ Code span - Gen - [if(foo) {] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:6
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 14 - (9:0,9)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ MetaCode span - Gen - [:] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:1
+ HtmlSymbolType.Colon;[:];
+ Markup span - Gen - [:SometextLF] - SpanEditHandler;Accepts:None - (12:0,12) - Symbols:2
+ HtmlSymbolType.Text;[:Sometext];
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen - [}] - SpanEditHandler;Accepts:Any - (23:1,0) - Symbols:1
+ CSharpSymbolType.RightBrace;[}];
diff --git a/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByTripleColon.syntaxtree.txt b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByTripleColon.syntaxtree.txt
new file mode 100644
index 0000000000..a8ed368280
--- /dev/null
+++ b/test/Microsoft.AspNetCore.Razor.Language.Test/TestFiles/ParserTests/CSharpToMarkupSwitchTest/ParseBlockParsesMarkupStatementOnSwitchCharacterFollowedByTripleColon.syntaxtree.txt
@@ -0,0 +1,20 @@
+Statement block - Gen - 25 - (0:0,0)
+ Code span - Gen - [if(foo) {] - SpanEditHandler;Accepts:Any - (0:0,0) - Symbols:6
+ CSharpSymbolType.Keyword;[if];
+ CSharpSymbolType.LeftParenthesis;[(];
+ CSharpSymbolType.Identifier;[foo];
+ CSharpSymbolType.RightParenthesis;[)];
+ CSharpSymbolType.WhiteSpace;[ ];
+ CSharpSymbolType.LeftBrace;[{];
+ Markup block - Gen - 15 - (9:0,9)
+ Markup span - Gen - [ ] - SpanEditHandler;Accepts:Any - (9:0,9) - Symbols:1
+ HtmlSymbolType.WhiteSpace;[ ];
+ Transition span - Gen - [@] - SpanEditHandler;Accepts:None - (10:0,10) - Symbols:1
+ HtmlSymbolType.Transition;[@];
+ MetaCode span - Gen - [:] - SpanEditHandler;Accepts:Any - (11:0,11) - Symbols:1
+ HtmlSymbolType.Colon;[:];
+ Markup span - Gen - [::SometextLF] - SpanEditHandler;Accepts:None - (12:0,12) - Symbols:2
+ HtmlSymbolType.Text;[::Sometext];
+ HtmlSymbolType.NewLine;[LF];
+ Code span - Gen