Class: RBS::Location
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/rbs/location_aux.rb, ext/rbs_extension/location.c |
Constant Summary
-
WithChildren =
# File 'lib/rbs/location_aux.rb', line 24self
Class Method Summary
Instance Method Summary
- #==(other)
- #[](name)
- #_add_optional_child(name, start, end)
- #_add_optional_no_child(name)
- #_add_required_child(name, start, end)
- #_optional_keys
- #_required_keys
- #add_optional_child(name, range)
- #add_required_child(name, range)
- #aref
- #buffer
- #each_optional_key(&block)
- #each_required_key(&block)
- #end_column
- #end_line
- #end_loc
- #end_pos
- #inspect
- #key?(name) ⇒ Boolean
- #name
- #optional_key?(name) ⇒ Boolean
- #range
- #required_key?(name) ⇒ Boolean
- #source
- #start_column
- #start_line
- #start_loc
- #start_pos
- #to_json(state = _ = nil)
- #to_s
- #_end_loc private
- #_start_loc private
- #initialize(buffer, start_pos, end_pos) private
- #initialize_copy(other) private
Constructor Details
.new(buffer_ = nil, start_pos_ = nil, end_pos_ = nil, buffer: nil, start_pos: nil, end_pos: nil) ⇒ Location
Class Method Details
.to_string(location, default: "*:*:*...*:*")
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 93
def self.to_string(location, default: "*:*:*...*:*") location&.to_s || default end
Instance Method Details
#==(other)
[ GitHub ]#[](name)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 221
static VALUE location_aref(VALUE self, VALUE name) { rbs_loc *loc = rbs_check_location(self); range result; ID id = SYM2ID(name); if (rbs_loc_list_find(loc->requireds, id, &result)) { return rbs_new_location(loc->buffer, result); } if (rbs_loc_list_find(loc->optionals, id, &result)) { if (null_range_p(result)) { return Qnil; } else { return rbs_new_location(loc->buffer, result); } } VALUE string = rb_funcall(name, rb_intern("to_s"), 0); rb_raise(rb_eRuntimeError, "Unknown child name given: %s", RSTRING_PTR(string)); }
#_add_optional_child(name, start, end)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 192
static VALUE location_add_optional_child(VALUE self, VALUE name, VALUE start, VALUE end) { rbs_loc *loc = rbs_check_location(self); range rg; rg.start = rbs_loc_position(FIX2INT(start)); rg.end = rbs_loc_position(FIX2INT(end)); rbs_loc_add_optional_child(loc, SYM2ID(name), rg); return Qnil; }
#_add_optional_no_child(name)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 204
static VALUE location_add_optional_no_child(VALUE self, VALUE name) { rbs_loc *loc = rbs_check_location(self); rbs_loc_add_optional_child(loc, SYM2ID(name), NULL_RANGE); return Qnil; }
#_add_required_child(name, start, end)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 180
static VALUE location_add_required_child(VALUE self, VALUE name, VALUE start, VALUE end) { rbs_loc *loc = rbs_check_location(self); range rg; rg.start = rbs_loc_position(FIX2INT(start)); rg.end = rbs_loc_position(FIX2INT(end)); rbs_loc_add_required_child(loc, SYM2ID(name), rg); return Qnil; }
#_end_loc (private)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 167
static VALUE location_end_loc(VALUE self) { rbs_loc *loc = rbs_check_location(self); if (loc->rg.end.line >= 0) { VALUE pair = rb_ary_new_capa(2); rb_ary_push(pair, INT2FIX(loc->rg.end.line)); rb_ary_push(pair, INT2FIX(loc->rg.end.column)); return pair; } else { return Qnil; } }
#_optional_keys
[ GitHub ]# File 'ext/rbs_extension/location.c', line 243
static VALUE location_optional_keys(VALUE self) { VALUE keys = rb_ary_new(); rbs_loc *loc = rbs_check_location(self); rbs_loc_list *list = loc->optionals; while (list) { rb_ary_push(keys, ID2SYM(list->name)); list = list->next; } return keys; }
#_required_keys
[ GitHub ]# File 'ext/rbs_extension/location.c', line 257
static VALUE location_required_keys(VALUE self) { VALUE keys = rb_ary_new(); rbs_loc *loc = rbs_check_location(self); rbs_loc_list *list = loc->requireds; while (list) { rb_ary_push(keys, ID2SYM(list->name)); list = list->next; } return keys; }
#_start_loc (private)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 154
static VALUE location_start_loc(VALUE self) { rbs_loc *loc = rbs_check_location(self); if (loc->rg.start.line >= 0) { VALUE pair = rb_ary_new_capa(2); rb_ary_push(pair, INT2FIX(loc->rg.start.line)); rb_ary_push(pair, INT2FIX(loc->rg.start.column)); return pair; } else { return Qnil; } }
#add_optional_child(name, range)
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 101
def add_optional_child(name, range) if range _add_optional_child(name, range.begin, range.end) else _add_optional_no_child(name); end end
#add_required_child(name, range)
[ GitHub ]#aref
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 22
alias aref []
#buffer
[ GitHub ]# File 'ext/rbs_extension/location.c', line 139
static VALUE location_buffer(VALUE self) { rbs_loc *loc = rbs_check_location(self); return loc->buffer; }
#each_optional_key(&block)
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 109
def each_optional_key(&block) if block _optional_keys.uniq.each(&block) else enum_for(:each_optional_key) end end
#each_required_key(&block)
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 117
def each_required_key(&block) if block _required_keys.uniq.each(&block) else enum_for(:each_required_key) end end
#end_column
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 42
def end_column end_loc[1] end
#end_line
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 38
def end_line end_loc[0] end
#end_loc
[ GitHub ]#end_pos
[ GitHub ]# File 'ext/rbs_extension/location.c', line 149
static VALUE location_end_pos(VALUE self) { rbs_loc *loc = rbs_check_location(self); return INT2FIX(loc->rg.end.char_pos); }
#initialize(buffer, start_pos, end_pos) (private)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 114
static VALUE location_initialize(VALUE self, VALUE buffer, VALUE start_pos, VALUE end_pos) { rbs_loc *loc = rbs_check_location(self); position start = rbs_loc_position(FIX2INT(start_pos)); position end = rbs_loc_position(FIX2INT(end_pos)); loc->buffer = buffer; loc->rg.start = start; loc->rg.end = end; return Qnil; }
#initialize_copy(other) (private)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 127
static VALUE location_initialize_copy(VALUE self, VALUE other) { rbs_loc *self_loc = rbs_check_location(self); rbs_loc *other_loc = rbs_check_location(other); self_loc->buffer = other_loc->buffer; self_loc->rg = other_loc->rg; self_loc->requireds = rbs_loc_list_dup(other_loc->requireds); self_loc->optionals = rbs_loc_list_dup(other_loc->optionals); return Qnil; }
#inspect
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 5
def inspect rks = each_required_key.to_a ops = each_optional_key.to_a.map {|x| "?#{x}" } "#<#{self.class}:#{self.__id__} buffer=#{buffer.name}, start=#{start_line}:#{start_column}, pos=#{start_pos}...#{end_pos}, children=#{(rks + ops).join(",")} source='#{source.lines.first&.chomp}'>" end
#key?(name) ⇒ Boolean
# File 'lib/rbs/location_aux.rb', line 125
def key?(name) optional_key?(name) || required_key?(name) end
#name
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 26
def name buffer.name end
#optional_key?(name) ⇒ Boolean
# File 'lib/rbs/location_aux.rb', line 129
def optional_key?(name) _optional_keys.include?(name) end
#range
[ GitHub ]
#required_key?(name) ⇒ Boolean
# File 'lib/rbs/location_aux.rb', line 133
def required_key?(name) _required_keys.include?(name) end
#source
[ GitHub ]#start_column
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 34
def start_column start_loc[1] end
#start_line
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 30
def start_line start_loc[0] end
#start_loc
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 46
def start_loc @start_loc ||= begin _start_loc || buffer.pos_to_loc(start_pos) end end
#start_pos
[ GitHub ]# File 'ext/rbs_extension/location.c', line 144
static VALUE location_start_pos(VALUE self) { rbs_loc *loc = rbs_check_location(self); return INT2FIX(loc->rg.start.char_pos); }
#to_json(state = _ = nil)
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 77
def to_json(state = _ = nil) { start: { line: start_line, column: start_column }, end: { line: end_line, column: end_column }, buffer: { name: name&.to_s } }.to_json(state) end
#to_s
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 66
def to_s "#{name || "-"}:#{start_line}:#{start_column}...#{end_line}:#{end_column}" end