示例#1
0
            public override SyntaxNode VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node)
            {
                if (_rewriteAsMarkup)
                {
                    var builder = SyntaxListBuilder <RazorSyntaxNode> .Create();

                    // Convert transition.
                    // Change to a MarkupChunkGenerator so that the '@' \ parenthesis is generated as part of the output.
                    var context    = node.GetSpanContext();
                    var newContext = new SpanContext(new MarkupChunkGenerator(), context?.EditHandler ?? SpanEditHandler.CreateDefault((content) => Enumerable.Empty <Syntax.InternalSyntax.SyntaxToken>()));

                    var expression = SyntaxFactory.CSharpExpressionLiteral(new SyntaxList <SyntaxToken>(node.Transition.Transition)).WithSpanContext(newContext);
                    expression = (CSharpExpressionLiteralSyntax)VisitCSharpExpressionLiteral(expression);
                    builder.Add(expression);

                    var rewrittenBody = (CSharpCodeBlockSyntax)VisitCSharpCodeBlock(((CSharpImplicitExpressionBodySyntax)node.Body).CSharpCode);
                    builder.AddRange(rewrittenBody.Children);

                    // Since the original transition is part of the body, we need something to take it's place.
                    var transition = SyntaxFactory.CSharpTransition(SyntaxFactory.MissingToken(SyntaxKind.Transition));

                    var rewrittenCodeBlock = SyntaxFactory.CSharpCodeBlock(builder.ToList());
                    return(SyntaxFactory.CSharpImplicitExpression(transition, SyntaxFactory.CSharpImplicitExpressionBody(rewrittenCodeBlock)));
                }

                return(base.VisitCSharpImplicitExpression(node));
            }
示例#2
0
            public override void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node)
            {
                if (_builder.Current is CSharpExpressionAttributeValueIntermediateNode)
                {
                    base.VisitCSharpImplicitExpression(node);
                    return;
                }

                var expressionNode = new CSharpExpressionIntermediateNode();

                _builder.Push(expressionNode);

                base.VisitCSharpImplicitExpression(node);

                _builder.Pop();

                if (expressionNode.Children.Count > 0)
                {
                    var sourceRangeStart = expressionNode
                                           .Children
                                           .FirstOrDefault(child => child.Source != null)
                                           ?.Source;

                    if (sourceRangeStart != null)
                    {
                        var contentLength = expressionNode.Children.Sum(child => child.Source?.Length ?? 0);

                        expressionNode.Source = new SourceSpan(
                            sourceRangeStart.Value.FilePath ?? SourceDocument.FilePath,
                            sourceRangeStart.Value.AbsoluteIndex,
                            sourceRangeStart.Value.LineIndex,
                            sourceRangeStart.Value.CharacterIndex,
                            contentLength);
                    }
                }
            }
示例#3
0
 public override void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node)
 {
     WriteBlock(node, FormattingBlockKind.Expression, base.VisitCSharpImplicitExpression);
 }
示例#4
0
 public override void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node)
 {
     AddSemanticRange(node.Transition, RazorSemanticTokensLegend.RazorTransition);
     Visit(node.Body);
 }
示例#5
0
 public override void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node)
 {
     WriteBlock(node, BlockKindInternal.Expression, base.VisitCSharpImplicitExpression);
 }