Class: Parser::Source::Range
- Inherits:
-
Object
- Object
- Parser::Source::Range
- Includes:
- Comparable
- Defined in:
- lib/parser_tree_rewriter/source/range.rb
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Compare ranges, first by begin_pos, then by end_pos.
-
#adjust(begin_pos: 0, end_pos: 0) ⇒ Range
by the given amount(s).
-
#contained?(other) ⇒ Boolean
Return ‘other.contains?(self)`.
-
#contains?(other) ⇒ Boolean
Returns true iff this range contains (strictly) ‘other`.
-
#crossing?(other) ⇒ Boolean
Returns true iff both ranges intersect and also have different elements from one another.
-
#disjoint?(other) ⇒ Boolean
Return ‘true` iff this range and `other` are disjoint.
-
#overlaps?(other) ⇒ Boolean
Return ‘true` iff this range is not disjoint from `other`.
-
#with(begin_pos: @begin_pos, end_pos: @end_pos) ⇒ Range
to the given value(s).
Instance Method Details
#<=>(other) ⇒ Object
Compare ranges, first by begin_pos, then by end_pos.
90 91 92 93 94 95 |
# File 'lib/parser_tree_rewriter/source/range.rb', line 90 def <=>(other) return nil unless other.is_a?(::Parser::Source::Range) && @source_buffer == other.source_buffer (@begin_pos <=> other.begin_pos).nonzero? || (@end_pos <=> other.end_pos) end |
#adjust(begin_pos: 0, end_pos: 0) ⇒ Range
by the given amount(s)
20 21 22 |
# File 'lib/parser_tree_rewriter/source/range.rb', line 20 def adjust(begin_pos: 0, end_pos: 0) Range.new(@source_buffer, @begin_pos + begin_pos, @end_pos + end_pos) end |
#contained?(other) ⇒ Boolean
Return ‘other.contains?(self)`
Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
70 71 72 |
# File 'lib/parser_tree_rewriter/source/range.rb', line 70 def contained?(other) other.contains?(self) end |
#contains?(other) ⇒ Boolean
Returns true iff this range contains (strictly) ‘other`.
Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
58 59 60 |
# File 'lib/parser_tree_rewriter/source/range.rb', line 58 def contains?(other) (other.begin_pos <=> @begin_pos) + (@end_pos <=> other.end_pos) >= (other.empty? ? 2 : 1) end |
#crossing?(other) ⇒ Boolean
Returns true iff both ranges intersect and also have different elements from one another.
Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
82 83 84 85 |
# File 'lib/parser_tree_rewriter/source/range.rb', line 82 def crossing?(other) return false unless overlaps?(other) (@begin_pos <=> other.begin_pos) * (@end_pos <=> other.end_pos) == 1 end |
#disjoint?(other) ⇒ Boolean
Return ‘true` iff this range and `other` are disjoint.
Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing?
32 33 34 35 36 37 38 |
# File 'lib/parser_tree_rewriter/source/range.rb', line 32 def disjoint?(other) if empty? && other.empty? @begin_pos != other.begin_pos else @begin_pos >= other.end_pos || other.begin_pos >= @end_pos end end |
#overlaps?(other) ⇒ Boolean
Return ‘true` iff this range is not disjoint from `other`.
46 47 48 |
# File 'lib/parser_tree_rewriter/source/range.rb', line 46 def overlaps?(other) !disjoint?(other) end |