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 29self
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
- #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 94
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);
  ID id = SYM2ID(name);
  if (loc->children != NULL) {
    for (unsigned short i = 0; i < loc->children->len; i++) {
      if (loc->children->entries[i].name == id) {
        rbs_loc_range result = loc->children->entries[i].rg;
        if (RBS_LOC_OPTIONAL_P(loc, i) && NULL_LOC_RANGE_P(result)) {
          return Qnil;
        } else {
          return rbs_new_location_from_loc_range(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 183
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 195
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 171
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;
}
  #_optional_keys
[ GitHub ]# File 'ext/rbs_extension/location.c', line 244
static VALUE location_optional_keys(VALUE self) {
  VALUE keys = rb_ary_new();
  rbs_loc *loc = rbs_check_location(self);
  rbs_loc_children *children = loc->children;
  if (children == NULL) {
    return keys;
  }
  for (unsigned short i = 0; i < children->len; i++) {
    if (RBS_LOC_OPTIONAL_P(loc, i)) {
      rb_ary_push(keys, ID2SYM(children->entries[i].name));
    }
  }
  return keys;
}
  #_required_keys
[ GitHub ]# File 'ext/rbs_extension/location.c', line 263
static VALUE location_required_keys(VALUE self) {
  VALUE keys = rb_ary_new();
  rbs_loc *loc = rbs_check_location(self);
  rbs_loc_children *children = loc->children;
  if (children == NULL) {
    return keys;
  }
  for (unsigned short i = 0; i < children->len; i++) {
    if (RBS_LOC_REQUIRED_P(loc, i)) {
      rb_ary_push(keys, ID2SYM(children->entries[i].name));
    }
  }
  return keys;
}
  #add_optional_child(name, range)
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 102
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 27
alias aref []
#buffer
[ GitHub ]# File 'ext/rbs_extension/location.c', line 156
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 110
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 118
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 47
def end_column end_loc[1] end
#end_line
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 43
def end_line end_loc[0] end
#end_loc
[ GitHub ]#end_pos
[ GitHub ]# File 'ext/rbs_extension/location.c', line 166
static VALUE location_end_pos(VALUE self) {
  rbs_loc *loc = rbs_check_location(self);
  return INT2FIX(loc->rg.end);
}
  #initialize(buffer, start_pos, end_pos) (private)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 123
static VALUE location_initialize(VALUE self, VALUE buffer, VALUE start_pos, VALUE end_pos) {
  rbs_loc *loc = rbs_check_location(self);
  int start = FIX2INT(start_pos);
  int end = FIX2INT(end_pos);
  *loc = (rbs_loc) {
    .buffer = buffer,
    .rg = (rbs_loc_range) { start, end },
    .children = NULL,
  };
  return Qnil;
}
  #initialize_copy(other) (private)
[ GitHub ]# File 'ext/rbs_extension/location.c', line 138
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 = (rbs_loc) {
    .buffer = other_loc->buffer,
    .rg = other_loc->rg,
    .children = NULL,
  };
  if (other_loc->children != NULL) {
    rbs_loc_alloc_children(self_loc, other_loc->children->cap);
    memcpy(self_loc->children, other_loc->children, RBS_LOC_CHILDREN_SIZE(other_loc->children->cap));
  }
  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}" } src = if source.length <= 1 source.inspect else source.each_line.first&.chomp&.inspect end "#<#{self.class}:#{self.__id__} buffer=#{buffer.name}, start=#{start_line}:#{start_column}, pos=#{start_pos}...#{end_pos}, children=#{(rks + ops).join(",")} source=#{src}>" end
    #key?(name)  ⇒ Boolean 
  
# File 'lib/rbs/location_aux.rb', line 126
def key?(name) optional_key?(name) || required_key?(name) end
#name
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 31
def name buffer.name end
    #optional_key?(name)  ⇒ Boolean 
  
# File 'lib/rbs/location_aux.rb', line 130
def optional_key?(name) _optional_keys.include?(name) end
#range
[ GitHub ]
    #required_key?(name)  ⇒ Boolean 
  
# File 'lib/rbs/location_aux.rb', line 134
def required_key?(name) _required_keys.include?(name) end
#source
[ GitHub ]#start_column
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 39
def start_column start_loc[1] end
#start_line
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 35
def start_line start_loc[0] end
#start_loc
[ GitHub ]#start_pos
[ GitHub ]# File 'ext/rbs_extension/location.c', line 161
static VALUE location_start_pos(VALUE self) {
  rbs_loc *loc = rbs_check_location(self);
  return INT2FIX(loc->rg.start);
}
  #to_json(state = _ = nil)
[ GitHub ]# File 'lib/rbs/location_aux.rb', line 78
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 67
def to_s "#{name || "-"}:#{start_line}:#{start_column}...#{end_line}:#{end_column}" end