Class: Solargraph::Range
- Inherits:
-
Object
- Object
- Solargraph::Range
- Includes:
- Equality
- Defined in:
- lib/solargraph/range.rb
Overview
A pair of Positions that compose a section of text in code.
Instance Attribute Summary collapse
- #ending ⇒ Position readonly
- #start ⇒ Position readonly
Class Method Summary collapse
-
.from_expr(expr) ⇒ Range
Get a range from a Parser range, usually found in Parser::AST::Node#location#expression.
-
.from_node(node) ⇒ Range?
Get a range from a node.
-
.from_to(l1, c1, l2, c2) ⇒ Range
Create a range from a pair of lines and characters.
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #==(other) ⇒ Object
-
#contain?(position) ⇒ Boolean
True if the specified position is inside the range.
-
#include?(position) ⇒ Boolean
True if the range contains the specified position and the position does not precede it.
-
#initialize(start, ending) ⇒ Range
constructor
A new instance of Range.
- #inspect ⇒ Object
-
#to_hash ⇒ Hash<Symbol, Position>
Get a hash of the range.
Methods included from Equality
Constructor Details
#initialize(start, ending) ⇒ Range
Returns a new instance of Range.
17 18 19 20 |
# File 'lib/solargraph/range.rb', line 17 def initialize start, ending @start = start @ending = ending end |
Instance Attribute Details
#ending ⇒ Position (readonly)
13 14 15 |
# File 'lib/solargraph/range.rb', line 13 def ending @ending end |
#start ⇒ Position (readonly)
10 11 12 |
# File 'lib/solargraph/range.rb', line 10 def start @start end |
Class Method Details
.from_expr(expr) ⇒ Range
Get a range from a Parser range, usually found in Parser::AST::Node#location#expression.
98 99 100 |
# File 'lib/solargraph/range.rb', line 98 def self.from_expr expr from_to(expr.line, expr.column, expr.last_line, expr.last_column) end |
.from_node(node) ⇒ Range?
Get a range from a node.
87 88 89 90 91 |
# File 'lib/solargraph/range.rb', line 87 def self.from_node node if node&.loc && node.loc.expression from_expr(node.loc.expression) end end |
.from_to(l1, c1, l2, c2) ⇒ Range
Create a range from a pair of lines and characters.
79 80 81 |
# File 'lib/solargraph/range.rb', line 79 def self.from_to l1, c1, l2, c2 Range.new(Position.new(l1, c1), Position.new(l2, c2)) end |
Instance Method Details
#<=>(other) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/solargraph/range.rb', line 28 def <=>(other) return nil unless other.is_a?(Range) # @sg-ignore https://github.com/castwide/solargraph/pull/1114 if start == other.start # @sg-ignore https://github.com/castwide/solargraph/pull/1114 ending <=> other.ending else # @sg-ignore https://github.com/castwide/solargraph/pull/1114 start <=> other.start end end |
#==(other) ⇒ Object
102 103 104 105 106 |
# File 'lib/solargraph/range.rb', line 102 def == other return false unless other.is_a?(Range) # @sg-ignore https://github.com/castwide/solargraph/pull/1114 start == other.start && ending == other.ending end |
#contain?(position) ⇒ Boolean
True if the specified position is inside the range.
55 56 57 58 59 60 61 |
# File 'lib/solargraph/range.rb', line 55 def contain? position position = Position.normalize(position) return false if position.line < start.line || position.line > ending.line return false if position.line == start.line && position.character < start.character return false if position.line == ending.line && position.character > ending.character true end |
#include?(position) ⇒ Boolean
True if the range contains the specified position and the position does not precede it.
67 68 69 70 |
# File 'lib/solargraph/range.rb', line 67 def include? position position = Position.normalize(position) contain?(position) && !(position.line == start.line && position.character == start.character) end |
#inspect ⇒ Object
108 109 110 |
# File 'lib/solargraph/range.rb', line 108 def inspect "#<#{self.class} #{start.inspect} to #{ending.inspect}>" end |
#to_hash ⇒ Hash<Symbol, Position>
Get a hash of the range. This representation is suitable for use in the language server protocol.
44 45 46 47 48 49 |
# File 'lib/solargraph/range.rb', line 44 def to_hash { start: start.to_hash, end: ending.to_hash } end |