public static LNodeList WithSpliced(this LNodeList list, LNode node, Symbol listName = null) { if (node.Calls(listName ?? CodeSymbols.Splice)) { return(list.AddRange(node.Args)); } else { return(list.Add(node)); } }
static bool MatchesPatternNested(LNode candidate, LNode pattern, ref MMap <Symbol, LNode> captures, ref LNodeList trivia) { LNodeList unmatchedAttrs; if (!MatchesPattern(candidate, pattern, ref captures, out unmatchedAttrs)) { return(false); } if (unmatchedAttrs.Any(a => !a.IsTrivia)) { return(false); } trivia.AddRange(unmatchedAttrs); return(true); }
/// <summary>Gets a new list with any %trailing attributes removed. Trailing /// trivia inside those attributes are returned in an `out` parameter.</summary> public static LNodeList WithoutTrailingTrivia(this LNodeList attrs, out LNodeList trailingTrivia) { trailingTrivia = LNodeList.Empty; var attrs2 = attrs.SmartWhere(attr => !attr.Calls(S.TriviaTrailing)); if (attrs2 != attrs) { foreach (var attr in attrs) { if (attr.Calls(S.TriviaTrailing)) { trailingTrivia.AddRange(attr.Args); } } } return(attrs2); }