private ReplacedCapture VisitCapture(PatternCapture capture) { var contents = GetCaptureRange(capture).Select(VisitNodeOrToken); return new ReplacedCapture(capture.Variable, contents); }
public Match AddCapture(PatternCapture patternCapture) { Debug.Assert(IsMatch); return new Match(NodeOrToken, IsMatch, Captures.Add(patternCapture)); }
private static IEnumerable<SyntaxNodeOrToken> GetCaptureRange(PatternCapture capture) { var parent = capture.StartNodeOrToken.Parent; var children = parent.ChildNodesAndTokens(); var start = capture.StartNodeOrToken.Span.Start; var end = capture.EndNodeOrToken.Span.End; var span = TextSpan.FromBounds(start, end); return children.Where(c => span.Contains(c.Span)); }