Sha256: c269ffb1b3456b52cceb6502c4167c52166dd259a8e2d93c43e6bc532abdcd35

Contents?: true

Size: 1.19 KB

Versions: 2

Compression:

Stored size: 1.19 KB

Contents

require 'byebug/command'

module Byebug
  #
  # Edit a file from byebug's prompt.
  #
  class EditCommand < Command
    self.allow_in_control = true

    def regexp
      /^\s* ed(?:it)? (?:\s+(\S+))? \s*$/x
    end

    def execute
      if !@match[1]
        return errmsg(pr('edit.errors.state')) unless @state.file
        file = @state.file
        line = @state.line if @state.line
      elsif (@pos_match = /([^:]+)[:]([0-9]+)/.match(@match[1]))
        file, line = @pos_match.captures
      else
        file = @match[1]
      end

      editor = ENV['EDITOR'] || 'vim'
      file = File.expand_path(file)

      unless File.exist?(file)
        return errmsg(pr('edit.errors.not_exist', file: file))
      end
      unless File.readable?(file)
        return errmsg(pr('edit.errors.not_readable', file: file))
      end

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

      system(cmd)
    end

    def description
      <<-EOD
        edit[ file:lineno] Edit specified files.

        With no argument, edits file containing most recent line listed. Editing
        targets can also be specified to start editing at a specific line in a
        specific file.
      EOD
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
sc_core-0.0.7 test/dummy/vendor/bundle/ruby/2.2.0/gems/byebug-5.0.0/lib/byebug/commands/edit.rb
byebug-5.0.0 lib/byebug/commands/edit.rb