mirror of
https://github.com/ruby/ruby.git
synced 2025-08-25 14:05:02 +02:00

(https://github.com/ruby/irb/pull/824)
* Command is not a method
* Fix command test
* Implement non-method command name completion
* Add test for ExtendCommandBundle.def_extend_command
* Add helper method install test
* Remove spaces in command input parse
* Remove command arg unquote in help command
* Simplify Statement and handle execution in IRB::Irb
* Tweak require, const name
* Always install CommandBundle module to main object
* Remove considering local variable in command or expression check
* Remove unused method, tweak
* Remove outdated comment for help command arg
Co-authored-by: Stan Lo <stan001212@gmail.com>
---------
8fb776e379
Co-authored-by: Stan Lo <stan001212@gmail.com>
81 lines
1.7 KiB
Ruby
81 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
#
|
|
# nop.rb -
|
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
|
#
|
|
|
|
module IRB
|
|
# :stopdoc:
|
|
|
|
module Command
|
|
class CommandArgumentError < StandardError; end
|
|
|
|
def self.extract_ruby_args(*args, **kwargs)
|
|
throw :EXTRACT_RUBY_ARGS, [args, kwargs]
|
|
end
|
|
|
|
class Base
|
|
class << self
|
|
def category(category = nil)
|
|
@category = category if category
|
|
@category
|
|
end
|
|
|
|
def description(description = nil)
|
|
@description = description if description
|
|
@description
|
|
end
|
|
|
|
def help_message(help_message = nil)
|
|
@help_message = help_message if help_message
|
|
@help_message
|
|
end
|
|
|
|
private
|
|
|
|
def highlight(text)
|
|
Color.colorize(text, [:BOLD, :BLUE])
|
|
end
|
|
end
|
|
|
|
def self.execute(irb_context, arg)
|
|
new(irb_context).execute(arg)
|
|
rescue CommandArgumentError => e
|
|
puts e.message
|
|
end
|
|
|
|
def initialize(irb_context)
|
|
@irb_context = irb_context
|
|
end
|
|
|
|
attr_reader :irb_context
|
|
|
|
def unwrap_string_literal(str)
|
|
return if str.empty?
|
|
|
|
sexp = Ripper.sexp(str)
|
|
if sexp && sexp.size == 2 && sexp.last&.first&.first == :string_literal
|
|
@irb_context.workspace.binding.eval(str).to_s
|
|
else
|
|
str
|
|
end
|
|
end
|
|
|
|
def ruby_args(arg)
|
|
# Use throw and catch to handle arg that includes `;`
|
|
# For example: "1, kw: (2; 3); 4" will be parsed to [[1], { kw: 3 }]
|
|
catch(:EXTRACT_RUBY_ARGS) do
|
|
@irb_context.workspace.binding.eval "IRB::Command.extract_ruby_args #{arg}"
|
|
end || [[], {}]
|
|
end
|
|
|
|
def execute(arg)
|
|
#nop
|
|
end
|
|
end
|
|
|
|
Nop = Base
|
|
end
|
|
|
|
# :startdoc:
|
|
end
|