Beispiel #1
0
    private StateResult QuotedLiteral(char quote, Func <char, bool> isEndQuotedLiteral, SyntaxKind literalType)
    {
        TakeUntil(isEndQuotedLiteral);
        if (CurrentCharacter == '\\')
        {
            TakeCurrent(); // Take the '\'

            // If the next char is the same quote that started this
            if (CurrentCharacter == quote || CurrentCharacter == '\\')
            {
                TakeCurrent(); // Take it so that we don't prematurely end the literal.
            }
            return(Stay());
        }
        else if (EndOfFile || ParserHelpers.IsNewLine(CurrentCharacter))
        {
            CurrentErrors.Add(
                RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral(
                    new SourceSpan(CurrentStart, contentLength: 1 /* " */)));
        }
        else
        {
            TakeCurrent(); // No-op if at EOF
        }
        return(Transition(CSharpTokenizerState.Data, EndToken(literalType)));
    }
Beispiel #2
0
 public void ParseBlockTerminatesNormalStringAtEndOfFile()
 {
     SingleSpanBlockTest("if(foo) { var foo = \"blah blah blah blah blah", BlockKindInternal.Statement, SpanKindInternal.Code,
                         RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral(
                             new SourceSpan(new SourceLocation(20, 0, 20), contentLength: 1)),
                         RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF(
                             new SourceSpan(SourceLocation.Zero, contentLength: 1), "if", "}", "{"));
 }
Beispiel #3
0
 public void ParseBlockTerminatesNormalCSharpStringsAtEOLIfEndQuoteMissing()
 {
     SingleSpanBlockTest("if(foo) {" + Environment.NewLine
                         + "    var p = \"foo bar baz" + Environment.NewLine
                         + ";" + Environment.NewLine
                         + "}",
                         BlockKindInternal.Statement, SpanKindInternal.Code,
                         RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral(
                             new SourceSpan(new SourceLocation(21 + Environment.NewLine.Length, 1, 12), contentLength: 1)));
 }
Beispiel #4
0
 private StateResult VerbatimStringLiteral()
 {
     TakeUntil(c => c == '"');
     if (CurrentCharacter == '"')
     {
         TakeCurrent();
         if (CurrentCharacter == '"')
         {
             TakeCurrent();
             // Stay in the literal, this is an escaped "
             return(Stay());
         }
     }
     else if (EndOfFile)
     {
         CurrentErrors.Add(
             RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral(
                 new SourceSpan(CurrentStart, contentLength: 1 /* end of file */)));
     }
     return(Transition(CSharpTokenizerState.Data, EndToken(SyntaxKind.StringLiteral)));
 }
Beispiel #5
0
 public void ParseBlockCorrectlyParsesMarkupIncorrectyAssumedToBeWithinAStatement()
 {
     ParseBlockTest("if(foo) {" + Environment.NewLine
                    + "    var foo = \"foo bar baz" + Environment.NewLine
                    + "    <p>Foo is @foo</p>" + Environment.NewLine
                    + "}",
                    new StatementBlock(
                        Factory.Code($"if(foo) {{{Environment.NewLine}    var foo = \"foo bar baz{Environment.NewLine}    ").AsStatement(),
                        new MarkupBlock(
                            BlockFactory.MarkupTagBlock("<p>", AcceptedCharactersInternal.None),
                            Factory.Markup("Foo is "),
                            new ExpressionBlock(
                                Factory.CodeTransition(),
                                Factory.Code("foo")
                                .AsImplicitExpression(CSharpCodeParser.DefaultKeywords)
                                .Accepts(AcceptedCharactersInternal.NonWhiteSpace)),
                            BlockFactory.MarkupTagBlock("</p>", AcceptedCharactersInternal.None),
                            Factory.Markup(Environment.NewLine).Accepts(AcceptedCharactersInternal.None)),
                        Factory.Code("}").AsStatement()
                        ),
                    RazorDiagnosticFactory.CreateParsing_UnterminatedStringLiteral(
                        new SourceSpan(new SourceLocation(23 + Environment.NewLine.Length, 1, 14), contentLength: 1)));
 }