Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -451,7 +451,8 @@ private static Syntax.MarkupTextLiteralSyntax GetSyntaxNode(SourceLocation start
{
builder.Add(token);
}
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null).CreateRed(parent: null, position: start.AbsoluteIndex);
var node = SyntaxFactory.MarkupTextLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null)
.CreateRed(parent: null, position: start.AbsoluteIndex);

return (Syntax.MarkupTextLiteralSyntax)node;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,7 @@ private static CSharpStatementLiteralSyntax GetSyntaxNode(DirectiveTokenEditHand
builder.Add(new SyntaxToken(token));
}

var node = SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null);

return node.WithEditHandler(editHandler);
return SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler);
}

private class TestDirectiveTokenEditHandler : DirectiveTokenEditHandler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,7 @@ private static SyntaxNode GetSpan(SourceLocation start, string content)
{
builder.Add(new SyntaxToken(token));
}
var node = SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null);

return node;
return SyntaxFactory.CSharpStatementLiteral(builder.ToList(), SpanChunkGenerator.Null, editHandler: null);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ public void GetEditedContent_SyntaxNode_ReturnsNewContent()
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "Hello, "));
builder.Add(SyntaxFactory.Token(SyntaxKind.Marker, "World"));

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ private static MarkupTextLiteralSyntax CreateMarkupTextLiteral(params ReadOnlySp
using var builder = new PooledArrayBuilder<SyntaxToken>(tokens.Length);
builder.AddRange(tokens);

return SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null);
return SyntaxFactory.MarkupTextLiteral(builder.ToList());
}

private static readonly SyntaxToken s_openAngle = SyntaxFactory.Token(SyntaxKind.OpenAngle, "<");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public override SyntaxNode VisitRazorDirective(RazorDirectiveSyntax node)
{
_cancellationToken.ThrowIfCancellationRequested();

if (node.DirectiveDescriptor?.Directive != SectionDirective.Directive.Directive)
if (!node.IsDirective(SectionDirective.Directive))
{
// We only want to track the nesting of section directives.
return base.VisitRazorDirective(node);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -595,12 +595,13 @@ protected static MarkupTextLiteralSyntax MergeAttributeValue(MarkupLiteralAttrib
node.Prefix?.LiteralTokens,
node.Value?.LiteralTokens);

var rewritten = node.Prefix?.Update(valueTokens, node.Prefix.ChunkGenerator) ?? node.Value?.Update(valueTokens, node.Value.ChunkGenerator);
var rewritten = node.Prefix?.Update(valueTokens) ?? node.Value?.Update(valueTokens);

rewritten = (MarkupTextLiteralSyntax)rewritten?.Green.CreateRed(node, node.Position);

if (rewritten.GetEditHandler() is { } originalEditHandler)
if (rewritten.EditHandler is { } originalEditHandler)
{
rewritten = rewritten.Update(rewritten.LiteralTokens, MarkupChunkGenerator.Instance).WithEditHandler(originalEditHandler);
rewritten = rewritten.Update(rewritten.LiteralTokens, MarkupChunkGenerator.Instance, originalEditHandler);
}

return rewritten;
Expand Down Expand Up @@ -633,7 +634,8 @@ public override void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node)
new SyntaxTokenList(node.EqualsToken),
node.ValuePrefix?.LiteralTokens);

var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens, chunkGenerator: null).Green.CreateRed(node, node.NamePrefix?.Position ?? node.Name.Position);
var position = node.NamePrefix?.Position ?? node.Name.Position;
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens).Green.CreateRed(node, position);

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

var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null);
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList());

var mergedLiterals = MergeTokenLists(
prefix?.LiteralTokens,
rewritten.LiteralTokens,
node.ValueSuffix?.LiteralTokens);

var mergedAttribute = SyntaxFactory.MarkupTextLiteral(mergedLiterals, chunkGenerator: null).Green.CreateRed(node.Parent, node.Position);
var mergedAttribute = SyntaxFactory.MarkupTextLiteral(mergedLiterals).Green.CreateRed(node.Parent, node.Position);
Visit(mergedAttribute);

return;
Expand Down Expand Up @@ -704,7 +706,7 @@ public override void VisitMarkupMinimizedAttributeBlock(MarkupMinimizedAttribute
node.NamePrefix?.LiteralTokens,
node.Name?.LiteralTokens);

var literal = SyntaxFactory.MarkupTextLiteral(literals, chunkGenerator: null).Green.CreateRed(node.Parent, node.Position);
var literal = SyntaxFactory.MarkupTextLiteral(literals).Green.CreateRed(node.Parent, node.Position);

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

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

var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null).Green.CreateRed(node.Parent, position);
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList()).Green.CreateRed(node.Parent, position);
Visit(rewritten);
}
else if (children.TryCast<CSharpExpressionLiteralSyntax>(out var expressionLiteralArray))
Expand All @@ -1208,12 +1210,11 @@ private void VisitAttributeValue(SyntaxNode node)
foreach (var literal in expressionLiteralArray)
{
generator = literal.ChunkGenerator;
editHandler = literal.GetEditHandler();
editHandler = literal.EditHandler;
builder.AddRange(literal.LiteralTokens);
}

var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator).Green.CreateRed(node.Parent, position);
rewritten = editHandler != null ? rewritten.WithEditHandler(editHandler) : rewritten;
var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator, editHandler).Green.CreateRed(node.Parent, position);
Visit(rewritten);
}
else
Expand Down Expand Up @@ -1380,7 +1381,8 @@ public override void VisitMarkupAttributeBlock(MarkupAttributeBlockSyntax node)
new SyntaxTokenList(node.EqualsToken),
node.ValuePrefix?.LiteralTokens);

var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens, chunkGenerator: null).Green.CreateRed(node, node.NamePrefix?.Position ?? node.Name.Position);
var position = node.NamePrefix?.Position ?? node.Name.Position;
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens).Green.CreateRed(node, position);

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

var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens, chunkGenerator: null).Green.CreateRed(node, node.NamePrefix?.Position ?? node.Name.Position);
var position = node.NamePrefix?.Position ?? node.Name.Position;
var prefix = (MarkupTextLiteralSyntax)SyntaxFactory.MarkupTextLiteral(prefixTokens).Green.CreateRed(node, position);

var name = node.Name.GetContent();
_builder.Add(new HtmlAttributeIntermediateNode()
Expand Down Expand Up @@ -1492,7 +1495,7 @@ public override void VisitMarkupTextLiteral(MarkupTextLiteralSyntax node)
return;
}

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

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

var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList(), chunkGenerator: null).Green.CreateRed(node.Parent, position);
var rewritten = SyntaxFactory.MarkupTextLiteral(builder.ToList()).Green.CreateRed(node.Parent, position);
Visit(rewritten);
}
else if (children.TryCast<CSharpExpressionLiteralSyntax>(out var expressionLiteralArray))
Expand All @@ -2071,16 +2074,11 @@ private void VisitAttributeValue(SyntaxNode node)
foreach (var literal in expressionLiteralArray)
{
generator = literal.ChunkGenerator;
editHandler = literal.GetEditHandler();
editHandler = literal.EditHandler;
builder.AddRange(literal.LiteralTokens);
}

var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator).Green.CreateRed(node.Parent, position);

if (editHandler != null)
{
rewritten = rewritten.WithEditHandler(editHandler);
}
var rewritten = SyntaxFactory.CSharpExpressionLiteral(builder.ToList(), generator, editHandler).Green.CreateRed(node.Parent, position);

Visit(rewritten);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -314,7 +314,7 @@ public HtmlMarkupParser HtmlParser

chunkGenerator = SpanChunkGenerator.Null;
SetAcceptedCharacters(AcceptedCharactersInternal.None);
var transition = GetNodeWithEditHandler(SyntaxFactory.CSharpTransition(transitionToken, chunkGenerator));
var transition = SyntaxFactory.CSharpTransition(transitionToken, chunkGenerator, GetEditHandler());

if (At(SyntaxKind.LeftBrace))
{
Expand Down Expand Up @@ -1893,17 +1893,17 @@ RazorDirectiveSyntax BuildDirective(SyntaxKind expectedTokenKindIfMissing)
var node = OutputTokensAsStatementLiteral();
if (node == null && directiveBuilder.Count == 0)
{
node = SyntaxFactory.CSharpStatementLiteral(new SyntaxList<SyntaxToken>(SyntaxFactory.MissingToken(expectedTokenKindIfMissing)), chunkGenerator);
node = SyntaxFactory.CSharpStatementLiteral(SyntaxFactory.MissingToken(expectedTokenKindIfMissing), chunkGenerator, editHandler: null);
}

directiveBuilder.Add(node);
var directiveCodeBlock = SyntaxFactory.CSharpCodeBlock(directiveBuilder.ToList());

var directiveBody = SyntaxFactory.RazorDirectiveBody(keywordBlock, directiveCodeBlock);
var directive = SyntaxFactory.RazorDirective(transition, directiveBody);
var directive = SyntaxFactory.RazorDirective(transition, directiveBody, descriptor);

var diagnostics = directiveErrorSink.GetErrorsAndClear();
directive = directive.WithDiagnosticsGreen(diagnostics);
directive = directive.WithDirectiveDescriptor(descriptor);
return directive;
}
}
Expand Down Expand Up @@ -2709,7 +2709,7 @@ private void ParseReservedDirective(SyntaxListBuilder<RazorSyntaxNode> builder,
var directiveBody = SyntaxFactory.RazorDirectiveBody(keyword, csharpCode: null);

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

return GetNodeWithEditHandler(SyntaxFactory.CSharpStatementLiteral(tokens, chunkGenerator));
return SyntaxFactory.CSharpStatementLiteral(tokens, chunkGenerator, GetEditHandler());
}

private CSharpExpressionLiteralSyntax? OutputTokensAsExpressionLiteral()
Expand All @@ -2822,7 +2822,7 @@ private void ExplicitExpressionSpanContextConfig(SpanEditHandlerBuilder? editHan
return null;
}

return GetNodeWithEditHandler(SyntaxFactory.CSharpExpressionLiteral(tokens, chunkGenerator));
return SyntaxFactory.CSharpExpressionLiteral(tokens, chunkGenerator, GetEditHandler());
}

private CSharpEphemeralTextLiteralSyntax? OutputTokensAsEphemeralLiteral()
Expand All @@ -2833,7 +2833,7 @@ private void ExplicitExpressionSpanContextConfig(SpanEditHandlerBuilder? editHan
return null;
}

return GetNodeWithEditHandler(SyntaxFactory.CSharpEphemeralTextLiteral(tokens, chunkGenerator));
return SyntaxFactory.CSharpEphemeralTextLiteral(tokens, chunkGenerator, GetEditHandler());
}

private UnclassifiedTextLiteralSyntax? OutputTokensAsUnclassifiedLiteral()
Expand All @@ -2844,7 +2844,7 @@ private void ExplicitExpressionSpanContextConfig(SpanEditHandlerBuilder? editHan
return null;
}

return GetNodeWithEditHandler(SyntaxFactory.UnclassifiedTextLiteral(tokens, chunkGenerator));
return SyntaxFactory.UnclassifiedTextLiteral(tokens, chunkGenerator, GetEditHandler());
}

private void OtherParserBlock(in SyntaxListBuilder<RazorSyntaxNode> builder)
Expand Down
Loading