Class: RBS::Location
- Inherits:
-
Object
- Object
- RBS::Location
- Defined in:
- lib/rbs/location_aux.rb,
ext/rbs_extension/location.c
Constant Summary collapse
- WithChildren =
self
Class Method Summary collapse
- .new(buffer_ = nil, start_pos_ = nil, end_pos_ = nil, buffer: nil, start_pos: nil, end_pos: nil) ⇒ Object
- .to_string(location, default: "*:*:*...*:*") ⇒ Object
Instance Method Summary collapse
- #==(other) ⇒ Object
- #[](name) ⇒ Object (also: #aref)
- #_add_optional_child(name, start, end) ⇒ Object
- #_add_optional_no_child(name) ⇒ Object
- #_add_required_child(name, start, end) ⇒ Object
- #_optional_keys ⇒ Object
- #_required_keys ⇒ Object
- #add_optional_child(name, range) ⇒ Object
- #add_required_child(name, range) ⇒ Object
- #buffer ⇒ Object
- #each_optional_key(&block) ⇒ Object
- #each_required_key(&block) ⇒ Object
- #end_column ⇒ Object
- #end_line ⇒ Object
- #end_loc ⇒ Object
- #end_pos ⇒ Object
- #inspect ⇒ Object
- #key?(name) ⇒ Boolean
- #name ⇒ Object
- #optional_key?(name) ⇒ Boolean
- #range ⇒ Object
- #required_key?(name) ⇒ Boolean
- #source ⇒ Object
- #start_column ⇒ Object
- #start_line ⇒ Object
- #start_loc ⇒ Object
- #start_pos ⇒ Object
- #to_json(state = _ = nil) ⇒ Object
- #to_s ⇒ Object
Class Method Details
.new(buffer_ = nil, start_pos_ = nil, end_pos_ = nil, buffer: nil, start_pos: nil, end_pos: nil) ⇒ Object
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/rbs/location_aux.rb', line 11 def self.new(buffer_ = nil, start_pos_ = nil, end_pos_ = nil, buffer: nil, start_pos: nil, end_pos: nil) __skip__ = begin if buffer && start_pos && end_pos super(buffer, start_pos, end_pos) else super(buffer_, start_pos_, end_pos_) end end end |
.to_string(location, default: "*:*:*...*:*") ⇒ Object
93 94 95 |
# File 'lib/rbs/location_aux.rb', line 93 def self.to_string(location, default: "*:*:*...*:*") location&.to_s || default end |
Instance Method Details
#==(other) ⇒ Object
70 71 72 73 74 75 |
# File 'lib/rbs/location_aux.rb', line 70 def ==(other) other.is_a?(Location) && other.buffer == buffer && other.start_pos == start_pos && other.end_pos == end_pos end |
#[](name) ⇒ Object Also known as: aref
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 |
# 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) ⇒ Object
192 193 194 195 196 197 198 199 200 201 202 |
# 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) ⇒ Object
204 205 206 207 208 209 210 |
# 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) ⇒ Object
180 181 182 183 184 185 186 187 188 189 190 |
# 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;
}
|
#_optional_keys ⇒ Object
243 244 245 246 247 248 249 250 251 252 253 254 255 |
# 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 ⇒ Object
257 258 259 260 261 262 263 264 265 266 267 268 269 |
# 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;
}
|
#add_optional_child(name, range) ⇒ Object
101 102 103 104 105 106 107 |
# 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) ⇒ Object
97 98 99 |
# File 'lib/rbs/location_aux.rb', line 97 def add_required_child(name, range) _add_required_child(name, range.begin, range.end) end |
#buffer ⇒ Object
139 140 141 142 |
# 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) ⇒ Object
109 110 111 112 113 114 115 |
# 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) ⇒ Object
117 118 119 120 121 122 123 |
# 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 ⇒ Object
42 43 44 |
# File 'lib/rbs/location_aux.rb', line 42 def end_column end_loc[1] end |
#end_line ⇒ Object
38 39 40 |
# File 'lib/rbs/location_aux.rb', line 38 def end_line end_loc[0] end |
#end_loc ⇒ Object
52 53 54 55 56 |
# File 'lib/rbs/location_aux.rb', line 52 def end_loc @end_loc ||= begin _end_loc || buffer.pos_to_loc(end_pos) end end |
#end_pos ⇒ Object
149 150 151 152 |
# 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);
}
|
#inspect ⇒ Object
5 6 7 8 9 |
# 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
125 126 127 |
# File 'lib/rbs/location_aux.rb', line 125 def key?(name) optional_key?(name) || required_key?(name) end |
#name ⇒ Object
26 27 28 |
# File 'lib/rbs/location_aux.rb', line 26 def name buffer.name end |
#optional_key?(name) ⇒ Boolean
129 130 131 |
# File 'lib/rbs/location_aux.rb', line 129 def optional_key?(name) _optional_keys.include?(name) end |
#range ⇒ Object
58 59 60 |
# File 'lib/rbs/location_aux.rb', line 58 def range @range ||= start_pos...end_pos end |
#required_key?(name) ⇒ Boolean
133 134 135 |
# File 'lib/rbs/location_aux.rb', line 133 def required_key?(name) _required_keys.include?(name) end |
#source ⇒ Object
62 63 64 |
# File 'lib/rbs/location_aux.rb', line 62 def source @source ||= (buffer.content[range] || raise) end |
#start_column ⇒ Object
34 35 36 |
# File 'lib/rbs/location_aux.rb', line 34 def start_column start_loc[1] end |
#start_line ⇒ Object
30 31 32 |
# File 'lib/rbs/location_aux.rb', line 30 def start_line start_loc[0] end |
#start_loc ⇒ Object
46 47 48 49 50 |
# 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 ⇒ Object
144 145 146 147 |
# 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) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# 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 ⇒ Object
66 67 68 |
# File 'lib/rbs/location_aux.rb', line 66 def to_s "#{name || "-"}:#{start_line}:#{start_column}...#{end_line}:#{end_column}" end |