# class Byebug::RegularState

Controls state of Byebug's REPL when in normal mode

### Attributes

context[RW]
display[RW]
file[RW]
frame[RW]
interface[W]
line[RW]
prev_line[RW]

### Public Class Methods

new(context, display, file, interface, line) click to toggle source
Calls superclass method Byebug::State.new

    # File lib/byebug/states/regular_state.rb, line 11
    def initialize(context, display, file, interface, line)
      super(interface)
      @context = context
      @display = display
      @file = file
      @frame = 0
      @line = line
      @prev_line = nil
      @proceed = false
    end

### Public Instance Methods

c_frame?(pos) click to toggle source

Checks whether the frame in position `pos` is a c-frame or not

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 165
    def c_frame?(pos)
      context.frame_binding(pos).nil?
    end

frame_args(pos) click to toggle source

Builds a string containing all available args in frame number `pos`, in a verbose or non verbose way according to the value of the `callstyle` setting

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 84
    def frame_args(pos)
      args = context.frame_args(pos)
      return '' if args.empty?

      locals = context.frame_locals(pos) unless Setting[:callstyle] == 'short'
      my_args = args.map do |arg|
        case arg[0]
        when :block then prefix, default = '&', 'block'
        when :rest then prefix, default = '*', 'args'
        else prefix, default = '', nil
        end

        kls = if Setting[:callstyle] == 'short' || arg[1].nil? || locals.empty?
                ''
              else
                "##{locals[arg[1]].class}"
              end

        "#{prefix}#{arg[1] || default}#{kls}"
      end

      "(#{my_args.join(', ')})"
    end

frame_block_and_method(pos) click to toggle source

Builds a formatted string containing information about block and method of the frame in position `pos`

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 70
    def frame_block_and_method(pos)
      deco_regexp = /((?:block(?: \(\d+ levels\))?|rescue) in )?(.+)/
      deco_method = "#{context.frame_method(pos)}"
      block_and_method = deco_regexp.match(deco_method)[1..2]
      block_and_method.map { |x| x.nil? ? '' : x }
    end

frame_call(pos) click to toggle source

Builds a formatted string containing information about current method call in frame number `pos`.

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 114
    def frame_call(pos)
      block, method = frame_block_and_method(pos)

      block + frame_class(pos) + method + frame_args(pos)
    end

frame_class(pos) click to toggle source

Builds a string containing the class associated to frame number `pos` or an empty string if the current `callstyle` setting is 'short'

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 55
    def frame_class(pos)
      return '' if Setting[:callstyle] == 'short'

      klass = context.frame_class(pos)
      return '' if klass.to_s.empty?

      "#{klass}."
    end

frame_file(pos) click to toggle source

Formatted filename in frame number `pos`

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 125
    def frame_file(pos)
      fullpath = context.frame_file(pos)
      Setting[:fullpath] ? fullpath : shortpath(fullpath)
    end

frame_line(pos) click to toggle source

Line number in frame number `pos`

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 135
    def frame_line(pos)
      context.frame_line(pos)
    end

frame_mark(pos) click to toggle source

Formatted mark for number of frame in position `pos`. The mark can contain the current frame symbo (–>), the c_frame symbol (ͱ–) or both

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 154
    def frame_mark(pos)
      mark = frame == pos ? '-->' : '   '

      c_frame?(pos) ? mark + ' ͱ--' : mark
    end

frame_pos(pos) click to toggle source

Properly formatted frame number of frame in position `pos`

@param pos [Integer] Frame position.

    # File lib/byebug/states/regular_state.rb, line 144
    def frame_pos(pos)
      format('%-2d', pos)
    end

location() click to toggle source

Current (formatted) location

    # File lib/byebug/states/regular_state.rb, line 43
    def location
      l = "#{normalize(file)} @ #{line}\n"
      l += "#{get_line(file, line)}\n" unless %w((irb) -e').include?(file)
      l
    end

proceed() click to toggle source

Signals the REPL that the execution can proceed

    # File lib/byebug/states/regular_state.rb, line 35
    def proceed
      @proceed = true
    end

proceed?() click to toggle source

Checks whether that execution can proceed

    # File lib/byebug/states/regular_state.rb, line 28
    def proceed?
      @proceed
    end

### Private Instance Methods

shortpath(fullpath) click to toggle source

    # File lib/byebug/states/regular_state.rb, line 171
    def shortpath(fullpath)
      components = Pathname(fullpath).each_filename.to_a
      return fullpath if components.size <= 2

      File.join('...', components[-3..-1])
    end