Exemple #1
0
 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), "(", ")"));
 }
Exemple #2
0
 public void ParseBlockStopsBalancingParenthesesAtEOF()
 {
     ImplicitExpressionTest(
         "foo(()", "foo(()",
         acceptedCharacters: AcceptedCharactersInternal.Any,
         errors: RazorDiagnosticFactory.CreateParsing_ExpectedCloseBracketBeforeEOF(
             new SourceSpan(new SourceLocation(4, 0, 4), contentLength: 1), "(", ")"));
 }
Exemple #3
0
 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), "(", ")"));
 }
Exemple #4
0
 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), "(", ")"));
 }
Exemple #5
0
 // 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), "[", "]"));
 }
Exemple #6
0
 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));
        }
Exemple #8
0
 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);
        }