public void AddSeparator(GreenNode separatorToken) { _builder.Add(separatorToken); }
public SyntaxList(GreenNode node) { this._node = node; }
public InternalSyntax.SeparatedSyntaxList <TNode> VisitList <TNode>(InternalSyntax.SeparatedSyntaxList <TNode> list) where TNode : GreenNode { InternalSyntax.SeparatedSyntaxListBuilder <TNode> alternate = default(InternalSyntax.SeparatedSyntaxListBuilder <TNode>); int i = 0; int itemCount = list.Count; int separatorCount = list.SeparatorCount; while (i < itemCount) { var item = list[i]; var visitedItem = this.Visit(item); GreenNode separator = null; GreenNode visitedSeparator = null; if (i < separatorCount) { separator = list.GetSeparator(i); var visitedSeparatorNode = this.Visit(separator); Debug.Assert(visitedSeparatorNode is SyntaxToken.Green, "Cannot replace a separator with a non-separator"); visitedSeparator = (SyntaxToken.Green)visitedSeparatorNode; Debug.Assert((separator == null && separator.Kind == SyntaxKind.None) || (visitedSeparator != null && visitedSeparator.Kind != SyntaxKind.None), "Cannot delete a separator from a separated list. Removing an element will remove the corresponding separator."); } if (item != visitedItem && alternate.IsNull) { alternate = new InternalSyntax.SeparatedSyntaxListBuilder <TNode>(itemCount); alternate.AddRange(list, i); } if (!alternate.IsNull) { if (visitedItem != null && visitedItem.Kind != SyntaxKind.None) { alternate.Add(((TNode)visitedItem)); if (visitedSeparator != null) { alternate.AddSeparator(visitedSeparator); } } else if (i >= separatorCount && alternate.Count > 0) { alternate.RemoveLast(); // delete *preceding* separator } } i += 1; } if (!alternate.IsNull) { return(alternate.ToList()); } return(list); }
private TriviaInfo(GreenNode leadingTrivia, GreenNode trailingTrivia) { this._leadingTrivia = leadingTrivia; this._trailingTrivia = trailingTrivia; }
public static TriviaInfo Create(GreenNode leadingTrivia, GreenNode trailingTrivia) { Debug.Assert(leadingTrivia != null); return(new TriviaInfo(leadingTrivia, trailingTrivia)); }
protected void AdjustWidth(GreenNode node) { this.fullWidth += node == null ? 0 : node.fullWidth; }
internal bool IsCacheEquivalent(SyntaxKind kind, NodeFlags flags, GreenNode child1, GreenNode child2, GreenNode child3) { Debug.Assert(this.IsCacheable); return(this.Kind == kind && this.flags == flags && this.GetSlot(0) == child1 && this.GetSlot(1) == child2 && this.GetSlot(2) == child3); }