public void AddSeparator(GreenNode separatorToken)
 {
     _builder.Add(separatorToken);
 }
Esempio n. 2
0
 public SyntaxList(GreenNode node)
 {
     this._node = node;
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
 private TriviaInfo(GreenNode leadingTrivia, GreenNode trailingTrivia)
 {
     this._leadingTrivia  = leadingTrivia;
     this._trailingTrivia = trailingTrivia;
 }
Esempio n. 5
0
 public static TriviaInfo Create(GreenNode leadingTrivia, GreenNode trailingTrivia)
 {
     Debug.Assert(leadingTrivia != null);
     return(new TriviaInfo(leadingTrivia, trailingTrivia));
 }
Esempio n. 6
0
 protected void AdjustWidth(GreenNode node)
 {
     this.fullWidth += node == null ? 0 : node.fullWidth;
 }
Esempio n. 7
0
        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);
        }