class Sexp::Sibling
See Matcher
for sibling relations: <,<<,>>,>
Attributes
distance[R]
An optional distance requirement for the matcher.
sibling[R]
The RHS of the matcher.
subject[R]
The LHS of the matcher.
Public Class Methods
new(subject, sibling, distance = nil)
click to toggle source
Creates a Matcher
which will match any pair of Sexps that are siblings. Defaults to matching the immediate following sibling.
# File lib/sexp_matcher.rb, line 1002 def initialize subject, sibling, distance = nil @subject = subject @sibling = sibling @distance = distance end
Public Instance Methods
satisfy?(o)
click to toggle source
Satisfied if o contains subject
followed by sibling
# File lib/sexp_matcher.rb, line 1011 def satisfy? o # Future optimizations: # * Shortcut matching sibling subject_matches = index_matches(subject, o) return nil if subject_matches.empty? sibling_matches = index_matches(sibling, o) return nil if sibling_matches.empty? subject_matches.any? { |i1, _data_1| sibling_matches.any? { |i2, _data_2| distance ? (i2-i1 == distance) : i2 > i1 } } end