class Byebug::EditCommand

Edit a file from byebug's prompt.

Public Class Methods

description() click to toggle source
# File lib/byebug/commands/edit.rb, line 16
    def self.description
      <<-DESCRIPTION
        edit[ file:lineno]

        #{short_description}

        With no argumnt, edits file containing most re line listed. Editing
        targets can also be specified to start editing at a specific line in a
        specific file
      DESCRIPTION
    end
regexp() click to toggle source
# File lib/byebug/commands/edit.rb, line 12
def self.regexp
  /^\s* ed(?:it)? (?:\s+(\S+))? \s*$/x
end
short_description() click to toggle source
# File lib/byebug/commands/edit.rb, line 28
def self.short_description
  "Edits source files"
end

Public Instance Methods

execute() click to toggle source
# File lib/byebug/commands/edit.rb, line 32
def execute
  file, line = location(@match[1])
  return edit_error("not_exist", file) unless File.exist?(file)
  return edit_error("not_readable", file) unless File.readable?(file)

  cmd = line ? "#{editor} +#{line} #{file}" : "#{editor} #{file}"

  Kernel.system(cmd)
end

Private Instance Methods

edit_error(type, file) click to toggle source
# File lib/byebug/commands/edit.rb, line 64
def edit_error(type, file)
  errmsg(pr("edit.errors.#{type}", file: file))
end
editor() click to toggle source
# File lib/byebug/commands/edit.rb, line 60
def editor
  ENV["EDITOR"] || "vim"
end
location(matched) click to toggle source
# File lib/byebug/commands/edit.rb, line 44
def location(matched)
  if matched.nil?
    file = frame.file
    return errmsg(pr("edit.errors.state")) unless file

    line = frame.line
  elsif (@pos_match = /([^:]+)[:]([0-9]+)/.match(matched))
    file, line = @pos_match.captures
  else
    file = matched
    line = nil
  end

  [File.expand_path(file), line]
end