Class: Byebug::SetCommand

Inherits:
Command
  • Object
show all
Defined in:
lib/byebug/commands/set.rb

Overview

Implements byebug “set” command.

Defined Under Namespace

Classes: SubcmdStruct2

Constant Summary collapse

Subcommands =
[
   ['annotate', 2, false, 'Set annotation level',
    '0 == normal. '                                                    \
    '2 == output annotated suitably for use by programs that control ' \
    'byebug.'],
   ['args', 2, false,
    'Set argument list to give program being debugged when it is started'],
   ['autoeval', 4, true, 'Evaluate every unrecognized command'],
   ['autolist', 4, true, 'Execute "list" command on every breakpoint'],
   ['autoirb', 4, true, 'Invoke IRB on every stop'],
   ['autoreload', 4, true, 'Reload source code when changed'],
   ['basename', 1, true, 'Report file basename only showing file names'],
   ['callstyle', 2, false, 'Set how you want call parameters displayed'],
   ['byebugtesting', 8, false, 'Used when testing byebug'],
   ['forcestep', 2, true,
    'Make sure "next/step" commands always move to a new line'],
   ['fullpath', 2, true, 'Display full file names in frames'],
   ['history', 2, false,
    'Generic command for setting command history parameters',
    'set history filename -- Set the filename in which to record the ' \
    'command history. '                                                \
    'set history save -- Set saving of the history record on exit. '   \
    'set history size -- Set the size of the command history'],
   ['linetrace+', 10, true,
    'Set line execution tracing to show different lines'],
   ['linetrace', 3, true, 'Set line execution tracing'],
   ['listsize', 3, false, 'Set number of source lines to list by default'],
   ['trace', 1, true, 'Display stack trace when "eval" raises exception'],
   ['width', 1, false,
    'Number of characters per line for byebug\'s output']
  ].map do |name, min, is_bool, short_help, long_help|
  SubcmdStruct2.new(name, min, is_bool, short_help, long_help)
end

Constants inherited from Command

Command::DEF_OPTIONS

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Command

commands, #find, inherited, #initialize, load_commands, #match, method_missing, options, #print_subcmds, register_setting_get, register_setting_set, register_setting_var, settings, settings_map

Constructor Details

This class inherits a constructor from Byebug::Command

Class Method Details

.help(args) ⇒ Object



160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
# File 'lib/byebug/commands/set.rb', line 160

def help(args)
  # specific subcommand help
  if args[1]
    subcmd = find(Subcommands, args[1])
    return "Invalid \"set\" subcommand \"#{args[1]}\"." unless subcmd

    str = subcmd.short_help + '.'
    str += "\n" + subcmd.long_help if subcmd.long_help
    return str
  end

  # general help
  s = %{
    Modifies parts of byebug environment. Boolean values take
    on, off, 1 or 0.
    You can see these environment settings with the \"show\" command.

    --
    List of set subcommands:
    --
  }
  for subcmd in Subcommands do
    s += "set #{subcmd.name} -- #{subcmd.short_help}\n"
  end
  return s
end

.help_commandObject



156
157
158
# File 'lib/byebug/commands/set.rb', line 156

def help_command
  "set"
end

Instance Method Details

#executeObject



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/byebug/commands/set.rb', line 48

def execute
  # "Set" alone just prints subcommands
  return print_subcmds(Subcommands) unless @match[1]

  args = @match[1].split(/[ \t]+/)
  try_subcmd = args.shift
  try_subcmd.downcase!
  if try_subcmd =~ /^no/i
    set_on = false
    try_subcmd = try_subcmd[2..-1]
  else
    set_on = true
  end

  subcmd = find(Subcommands, try_subcmd)

  # Subcommand not found...
  return print "Unknown set command \"#{try_subcmd}\"\n" unless subcmd

  set_on = get_onoff(args[0]) if subcmd.is_bool and args.size > 0

  case subcmd.name
  when /^annotate$/
    level = get_int(args[0], "Set annotate", 0, 3, 0)
    if level
      Byebug.annotate = level
    else
      return
    end
  when /^args$/
    if defined?(Byebug::BYEBUG_SCRIPT)
      Command.settings[:argv][1..-1] = args
    else
      Command.settings[:argv] = args
    end
  when /^autolist$/
    Command.settings[:autolist] = (set_on ? 1 : 0)
  when /^autoeval$/
    Command.settings[:autoeval] = set_on
  when /^basename$/
    Command.settings[:basename] = set_on
  when /^callstyle$/
    if args[0]
      arg = args[0].downcase.to_sym
      case arg
      when :short, :last, :tracked
        Command.settings[:callstyle] = arg
      else
        print "Invalid call style #{arg}. Should be one of: " \
              "'short', 'last' or 'tracked'.\n"
      end
    end
  when /^trace$/
    Command.settings[:stack_trace_on_error] = set_on
  when /^fullpath$/
    Command.settings[:full_path] = set_on
  when /^autoreload$/
    Command.settings[:reload_source_on_change] = set_on
  when /^autoirb$/
    Command.settings[:autoirb] = (set_on ? 1 : 0)
  when /^byebugtesting$/
    Command.settings[:byebugtesting] = set_on
    if set_on
      Command.settings[:basename] = true
    end
  when /^forcestep$/
    self.class.settings[:force_stepping] = set_on
  when /^history$/
    if 2 == args.size
      interface = @state.interface
      case args[0]
      when /^save$/
        interface.history_save = get_onoff(args[1])
      when /^size$/
        interface.history_length =
          get_int(args[1], "Set history size")
      when /^filename$/
        interface.histfile =
          File.join(ENV["HOME"]||ENV["HOMEPATH"]||".", args[1])
      else
        print "Invalid history parameter #{args[0]}. Should be " \
              "'filename', 'save' or 'size'.\n"
      end
    else
      print "Need two parameters for 'set history'; got " \
            "#{args.size}.\n"
      return
    end
  when /^linetrace\+$/
    self.class.settings[:tracing_plus] = set_on
  when /^linetrace$/
    Command.settings[:tracing] = set_on
  when /^listsize$/
    listsize = get_int(args[0], "Set listsize", 1, nil, 10)
    return unless listsize
    self.class.settings[:listsize] = listsize
  when /^width$/
    width = get_int(args[0], "Set width", 10, nil, 80)
    return unless width
    self.class.settings[:width] = width
    ENV['COLUMNS'] = width.to_s
  else
    return print "Unknown setting #{@match[1]}.\n"
  end
  return print "#{show_setting(subcmd.name)}\n"
end

#regexpObject



44
45
46
# File 'lib/byebug/commands/set.rb', line 44

def regexp
  /^set (?: \s+ (.*) )?$/ix
end