module RuboCop::Ext::RegexpParser::Expression::Base

def build_location

def build_location
  return { body: expression } unless (q = quantifier)
  body = expression.adjust(end_pos: -q.text.length)
  q_loc = expression.with(begin_pos: body.end_pos)
  { body: body, quantifier: q_loc }
end

def expression

Shortcut to `loc.expression`
def expression
  @expression ||= origin.adjust(begin_pos: ts, end_pos: ts + full_length)
end

def expression

Shortcut to `loc.expression`
def expression
  end_pos = start_index + full_length
  @expression ||= origin.adjust(begin_pos: start_index, end_pos: end_pos)
end

def loc

Please open issue if you need other locations

^ end
^ begin
^^^^^ body
^^^^ quantifier
^^^^^^^^^ expression
[a-z]{2,}
E.g.

- begin/end: for `[` and `]` (only CharacterSet for now)
- quantifier: for `+`, `{1,2}`, etc.
- expression: complete expression
@returns a location map like `parser` does, with:
def loc
  @loc ||= Map.new(expression, **build_location)
end

def start_index

def start_index
  # ts is a byte index; convert it to a character index
  @start_index ||= source.byteslice(0, ts).length
end