Skip to content

Commit bb9fc37

Browse files
Remove syntax annotations from the Razor compiler (#12345)
> [!TIP] > I recommend reviewing this PR commit-by-commit. Each commit represents a distinct change. Syntax annotations were originally added to Roslyn's syntax model to support the IDE. When writing IDE code, it can be very useful to mark a node, perform a tree transformation, and then use the annotation to get back to that node. However, the Razor tooling layer doesn't perform tree transformations in that way. In fact, the only uses of syntax annotations are in the compiler itself where annotations are used to tuck compiler data onto nodes. This results in a lot of overhead for a handful of data properties that can just be part of the syntax model. This change does exactly that. It takes compiler data stored as annotations -- `SpanEditHandler`, `IsMarkupTransition`, `DirectiveDescriptor`, `TagHelperInfo`, and `TagHelperAttributeInfo` -- and moves that data onto the syntax model. With that complete, syntax annotations are pure overhead and can be deleted completely. ---- CI Build: https://dev.azure.com/dnceng/internal/_build/results?buildId=2818010&view=results Test Insertion: https://dev.azure.com/devdiv/DevDiv/_git/VS/pullrequest/680258 Toolset Run: https://dev.azure.com/dnceng/internal/_build/results?buildId=2818016&view=results
2 parents 2d14fbb + 054202c commit bb9fc37

File tree

82 files changed

+1303
-1779
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

82 files changed

+1303
-1779
lines changed

src/Compiler/Microsoft.AspNetCore.Razor.Language/legacyTest/Legacy/ImplicitExpressionEditHandlerTest.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,8 @@ private static Syntax.MarkupTextLiteralSyntax GetSyntaxNode(SourceLocation start
451451
{
452452
builder.Add(token);
453453
}
454-
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null).CreateRed(parent: null, position: start.AbsoluteIndex);
454+
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null)
455+
.CreateRed(parent: null, position: start.AbsoluteIndex);
455456

456457
return (Syntax.MarkupTextLiteralSyntax)node;
457458
}

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/DirectiveTokenEditHandlerTest.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,7 @@ private static CSharpStatementLiteralSyntax GetSyntaxNode(DirectiveTokenEditHand
7272
builder.Add(new SyntaxToken(token));
7373
}
7474

75-
var node = SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null);
76-
77-
return node.WithEditHandler(editHandler);
75+
return SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler);
7876
}
7977

8078
private class TestDirectiveTokenEditHandler : DirectiveTokenEditHandler

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Legacy/CodeBlockEditHandlerTest.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,7 @@ private static SyntaxNode GetSpan(SourceLocation start, string content)
289289
{
290290
builder.Add(new SyntaxToken(token));
291291
}
292-
var node = SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null);
293292

294-
return node;
293+
return SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null);
295294
}
296295
}

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/SourceChangeTest.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public void GetEditedContent_SyntaxNode_ReturnsNewContent()
110110
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "Hello, "));
111111
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "World"));
112112

113-
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null).CreateRed();
113+
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null).CreateRed();
114114

115115
var change = new SourceChange(2, 2, "heyo");
116116

@@ -129,7 +129,7 @@ public void GetOffSet_SpanIsOwner_ReturnsOffset()
129129
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "Hello, "));
130130
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "World"));
131131

132-
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null).CreateRed(null, 13);
132+
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null).CreateRed(null, 13);
133133

134134
var change = new SourceChange(15, 2, "heyo");
135135

@@ -148,7 +148,7 @@ public void GetOffSet_SpanIsNotOwnerOfChange_ThrowsException()
148148
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "Hello, "));
149149
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "World"));
150150

151-
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null).CreateRed(null, 13);
151+
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null).CreateRed(null, 13);
152152

153153
var change = new SourceChange(12, 2, "heyo");
154154

@@ -167,7 +167,7 @@ public void GetOrigninalText_SpanIsOwner_ReturnsContent()
167167
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "Hello, "));
168168
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "World"));
169169

170-
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null).CreateRed(null, 13);
170+
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null).CreateRed(null, 13);
171171

172172
var change = new SourceChange(15, 2, "heyo");
173173

@@ -186,7 +186,7 @@ public void GetOrigninalText_SpanIsOwner_ReturnsContent_ZeroLengthSpan()
186186
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "Hello, "));
187187
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "World"));
188188

189-
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null).CreateRed(null, 13);
189+
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null).CreateRed(null, 13);
190190

191191
var change = new SourceChange(15, 0, "heyo");
192192

src/Compiler/Microsoft.AspNetCore.Razor.Language/test/Syntax/SyntaxListTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ private static MarkupTextLiteralSyntax CreateMarkupTextLiteral(params ReadOnlySp
1515
using var builder = new PooledArrayBuilder<SyntaxToken>(tokens.Length);
1616
builder.AddRange(tokens);
1717

18-
return SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null);
18+
return SyntaxFactory.MarkupTextLiteral(builder.ToList());
1919
}
2020

2121
private static readonly SyntaxToken s_openAngle = SyntaxFactory.Token(SyntaxKind.OpenAngle, "<");

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultDirectiveSyntaxTreePass.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ public override SyntaxNode VisitRazorDirective(RazorDirectiveSyntax node)
6969
{
7070
_cancellationToken.ThrowIfCancellationRequested();
7171

72-
if (node.DirectiveDescriptor?.Directive != SectionDirective.Directive.Directive)
72+
if (!node.IsDirective(SectionDirective.Directive))
7373
{
7474
// We only want to track the nesting of section directives.
7575
return base.VisitRazorDirective(node);

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/DefaultRazorIntermediateNodeLoweringPhase.cs

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -595,12 +595,13 @@ protected static MarkupTextLiteralSyntax MergeAttributeValue(MarkupLiteralAttrib
595595
node.Prefix?.LiteralTokens,
596596
node.Value?.LiteralTokens);
597597

598-
var rewritten = node.Prefix?.Update(valueTokens, node.Prefix.ChunkGenerator) ?? node.Value?.Update(valueTokens, node.Value.ChunkGenerator);
598+
var rewritten = node.Prefix?.Update(valueTokens) ?? node.Value?.Update(valueTokens);
599+
599600
rewritten = (MarkupTextLiteralSyntax)rewritten?.Green.CreateRed(node, node.Position);
600601

601-
if (rewritten.GetEditHandler() is { } originalEditHandler)
602+
if (rewritten.EditHandler is { } originalEditHandler)
602603
{
603-
rewritten = rewritten.Update(rewritten.LiteralTokens, MarkupChunkGenerator.Instance).WithEditHandler(originalEditHandler);
604+
rewritten = rewritten.Update(rewritten.LiteralTokens, MarkupChunkGenerator.Instance, originalEditHandler);
604605
}
605606

606607
return rewritten;
@@ -633,7 +634,8 @@ public override void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node)
633634
new SyntaxTokenList(node.EqualsToken),
634635
node.ValuePrefix?.LiteralTokens);
635636

636-
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens, chunkGenerator: null).Green.CreateRed(node, node.NamePrefix?.Position ?? node.Name.Position);
637+
var position = node.NamePrefix?.Position ?? node.Name.Position;
638+
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens).Green.CreateRed(node, position);
637639

638640
var name = node.Name.GetContent();
639641
if (!_options.AllowConditionalDataDashAttributes && name.StartsWith("data-", StringComparison.OrdinalIgnoreCase))
@@ -658,14 +660,14 @@ public override void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node)
658660
builder.AddRange(mergedValue.LiteralTokens);
659661
}
660662

661-
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null);
663+
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList());
662664

663665
var mergedLiterals = MergeTokenLists(
664666
prefix?.LiteralTokens,
665667
rewritten.LiteralTokens,
666668
node.ValueSuffix?.LiteralTokens);
667669

668-
var mergedAttribute = SyntaxFactory.MarkupTextLiteral(mergedLiterals, chunkGenerator: null).Green.CreateRed(node.Parent, node.Position);
670+
var mergedAttribute = SyntaxFactory.MarkupTextLiteral(mergedLiterals).Green.CreateRed(node.Parent, node.Position);
669671
Visit(mergedAttribute);
670672

671673
return;
@@ -704,7 +706,7 @@ public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttribute
704706
node.NamePrefix?.LiteralTokens,
705707
node.Name?.LiteralTokens);
706708

707-
var literal = SyntaxFactory.MarkupTextLiteral(literals, chunkGenerator: null).Green.CreateRed(node.Parent, node.Position);
709+
var literal = SyntaxFactory.MarkupTextLiteral(literals).Green.CreateRed(node.Parent, node.Position);
708710

709711
Visit(literal);
710712
}
@@ -889,7 +891,7 @@ public override void VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax
889891
// If we are top level in a tag helper HTML attribute, we want to be rendered as markup.
890892
// This case happens for duplicate non-string bound attributes. They would be initially be categorized as
891893
// CSharp but since they are duplicate, they should just be markup.
892-
var markupLiteral = SyntaxFactory.MarkupTextLiteral(node.LiteralTokens, chunkGenerator: null).Green.CreateRed(node.Parent, node.Position);
894+
var markupLiteral = SyntaxFactory.MarkupTextLiteral(node.LiteralTokens).Green.CreateRed(node.Parent, node.Position);
893895
Visit(markupLiteral);
894896
return;
895897
}
@@ -1184,7 +1186,7 @@ private void VisitAttributeValue(SyntaxNode node)
11841186
builder.AddRange(mergedValue.LiteralTokens);
11851187
}
11861188

1187-
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null).Green.CreateRed(node.Parent, position);
1189+
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList()).Green.CreateRed(node.Parent, position);
11881190
Visit(rewritten);
11891191
}
11901192
else if (children.TryCast<MarkupTextLiteralSyntax>(out var markupLiteralArray))
@@ -1196,7 +1198,7 @@ private void VisitAttributeValue(SyntaxNode node)
11961198
builder.AddRange(literal.LiteralTokens);
11971199
}
11981200

1199-
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null).Green.CreateRed(node.Parent, position);
1201+
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList()).Green.CreateRed(node.Parent, position);
12001202
Visit(rewritten);
12011203
}
12021204
else if (children.TryCast<CSharpExpressionLiteralSyntax>(out var expressionLiteralArray))
@@ -1208,12 +1210,11 @@ private void VisitAttributeValue(SyntaxNode node)
12081210
foreach (var literal in expressionLiteralArray)
12091211
{
12101212
generator = literal.ChunkGenerator;
1211-
editHandler = literal.GetEditHandler();
1213+
editHandler = literal.EditHandler;
12121214
builder.AddRange(literal.LiteralTokens);
12131215
}
12141216

1215-
var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator).Green.CreateRed(node.Parent, position);
1216-
rewritten = editHandler != null ? rewritten.WithEditHandler(editHandler) : rewritten;
1217+
var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator, editHandler).Green.CreateRed(node.Parent, position);
12171218
Visit(rewritten);
12181219
}
12191220
else
@@ -1380,7 +1381,8 @@ public override void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node)
13801381
new SyntaxTokenList(node.EqualsToken),
13811382
node.ValuePrefix?.LiteralTokens);
13821383

1383-
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens, chunkGenerator: null).Green.CreateRed(node, node.NamePrefix?.Position ?? node.Name.Position);
1384+
var position = node.NamePrefix?.Position ?? node.Name.Position;
1385+
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens).Green.CreateRed(node, position);
13841386

13851387
var name = node.Name.GetContent();
13861388
_builder.Push(new HtmlAttributeIntermediateNode()
@@ -1402,7 +1404,8 @@ public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttribute
14021404
node.NamePrefix?.LiteralTokens,
14031405
node.Name.LiteralTokens);
14041406

1405-
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens, chunkGenerator: null).Green.CreateRed(node, node.NamePrefix?.Position ?? node.Name.Position);
1407+
var position = node.NamePrefix?.Position ?? node.Name.Position;
1408+
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens).Green.CreateRed(node, position);
14061409

14071410
var name = node.Name.GetContent();
14081411
_builder.Add(new HtmlAttributeIntermediateNode()
@@ -1492,7 +1495,7 @@ public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
14921495
return;
14931496
}
14941497

1495-
var context = node.GetEditHandler();
1498+
var context = node.EditHandler;
14961499
if (node.ChunkGenerator == SpanChunkGenerator.Null)
14971500
{
14981501
return;
@@ -1699,7 +1702,7 @@ public override void VisitCSharpExpressionLiteral(CSharpExpressionLiteralSyntax
16991702
// If we are top level in a tag helper HTML attribute, we want to be rendered as markup.
17001703
// This case happens for duplicate non-string bound attributes. They would be initially be categorized as
17011704
// CSharp but since they are duplicate, they should just be markup.
1702-
var markupLiteral = SyntaxFactory.MarkupTextLiteral(node.LiteralTokens, chunkGenerator: null).Green.CreateRed(node.Parent, node.Position);
1705+
var markupLiteral = SyntaxFactory.MarkupTextLiteral(node.LiteralTokens).Green.CreateRed(node.Parent, node.Position);
17031706
Visit(markupLiteral);
17041707
return;
17051708
}
@@ -2047,7 +2050,7 @@ private void VisitAttributeValue(SyntaxNode node)
20472050
valueTokens.AddRange(mergedValue.LiteralTokens);
20482051
}
20492052

2050-
var rewritten = SyntaxFactory.MarkupTextLiteral(valueTokens.ToList(), chunkGenerator: null).Green.CreateRed(node.Parent, position);
2053+
var rewritten = SyntaxFactory.MarkupTextLiteral(valueTokens.ToList()).Green.CreateRed(node.Parent, position);
20512054
Visit(rewritten);
20522055
}
20532056
else if (children.TryCast<MarkupTextLiteralSyntax>(out var markupLiteralArray))
@@ -2059,7 +2062,7 @@ private void VisitAttributeValue(SyntaxNode node)
20592062
builder.AddRange(literal.LiteralTokens);
20602063
}
20612064

2062-
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null).Green.CreateRed(node.Parent, position);
2065+
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList()).Green.CreateRed(node.Parent, position);
20632066
Visit(rewritten);
20642067
}
20652068
else if (children.TryCast<CSharpExpressionLiteralSyntax>(out var expressionLiteralArray))
@@ -2071,16 +2074,11 @@ private void VisitAttributeValue(SyntaxNode node)
20712074
foreach (var literal in expressionLiteralArray)
20722075
{
20732076
generator = literal.ChunkGenerator;
2074-
editHandler = literal.GetEditHandler();
2077+
editHandler = literal.EditHandler;
20752078
builder.AddRange(literal.LiteralTokens);
20762079
}
20772080

2078-
var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator).Green.CreateRed(node.Parent, position);
2079-
2080-
if (editHandler != null)
2081-
{
2082-
rewritten = rewritten.WithEditHandler(editHandler);
2083-
}
2081+
var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator, editHandler).Green.CreateRed(node.Parent, position);
20842082

20852083
Visit(rewritten);
20862084
}

src/Compiler/Microsoft.CodeAnalysis.Razor.Compiler/src/Language/Legacy/CSharpCodeParser.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ public HtmlMarkupParser HtmlParser
314314

315315
chunkGenerator = SpanChunkGenerator.Null;
316316
SetAcceptedCharacters(AcceptedCharactersInternal.None);
317-
var transition = GetNodeWithEditHandler(SyntaxFactory.CSharpTransition(transitionToken, chunkGenerator));
317+
var transition = SyntaxFactory.CSharpTransition(transitionToken, chunkGenerator, GetEditHandler());
318318

319319
if (At(SyntaxKind.LeftBrace))
320320
{
@@ -1893,17 +1893,17 @@ RazorDirectiveSyntax BuildDirective(SyntaxKind expectedTokenKindIfMissing)
18931893
var node = OutputTokensAsStatementLiteral();
18941894
if (node == null && directiveBuilder.Count == 0)
18951895
{
1896-
node = SyntaxFactory.CSharpStatementLiteral(new SyntaxList<SyntaxToken>(SyntaxFactory.MissingToken(expectedTokenKindIfMissing)), chunkGenerator);
1896+
node = SyntaxFactory.CSharpStatementLiteral(SyntaxFactory.MissingToken(expectedTokenKindIfMissing), chunkGenerator, editHandler: null);
18971897
}
1898+
18981899
directiveBuilder.Add(node);
18991900
var directiveCodeBlock = SyntaxFactory.CSharpCodeBlock(directiveBuilder.ToList());
19001901

19011902
var directiveBody = SyntaxFactory.RazorDirectiveBody(keywordBlock, directiveCodeBlock);
1902-
var directive = SyntaxFactory.RazorDirective(transition, directiveBody);
1903+
var directive = SyntaxFactory.RazorDirective(transition, directiveBody, descriptor);
19031904

19041905
var diagnostics = directiveErrorSink.GetErrorsAndClear();
19051906
directive = directive.WithDiagnosticsGreen(diagnostics);
1906-
directive = directive.WithDirectiveDescriptor(descriptor);
19071907
return directive;
19081908
}
19091909
}
@@ -2709,7 +2709,7 @@ private void ParseReservedDirective(SyntaxListBuilder<RazorSyntaxNode> builder,
27092709
var directiveBody = SyntaxFactory.RazorDirectiveBody(keyword, csharpCode: null);
27102710

27112711
// transition could be null if we're already inside a code block.
2712-
transition = transition ?? SyntaxFactory.CSharpTransition(SyntaxFactory.MissingToken(SyntaxKind.Transition), chunkGenerator: null);
2712+
transition = transition ?? SyntaxFactory.CSharpTransition(SyntaxFactory.MissingToken(SyntaxKind.Transition));
27132713
var directive = SyntaxFactory.RazorDirective(transition, directiveBody);
27142714
builder.Add(directive);
27152715
}
@@ -2811,7 +2811,7 @@ private void ExplicitExpressionSpanContextConfig(SpanEditHandlerBuilder? editHan
28112811
return null;
28122812
}
28132813

2814-
return GetNodeWithEditHandler(SyntaxFactory.CSharpStatementLiteral(tokens, chunkGenerator));
2814+
return SyntaxFactory.CSharpStatementLiteral(tokens, chunkGenerator, GetEditHandler());
28152815
}
28162816

28172817
private CSharpExpressionLiteralSyntax? OutputTokensAsExpressionLiteral()
@@ -2822,7 +2822,7 @@ private void ExplicitExpressionSpanContextConfig(SpanEditHandlerBuilder? editHan
28222822
return null;
28232823
}
28242824

2825-
return GetNodeWithEditHandler(SyntaxFactory.CSharpExpressionLiteral(tokens, chunkGenerator));
2825+
return SyntaxFactory.CSharpExpressionLiteral(tokens, chunkGenerator, GetEditHandler());
28262826
}
28272827

28282828
private CSharpEphemeralTextLiteralSyntax? OutputTokensAsEphemeralLiteral()
@@ -2833,7 +2833,7 @@ private void ExplicitExpressionSpanContextConfig(SpanEditHandlerBuilder? editHan
28332833
return null;
28342834
}
28352835

2836-
return GetNodeWithEditHandler(SyntaxFactory.CSharpEphemeralTextLiteral(tokens, chunkGenerator));
2836+
return SyntaxFactory.CSharpEphemeralTextLiteral(tokens, chunkGenerator, GetEditHandler());
28372837
}
28382838

28392839
private UnclassifiedTextLiteralSyntax? OutputTokensAsUnclassifiedLiteral()
@@ -2844,7 +2844,7 @@ private void ExplicitExpressionSpanContextConfig(SpanEditHandlerBuilder? editHan
28442844
return null;
28452845
}
28462846

2847-
return GetNodeWithEditHandler(SyntaxFactory.UnclassifiedTextLiteral(tokens, chunkGenerator));
2847+
return SyntaxFactory.UnclassifiedTextLiteral(tokens, chunkGenerator, GetEditHandler());
28482848
}
28492849

28502850
private void OtherParserBlock(in SyntaxListBuilder<RazorSyntaxNode> builder)

0 commit comments

Comments
 (0)