Example #1
0
 public void InnerImplicitExpressionDoesNotAcceptDotAfterAt()
 {
     ParseBlockTest("{@.}",
                    new StatementBlock(
                        Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                        Factory.EmptyCSharp().AsStatement(),
                        new ExpressionBlock(
                            Factory.CodeTransition(),
                            Factory.EmptyCSharp().AsImplicitExpression(KeywordSet, acceptTrailingDot: true).Accepts(AcceptedCharacters.NonWhiteSpace)
                            ),
                        Factory.Code(".").AsStatement(),
                        Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
                    designTimeParser: true,
                    expectedErrors: new[]
     {
         new RazorError(RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("."), new SourceLocation(2, 0, 2))
     });
 }
Example #2
0
 public void TagHelperPrefixDirective_StartQuoteRequiresDoubleQuotesAroundValue()
 {
     ParseBlockTest("@tagHelperPrefix \"Foo",
                    new DirectiveBlock(
                        Factory.CodeTransition(),
                        Factory
                        .MetaCode(SyntaxConstants.CSharp.TagHelperPrefixKeyword + " ")
                        .Accepts(AcceptedCharacters.None),
                        Factory.Code("\"Foo")
                        .AsTagHelperPrefixDirective("Foo")),
                    new RazorError(
                        RazorResources.ParseError_Unterminated_String_Literal,
                        absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 1),
                    new RazorError(
                        RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
                            SyntaxConstants.CSharp.TagHelperPrefixKeyword),
                        absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 4));
 }
Example #3
0
 public void ParseBlockCorrectlyRecoversFromMissingCloseParenInExpressionWithinCode()
 {
     ParseBlockTest(@"{String.Format(<html></html>}",
                    new StatementBlock(
                        Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                        Factory.Code("String.Format(")
                        .AsStatement(),
                        new MarkupBlock(
                            BlockFactory.MarkupTagBlock("<html>", AcceptedCharacters.None),
                            BlockFactory.MarkupTagBlock("</html>", AcceptedCharacters.None)),
                        Factory.EmptyCSharp().AsStatement(),
                        Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
                    expectedErrors: new[] {
         new RazorError(
             RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
             14, 0, 14)
     });
 }
Example #4
0
 public void ParseBlockResumesIfStatementAfterOpenParen()
 {
     ParseBlockTest("if(" + Environment.NewLine
                    + "else { <p>Foo</p> }",
                    new StatementBlock(
                        Factory.Code("if(\r\nelse {").AsStatement(),
                        new MarkupBlock(
                            Factory.Markup(" "),
                            BlockFactory.MarkupTagBlock("<p>", AcceptedCharacters.None),
                            Factory.Markup("Foo"),
                            BlockFactory.MarkupTagBlock("</p>", AcceptedCharacters.None),
                            Factory.Markup(" ").Accepts(AcceptedCharacters.None)),
                        Factory.Code("}").AsStatement().Accepts(AcceptedCharacters.None)
                        ),
                    new RazorError(
                        RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"),
                        new SourceLocation(2, 0, 2)));
 }
Example #5
0
        /// <summary>
        /// Subtracts two <see cref="SourceLocation"/>s.
        /// </summary>
        /// <param name="left">The left operand.</param>
        /// <param name="right">The right operand.</param>
        /// <returns>A <see cref="SourceLocation"/> that is the difference of the left and right operands.</returns>
        /// <exception cref="ArgumentException">if the <see cref="FilePath"/> of the left and right operands
        /// are different.</exception>
        public static SourceLocation operator -(SourceLocation left, SourceLocation right)
        {
            if (!string.Equals(left.FilePath, right.FilePath, StringComparison.Ordinal))
            {
                throw new ArgumentException(
                          RazorResources.FormatSourceLocationFilePathDoesNotMatch(nameof(SourceLocation), "-"),
                          nameof(right));
            }

            var characterIndex = left.LineIndex != right.LineIndex ?
                                 left.CharacterIndex : left.CharacterIndex - right.CharacterIndex;

            return(new SourceLocation(
                       filePath: null,
                       absoluteIndex: left.AbsoluteIndex - right.AbsoluteIndex,
                       lineIndex: left.LineIndex - right.LineIndex,
                       characterIndex: characterIndex));
        }
 public void FunctionsDirectiveAutoCompleteAtStartOfFile()
 {
     ParseBlockTest("@functions{" + Environment.NewLine
                    + "foo",
                    new FunctionsBlock(
                        Factory.CodeTransition("@")
                        .Accepts(AcceptedCharacters.None),
                        Factory.MetaCode("functions{")
                        .Accepts(AcceptedCharacters.None),
                        Factory.Code("\r\nfoo")
                        .AsFunctionsBody()
                        .With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString)
     {
         AutoCompleteString = "}"
     })),
                    new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"),
                                   1, 0, 1));
 }
Example #7
0
 public void RemoveTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue()
 {
     ParseBlockTest("@removeTagHelper Foo\"",
                    new DirectiveBlock(
                        Factory.CodeTransition(),
                        Factory.MetaCode(SyntaxConstants.CSharp.RemoveTagHelperKeyword + " ")
                        .Accepts(AcceptedCharacters.None),
                        Factory.Code("Foo\"")
                        .AsStatement()
                        .Accepts(AcceptedCharacters.AnyExceptNewline)),
                    new RazorError(
                        RazorResources.ParseError_Unterminated_String_Literal,
                        absoluteIndex: 20, lineIndex: 0, columnIndex: 20, length: 1),
                    new RazorError(
                        RazorResources.FormatParseError_DirectiveMustBeSurroundedByQuotes(
                            SyntaxConstants.CSharp.RemoveTagHelperKeyword),
                        absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 4));
 }
Example #8
0
 public void AddTagHelperDirective_EndQuoteRequiresDoubleQuotesAroundValue()
 {
     ParseBlockTest("@addTagHelper Foo\"",
                    new DirectiveBlock(
                        Factory.CodeTransition(),
                        Factory.MetaCode(SyntaxConstants.CSharp.AddTagHelperKeyword + " ")
                        .Accepts(AcceptedCharacters.None),
                        Factory.Code("Foo\"")
                        .AsAddTagHelper("Foo")
                        .Accepts(AcceptedCharacters.AnyExceptNewline)),
                    new RazorError(
                        RazorResources.ParseError_Unterminated_String_Literal,
                        absoluteIndex: 17, lineIndex: 0, columnIndex: 17, length: 1),
                    new RazorError(
                        RazorResources.FormatParseError_IncompleteQuotesAroundDirective(
                            SyntaxConstants.CSharp.AddTagHelperKeyword),
                        absoluteIndex: 14, lineIndex: 0, columnIndex: 14, length: 4));
 }
        private void ExpectCodeBlock(Block block)
        {
            if (!EndOfFile)
            {
                // Check for "{" to make sure we're at a block
                if (!At(CSharpSymbolType.LeftBrace))
                {
                    Context.OnError(
                        CurrentLocation,
                        RazorResources.FormatParseError_SingleLine_ControlFlowStatements_Not_Allowed(
                            Language.GetSample(CSharpSymbolType.LeftBrace),
                            CurrentSymbol.Content),
                        CurrentSymbol.Content.Length);
                }

                // Parse the statement and then we're done
                Statement(block);
            }
        }
        protected internal bool Balance(BalancingModes mode)
        {
            var left  = CurrentSymbol.Type;
            var right = Language.FlipBracket(left);
            var start = CurrentLocation;

            AcceptAndMoveNext();
            if (EndOfFile && ((mode & BalancingModes.NoErrorOnFailure) != BalancingModes.NoErrorOnFailure))
            {
                Context.OnError(
                    start,
                    RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF(
                        Language.GetSample(left),
                        Language.GetSample(right)),
                    length: 1 /* { OR } */);
            }

            return(Balance(mode, left, right, start));
        }
 public void SectionDirectiveAutoCompleteAtStartOfFile()
 {
     ParseBlockTest("@section Header {" + Environment.NewLine
                    + "<p>Foo</p>",
                    new SectionBlock(new SectionCodeGenerator("Header"),
                                     Factory.CodeTransition(),
                                     Factory.MetaCode("section Header {")
                                     .AutoCompleteWith("}", atEndOfSpan: true)
                                     .Accepts(AcceptedCharacters.Any),
                                     new MarkupBlock(
                                         Factory.Markup("\r\n"),
                                         new MarkupTagBlock(
                                             Factory.Markup("<p>")),
                                         Factory.Markup("Foo"),
                                         new MarkupTagBlock(
                                             Factory.Markup("</p>")))),
                    new RazorError(RazorResources.FormatParseError_Expected_X("}"),
                                   29, 1, 10));
 }
Example #12
0
 public void ParseSectionBlockReportsErrorAndTerminatesSectionBlockIfKeywordNotFollowedByIdentifierStartCharacter()
 {
     ParseDocumentTest("@section 9 { <p>Foo</p> }",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new SectionBlock(new SectionChunkGenerator(string.Empty),
                                            Factory.CodeTransition(),
                                            Factory.MetaCode("section ")),
                           Factory.Markup("9 { "),
                           new MarkupTagBlock(
                               Factory.Markup("<p>")),
                           Factory.Markup("Foo"),
                           new MarkupTagBlock(
                               Factory.Markup("</p>")),
                           Factory.Markup(" }")),
                       new RazorError(
                           RazorResources.FormatParseError_Unexpected_Character_At_Section_Name_Start(RazorResources.FormatErrorComponent_Character("9")),
                           9, 0, 9));
 }
Example #13
0
 public void ParseBlockMethodProducesErrorIfEOFAfterTransitionInEmbeddedExpression()
 {
     ParseBlockTest("{" + Environment.NewLine
                    + "    @",
                    new StatementBlock(
                        Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                        Factory.Code("\r\n    ").AsStatement(),
                        new ExpressionBlock(
                            Factory.CodeTransition(),
                            Factory.EmptyCSharp()
                            .AsImplicitExpression(CSharpCodeParser.DefaultKeywords, acceptTrailingDot: true)
                            .Accepts(AcceptedCharacters.NonWhiteSpace)),
                        Factory.EmptyCSharp().AsStatement()
                        ),
                    new RazorError(RazorResources.ParseError_Unexpected_EndOfFile_At_Start_Of_CodeBlock, 8, 1, 5),
                    new RazorError(
                        RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"),
                        SourceLocation.Zero));
 }
Example #14
0
 public void VerbatimBlockAutoCompleteAtEOF()
 {
     ParseBlockTest("@{",
                    new StatementBlock(
                        Factory.CodeTransition(),
                        Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                        Factory.EmptyCSharp()
                        .AsStatement()
                        .With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString)
     {
         AutoCompleteString = "}"
     })
                        ),
                    new RazorError(
                        RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(
                            RazorResources.BlockName_Code, "}", "{"),
                        new SourceLocation(1, 0, 1),
                        length: 1));
 }
Example #15
0
 public void ParseBlockHandlesOpenAngleAtEof()
 {
     ParseDocumentTest("@{" + Environment.NewLine
                       + "<",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new StatementBlock(
                               Factory.CodeTransition(),
                               Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                               Factory.Code(Environment.NewLine)
                               .AsStatement()
                               .AutoCompleteWith("}"),
                               new MarkupBlock(
                                   new MarkupTagBlock(
                                       Factory.Markup("<"))))),
                       new RazorError(
                           RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"),
                           1, 0, 1));
 }
Example #16
0
        private void ExplicitExpression()
        {
            var block = new Block(RazorResources.BlockName_ExplicitExpression, CurrentLocation);

            Assert(CSharpSymbolType.LeftParenthesis);
            AcceptAndMoveNext();
            Span.EditHandler.AcceptedCharacters = AcceptedCharacters.None;
            Span.ChunkGenerator = SpanChunkGenerator.Null;
            Output(SpanKind.MetaCode);
            using (PushSpanConfig(ConfigureExplicitExpressionSpan))
            {
                var success = Balance(
                    BalancingModes.BacktrackOnFailure | BalancingModes.NoErrorOnFailure | BalancingModes.AllowCommentsAndTemplates,
                    CSharpSymbolType.LeftParenthesis,
                    CSharpSymbolType.RightParenthesis,
                    block.Start);

                if (!success)
                {
                    AcceptUntil(CSharpSymbolType.LessThan);
                    Context.OnError(block.Start, RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(block.Name, ")", "("));
                }

                // If necessary, put an empty-content marker symbol here
                if (Span.Symbols.Count == 0)
                {
                    Accept(new CSharpSymbol(CurrentLocation, string.Empty, CSharpSymbolType.Unknown));
                }

                // Output the content span and then capture the ")"
                Output(SpanKind.Code);
            }
            Optional(CSharpSymbolType.RightParenthesis);
            if (!EndOfFile)
            {
                PutCurrentBack();
            }
            Span.EditHandler.AcceptedCharacters = AcceptedCharacters.None;
            Span.ChunkGenerator = SpanChunkGenerator.Null;
            CompleteBlock(insertMarkerIfNecessary: false);
            Output(SpanKind.MetaCode);
        }
Example #17
0
 public void ParseHelperCorrectlyParsesIncompleteHelperPreceedingCodeBlock()
 {
     ParseDocumentTest("@helper" + Environment.NewLine
                       + "@{}",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new HelperBlock(
                               Factory.CodeTransition(),
                               Factory.MetaCode("helper")),
                           Factory.Markup("\r\n"),
                           new StatementBlock(
                               Factory.CodeTransition(),
                               Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                               Factory.EmptyCSharp().AsStatement(),
                               Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
                           Factory.EmptyHtml()),
                       new RazorError(
                           RazorResources.FormatParseError_Unexpected_Character_At_Helper_Name_Start(RazorResources.ErrorComponent_Newline),
                           7, 0, 7));
 }
Example #18
0
 public void ParseHelperOutputsErrorButContinuesIfLParenFoundAfterHelperKeyword()
 {
     ParseDocumentTest("@helper () {",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new HelperBlock(new HelperCodeGenerator(new LocationTagged <string>("() {", 8, 0, 8), headerComplete: true),
                                           Factory.CodeTransition(),
                                           Factory.MetaCode("helper ").Accepts(AcceptedCharacters.None),
                                           Factory.Code("() {").Hidden().Accepts(AcceptedCharacters.None),
                                           new StatementBlock(
                                               Factory.EmptyCSharp()
                                               .AsStatement()
                                               .AutoCompleteWith("}")))),
                       new RazorError(
                           RazorResources.FormatParseError_Unexpected_Character_At_Helper_Name_Start(RazorResources.FormatErrorComponent_Character("(")),
                           8, 0, 8),
                       new RazorError(
                           RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("helper", "}", "{"),
                           1, 0, 1));
 }
 public void InnerImplicitExpressionWithOnlySingleAtOutputsZeroLengthCodeSpan()
 {
     ParseBlockTest("{@}",
                    new StatementBlock(
                        Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                        Factory.EmptyCSharp()
                        .AsStatement()
                        .AutoCompleteWith(autoCompleteString: null),
                        new ExpressionBlock(
                            Factory.CodeTransition(),
                            Factory.EmptyCSharp().AsImplicitExpression(KeywordSet, acceptTrailingDot: true).Accepts(AcceptedCharacters.NonWhiteSpace)
                            ),
                        Factory.EmptyCSharp().AsStatement(),
                        Factory.MetaCode("}").Accepts(AcceptedCharacters.None)),
                    designTimeParser: true,
                    expectedErrors: new[]
     {
         new RazorError(RazorResources.FormatParseError_Unexpected_Character_At_Start_Of_CodeBlock_CS("}"), new SourceLocation(2, 0, 2))
     });
 }
Example #20
0
 public void FunctionsDirectiveAutoCompleteAtEOF()
 {
     ParseBlockTest(
         "@functions{",
         new FunctionsBlock(
             Factory.CodeTransition("@")
             .Accepts(AcceptedCharacters.None),
             Factory.MetaCode("functions{")
             .Accepts(AcceptedCharacters.None),
             Factory.EmptyCSharp()
             .AsFunctionsBody()
             .With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString)
     {
         AutoCompleteString = "}"
     })),
         new RazorError(
             RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("functions", "}", "{"),
             new SourceLocation(10, 0, 10),
             length: 1));
 }
Example #21
0
 public void SectionDirectiveAutoCompleteAtStartOfFile()
 {
     ParseBlockTest("@section Header {" + Environment.NewLine
                    + "<p>Foo</p>",
                    new SectionBlock(new SectionChunkGenerator("Header"),
                                     Factory.CodeTransition(),
                                     Factory.MetaCode("section Header {")
                                     .AutoCompleteWith("}", atEndOfSpan: true)
                                     .Accepts(AcceptedCharacters.Any),
                                     new MarkupBlock(
                                         Factory.Markup(Environment.NewLine),
                                         new MarkupTagBlock(
                                             Factory.Markup("<p>")),
                                         Factory.Markup("Foo"),
                                         new MarkupTagBlock(
                                             Factory.Markup("</p>")))),
                    new RazorError(
                        RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("section", "}", "{"),
                        new SourceLocation(16, 0, 16),
                        length: 1));
 }
        private void CodeBlock(bool acceptTerminatingBrace, Block block)
        {
            EnsureCurrent();
            while (!EndOfFile && !At(CSharpSymbolType.RightBrace))
            {
                // Parse a statement, then return here
                Statement();
                EnsureCurrent();
            }

            if (EndOfFile)
            {
                Context.OnError(block.Start, RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(block.Name, '}', '{'));
            }
            else if (acceptTerminatingBrace)
            {
                Assert(CSharpSymbolType.RightBrace);
                Span.EditHandler.AcceptedCharacters = AcceptedCharacters.None;
                AcceptAndMoveNext();
            }
        }
Example #23
0
 public void ParseSectionBlockHandlesUnterminatedSection()
 {
     ParseDocumentTest("@section foo { <p>Foo{}</p>",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new SectionBlock(new SectionChunkGenerator("foo"),
                                            Factory.CodeTransition(),
                                            Factory.MetaCode("section foo {")
                                            .AutoCompleteWith("}", atEndOfSpan: true),
                                            new MarkupBlock(
                                                Factory.Markup(" "),
                                                new MarkupTagBlock(
                                                    Factory.Markup("<p>")),
                                                // Need to provide the markup span as fragments, since the parser will split the {} into separate symbols.
                                                Factory.Markup("Foo", "{", "}"),
                                                new MarkupTagBlock(
                                                    Factory.Markup("</p>"))))),
                       new RazorError(
                           RazorResources.FormatParseError_Expected_X("}"),
                           27, 0, 27));
 }
 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(AcceptedCharacters.None),
                                   Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar)
                                   .Accepts(AcceptedCharacters.None),
                                   Factory.Span(SpanKind.Comment, new CSharpSymbol(
                                                    Factory.LocationTracker.CurrentLocation,
                                                    string.Empty,
                                                    CSharpSymbolType.Unknown))
                                   .Accepts(AcceptedCharacters.Any)))),
                       new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 5, 0, 5),
                       new RazorError(RazorResources.FormatParseError_Expected_CloseBracket_Before_EOF("(", ")"), 4, 0, 4));
 }
 public void RazorCommentInVerbatimBlock()
 {
     ParseDocumentTest("@{" + Environment.NewLine
                       + "    <text" + Environment.NewLine
                       + "    @**@" + Environment.NewLine
                       + "}",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new StatementBlock(
                               Factory.CodeTransition(),
                               Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                               Factory.Code(Environment.NewLine)
                               .AsStatement()
                               .AutoCompleteWith("}"),
                               new MarkupBlock(
                                   new MarkupTagBlock(
                                       Factory.MarkupTransition("<text").Accepts(AcceptedCharacters.Any)),
                                   Factory.Markup(Environment.NewLine).Accepts(AcceptedCharacters.None),
                                   Factory.Markup("    ").With(SpanChunkGenerator.Null),
                                   new CommentBlock(
                                       Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
                                       .Accepts(AcceptedCharacters.None),
                                       Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
                                       .Accepts(AcceptedCharacters.None),
                                       Factory.Span(SpanKind.Comment, new HtmlSymbol(
                                                        Factory.LocationTracker.CurrentLocation,
                                                        string.Empty,
                                                        HtmlSymbolType.Unknown))
                                       .Accepts(AcceptedCharacters.Any),
                                       Factory.MetaMarkup("*", HtmlSymbolType.RazorCommentStar)
                                       .Accepts(AcceptedCharacters.None),
                                       Factory.MarkupTransition(HtmlSymbolType.RazorCommentTransition)
                                       .Accepts(AcceptedCharacters.None)),
                                   Factory.Markup(Environment.NewLine).With(SpanChunkGenerator.Null),
                                   Factory.Markup("}")))),
                       new RazorError(RazorResources.ParseError_TextTagCannotContainAttributes, 6 + Environment.NewLine.Length, 1, 4),
                       new RazorError(RazorResources.FormatParseError_MissingEndTag("text"), 6 + Environment.NewLine.Length, 1, 4),
                       new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
 }
 private void ValidateParentAllowsContent(Span child, ErrorSink errorSink)
 {
     if (HasAllowedChildren())
     {
         var content = child.Content;
         if (!string.IsNullOrWhiteSpace(content))
         {
             var trimmedStart          = content.TrimStart();
             var whitespace            = content.Substring(0, content.Length - trimmedStart.Length);
             var errorStart            = SourceLocation.Advance(child.Start, whitespace);
             var length                = trimmedStart.TrimEnd().Length;
             var allowedChildren       = _currentTagHelperTracker.AllowedChildren;
             var allowedChildrenString = string.Join(", ", allowedChildren);
             errorSink.OnError(
                 errorStart,
                 RazorResources.FormatTagHelperParseTreeRewriter_CannotHaveNonTagContent(
                     _currentTagHelperTracker.TagName,
                     allowedChildrenString),
                 length);
         }
     }
 }
Example #27
0
 public void ParseHelperStatementGivesWhitespaceAfterOpenBraceToMarkupInDesignMode()
 {
     ParseDocumentTest("@helper Foo(string foo) {    " + Environment.NewLine
                       + "    ",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new HelperBlock(new HelperCodeGenerator(new LocationTagged <string>("Foo(string foo) {", 8, 0, 8), headerComplete: true),
                                           Factory.CodeTransition(),
                                           Factory.MetaCode("helper ").Accepts(AcceptedCharacters.None),
                                           Factory.Code(@"Foo(string foo) {").Hidden().Accepts(AcceptedCharacters.None),
                                           new StatementBlock(
                                               Factory.Code("    \r\n    ")
                                               .AsStatement()
                                               .AutoCompleteWith("}")))),
                       designTimeParser: true,
                       expectedErrors: new[]
     {
         new RazorError(
             RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("helper", "}", "{"),
             new SourceLocation(1, 0, 1))
     });
 }
Example #28
0
        private static bool IsEnabled()
        {
            if (_enabled == null)
            {
                bool enabled;
                if (Boolean.TryParse(Environment.GetEnvironmentVariable("RAZOR_EDITOR_TRACE"), out enabled))
                {
#if NET451
                    // No Trace in CoreCLR

                    Trace.WriteLine(RazorResources.FormatTrace_Startup(
                                        enabled ? RazorResources.Trace_Enabled : RazorResources.Trace_Disabled));
#endif
                    _enabled = enabled;
                }
                else
                {
                    _enabled = false;
                }
            }
            return(_enabled.Value);
        }
Example #29
0
 public void HelperDirectiveAutoCompleteAtEOF()
 {
     ParseBlockTest("@helper Strong(string value) {",
                    new HelperBlock(new HelperCodeGenerator(new LocationTagged <string>("Strong(string value) {", 8, 0, 8), headerComplete: true),
                                    Factory.CodeTransition(),
                                    Factory.MetaCode("helper ")
                                    .Accepts(AcceptedCharacters.None),
                                    Factory.Code("Strong(string value) {")
                                    .Hidden()
                                    .Accepts(AcceptedCharacters.None),
                                    new StatementBlock(
                                        Factory.EmptyCSharp()
                                        .AsStatement()
                                        .With(new AutoCompleteEditHandler(CSharpLanguageCharacteristics.Instance.TokenizeString)
     {
         AutoCompleteString = "}"
     })
                                        )
                                    ),
                    new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF("helper", "}", "{"),
                                   1, 0, 1));
 }
Example #30
0
 public void UnterminatedRazorCommentInVerbatimBlock()
 {
     ParseDocumentTest("@{@*",
                       new MarkupBlock(
                           Factory.EmptyHtml(),
                           new StatementBlock(
                               Factory.CodeTransition(),
                               Factory.MetaCode("{").Accepts(AcceptedCharacters.None),
                               Factory.EmptyCSharp()
                               .AsStatement(),
                               new CommentBlock(
                                   Factory.CodeTransition(CSharpSymbolType.RazorCommentTransition)
                                   .Accepts(AcceptedCharacters.None),
                                   Factory.MetaCode("*", CSharpSymbolType.RazorCommentStar)
                                   .Accepts(AcceptedCharacters.None),
                                   Factory.Span(SpanKind.Comment, new CSharpSymbol(Factory.LocationTracker.CurrentLocation,
                                                                                   String.Empty,
                                                                                   CSharpSymbolType.Unknown))
                                   .Accepts(AcceptedCharacters.Any)))),
                       new RazorError(RazorResources.ParseError_RazorComment_Not_Terminated, 2, 0, 2),
                       new RazorError(RazorResources.FormatParseError_Expected_EndOfBlock_Before_EOF(RazorResources.BlockName_Code, "}", "{"), 1, 0, 1));
 }