mirror of
https://github.com/ruby/ruby.git
synced 2025-08-24 21:44:30 +02:00

(https://github.com/ruby/irb/pull/873)
* Replace ExtendCommand with Command and standardize command related names
1. Rename lib/irb/extend-command.rb to lib/irb/command.rb
2. Rename lib/irb/cmd/*.rb to lib/irb/command/*.rb
3. Rename test/irb/test_cmd.rb to test/irb/test_command.rb
4. Rename ExtendCommand to Command
* Alias ExtendCommand to Command and deprecate it
* Rename Command::Nop to Command::Base
* Not deprecate old constants just yet
* Add lib/irb/cmd/nop.rb back
462c1284af
103 lines
1.9 KiB
Ruby
103 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module IRB
|
|
class Statement
|
|
attr_reader :code
|
|
|
|
def is_assignment?
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def suppresses_echo?
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def should_be_handled_by_debugger?
|
|
raise NotImplementedError
|
|
end
|
|
|
|
def evaluable_code
|
|
raise NotImplementedError
|
|
end
|
|
|
|
class EmptyInput < Statement
|
|
def is_assignment?
|
|
false
|
|
end
|
|
|
|
def suppresses_echo?
|
|
true
|
|
end
|
|
|
|
# Debugger takes empty input to repeat the last command
|
|
def should_be_handled_by_debugger?
|
|
true
|
|
end
|
|
|
|
def code
|
|
""
|
|
end
|
|
|
|
def evaluable_code
|
|
code
|
|
end
|
|
end
|
|
|
|
class Expression < Statement
|
|
def initialize(code, is_assignment)
|
|
@code = code
|
|
@is_assignment = is_assignment
|
|
end
|
|
|
|
def suppresses_echo?
|
|
@code.match?(/;\s*\z/)
|
|
end
|
|
|
|
def should_be_handled_by_debugger?
|
|
true
|
|
end
|
|
|
|
def is_assignment?
|
|
@is_assignment
|
|
end
|
|
|
|
def evaluable_code
|
|
@code
|
|
end
|
|
end
|
|
|
|
class Command < Statement
|
|
def initialize(code, command, arg, command_class)
|
|
@code = code
|
|
@command = command
|
|
@arg = arg
|
|
@command_class = command_class
|
|
end
|
|
|
|
def is_assignment?
|
|
false
|
|
end
|
|
|
|
def suppresses_echo?
|
|
false
|
|
end
|
|
|
|
def should_be_handled_by_debugger?
|
|
require_relative 'command/help'
|
|
require_relative 'command/debug'
|
|
IRB::Command::DebugCommand > @command_class || IRB::Command::Help == @command_class
|
|
end
|
|
|
|
def evaluable_code
|
|
# Hook command-specific transformation to return valid Ruby code
|
|
if @command_class.respond_to?(:transform_args)
|
|
arg = @command_class.transform_args(@arg)
|
|
else
|
|
arg = @arg
|
|
end
|
|
|
|
[@command, arg].compact.join(' ')
|
|
end
|
|
end
|
|
end
|
|
end
|