protected RazorCommentBlockSyntax ParseRazorComment() { if (!Language.KnowsTokenType(KnownTokenType.CommentStart) || !Language.KnowsTokenType(KnownTokenType.CommentStar) || !Language.KnowsTokenType(KnownTokenType.CommentBody)) { throw new InvalidOperationException(Resources.Language_Does_Not_Support_RazorComment); } RazorCommentBlockSyntax commentBlock; using (PushSpanContextConfig(CommentSpanContextConfig)) { EnsureCurrent(); var start = CurrentStart; Debug.Assert(At(SyntaxKind.RazorCommentTransition)); var startTransition = EatExpectedToken(SyntaxKind.RazorCommentTransition); var startStar = EatExpectedToken(SyntaxKind.RazorCommentStar); var comment = GetOptionalToken(SyntaxKind.RazorCommentLiteral); if (comment == null) { comment = SyntaxFactory.MissingToken(SyntaxKind.RazorCommentLiteral); } var endStar = GetOptionalToken(SyntaxKind.RazorCommentStar); if (endStar == null) { var diagnostic = RazorDiagnosticFactory.CreateParsing_RazorCommentNotTerminated( new SourceSpan(start, contentLength: 2 /* @* */)); endStar = SyntaxFactory.MissingToken(SyntaxKind.RazorCommentStar, diagnostic); Context.ErrorSink.OnError(diagnostic); } var endTransition = GetOptionalToken(SyntaxKind.RazorCommentTransition); if (endTransition == null) { if (!endStar.IsMissing) { var diagnostic = RazorDiagnosticFactory.CreateParsing_RazorCommentNotTerminated( new SourceSpan(start, contentLength: 2 /* @* */)); Context.ErrorSink.OnError(diagnostic); endTransition = SyntaxFactory.MissingToken(SyntaxKind.RazorCommentTransition, diagnostic); } endTransition = SyntaxFactory.MissingToken(SyntaxKind.RazorCommentTransition); } commentBlock = SyntaxFactory.RazorCommentBlock(startTransition, startStar, comment, endStar, endTransition); // Make sure we generate a marker symbol after a comment if necessary. if (!comment.IsMissing || !endStar.IsMissing || !endTransition.IsMissing) { Context.LastAcceptedCharacters = AcceptedCharactersInternal.None; } } InitializeContext(SpanContext); return(commentBlock); }
protected void RazorComment() { if (!Language.KnowsTokenType(KnownTokenType.CommentStart) || !Language.KnowsTokenType(KnownTokenType.CommentStar) || !Language.KnowsTokenType(KnownTokenType.CommentBody)) { throw new InvalidOperationException(Resources.Language_Does_Not_Support_RazorComment); } OutputSpanBeforeRazorComment(); using (PushSpanConfig(CommentSpanConfig)) { using (Context.Builder.StartBlock(BlockKindInternal.Comment)) { Context.Builder.CurrentBlock.ChunkGenerator = new RazorCommentChunkGenerator(); var start = CurrentStart; Expected(KnownTokenType.CommentStart); Output(SpanKindInternal.Transition, AcceptedCharactersInternal.None); Expected(KnownTokenType.CommentStar); Output(SpanKindInternal.MetaCode, AcceptedCharactersInternal.None); Optional(KnownTokenType.CommentBody); AddMarkerTokenIfNecessary(); Output(SpanKindInternal.Comment); var errorReported = false; if (!Optional(KnownTokenType.CommentStar)) { errorReported = true; Context.ErrorSink.OnError( RazorDiagnosticFactory.CreateParsing_RazorCommentNotTerminated( new SourceSpan(start, contentLength: 2 /* @* */))); } else { Output(SpanKindInternal.MetaCode, AcceptedCharactersInternal.None); } if (!Optional(KnownTokenType.CommentStart)) { if (!errorReported) { errorReported = true; Context.ErrorSink.OnError( RazorDiagnosticFactory.CreateParsing_RazorCommentNotTerminated( new SourceSpan(start, contentLength: 2 /* @* */))); } } else { Output(SpanKindInternal.Transition, AcceptedCharactersInternal.None); } } } Initialize(Span); }
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))); }
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), "(", ")")); }
public void UnterminatedRazorCommentInVerbatimBlock() { ParseDocumentTest("@{@*", new MarkupBlock( Factory.EmptyHtml(), new StatementBlock( Factory.CodeTransition(), Factory.MetaCode("{").Accepts(AcceptedCharactersInternal.None), Factory.EmptyCSharp() .AsStatement() .AutoCompleteWith("}"), 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(2, 0, 2), contentLength: 2)), RazorDiagnosticFactory.CreateParsing_ExpectedEndOfBlockBeforeEOF( new SourceSpan(new SourceLocation(1, 0, 1), contentLength: 1), Resources.BlockName_Code, "}", "{")); }