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)); }
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); } } }
public override void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) { WriteBlock(node, FormattingBlockKind.Expression, base.VisitCSharpImplicitExpression); }
public override void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) { AddSemanticRange(node.Transition, RazorSemanticTokensLegend.RazorTransition); Visit(node.Body); }
public override void VisitCSharpImplicitExpression(CSharpImplicitExpressionSyntax node) { WriteBlock(node, BlockKindInternal.Expression, base.VisitCSharpImplicitExpression); }