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), "(", ")")); }
public void ParseBlockStopsBalancingParenthesesAtEOF() { ImplicitExpressionTest( "foo(()", "foo(()", acceptedCharacters: AcceptedCharactersInternal.Any, errors: RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(new SourceLocation(4, 0, 4), contentLength: 1), "(", ")")); }
public void ParseBlockTerminatesUsingBlockAtEOLWhenRecoveringFromMissingCloseParen() { ParseBlockTest("using(foo bar" + Environment.NewLine + "baz", new StatementBlock( Factory.Code("using(foo bar" + Environment.NewLine).AsStatement() ), RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(new SourceLocation(5, 0, 5), contentLength: 1), "(", ")")); }
public void ParseBlockCorrectlyHandlesInCorrectTransitionsIfImplicitExpressionParensUnclosed() { ParseBlockTest("Href(" + Environment.NewLine + "<h1>@Html.Foo(Bar);</h1>" + Environment.NewLine, new ExpressionBlock( Factory.Code("Href(" + Environment.NewLine) .AsImplicitExpression(CSharpCodeParser.DefaultKeywords) ), RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(new SourceLocation(4, 0, 4), contentLength: 1), "(", ")")); }
// Test for fix to Dev10 884975 - Incorrect Error Messaging public void ParseBlockShouldReportErrorAndTerminateAtEOFIfBracketInImplicitExpressionUnclosed() { ParseBlockTest("Foo[Bar[Baz]" + Environment.NewLine + "Biz" + Environment.NewLine + "Boz", new ExpressionBlock( Factory.Code($"Foo[Bar[Baz]{Environment.NewLine}Biz{Environment.NewLine}Boz") .AsImplicitExpression(CSharpCodeParser.DefaultKeywords) ), RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(new SourceLocation(3, 0, 3), contentLength: 1), "[", "]")); }
public void ParseBlockResumesIfStatementAfterOpenParen() { ParseBlockTest("if(" + Environment.NewLine + "else { <p>Foo</p> }", new StatementBlock( Factory.Code($"if({Environment.NewLine}else {{").AsStatement(), new MarkupBlock( Factory.Markup(" "), BlockFactory.MarkupTagBlock("<p>", AcceptedCharactersInternal.None), Factory.Markup("Foo"), BlockFactory.MarkupTagBlock("</p>", AcceptedCharactersInternal.None), Factory.Markup(" ").Accepts(AcceptedCharactersInternal.None)), Factory.Code("}").AsStatement().Accepts(AcceptedCharactersInternal.None) ), RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(new SourceLocation(2, 0, 2), contentLength: 1), "(", ")")); }
protected internal bool Balance(BalancingModes mode) { var left = CurrentToken.Type; var right = Language.FlipBracket(left); var start = CurrentStart; AcceptAndMoveNext(); if (EndOfFile && ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure)) { Context.ErrorSink.OnError( RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(start, contentLength: 1 /* { OR } */), Language.GetSample(left), Language.GetSample(right))); } return(Balance(mode, left, right, start)); }
public void ParseBlockCorrectlyRecoversFromMissingCloseParenInExpressionWithinCode() { ParseBlockTest(@"{string.Format(<html></html>}", new StatementBlock( Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None), Factory.Code("string.Format(") .AsStatement() .AutoCompleteWith(autoCompleteString: null), new MarkupBlock( BlockFactory.MarkupTagBlock("<html>", AcceptedCharactersInternal.None), BlockFactory.MarkupTagBlock("</html>", AcceptedCharactersInternal.None)), Factory.EmptyCSharp().AsStatement(), Factory.MetaCode("}").Accepts(AcceptedCharactersInternal.None)), expectedErrors: new[] { RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(new SourceLocation(14, 0, 14), contentLength: 1), "(", ")"), }); }
protected internal bool Balance(BalancingModes mode, TTokenType left, TTokenType right, SourceLocation start) { var startPosition = CurrentStart.AbsoluteIndex; var nesting = 1; if (!EndOfFile) { var syms = new List <TToken>(); do { if (IsAtEmbeddedTransition( (mode & BalancingModes.AllowCommentsAndTemplates) == BalancingModes.AllowCommentsAndTemplates, (mode & BalancingModes.AllowEmbeddedTransitions) == BalancingModes.AllowEmbeddedTransitions)) { Accept(syms); syms.Clear(); HandleEmbeddedTransition(); // Reset backtracking since we've already outputted some spans. startPosition = CurrentStart.AbsoluteIndex; } if (At(left)) { nesting++; } else if (At(right)) { nesting--; } if (nesting > 0) { syms.Add(CurrentToken); } }while (nesting > 0 && NextToken()); if (nesting > 0) { if ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure) { Context.ErrorSink.OnError( RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF( new SourceSpan(start, contentLength: 1 /* { OR } */), Language.GetSample(left), Language.GetSample(right))); } if ((mode & BalancingModes.BacktrackOnFailure) == BalancingModes.BacktrackOnFailure) { Context.Source.Position = startPosition; NextToken(); } else { Accept(syms); } } else { // Accept all the tokens we saw Accept(syms); } } return(nesting == 0); }