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

(https://github.com/ruby/irb/pull/888)
* Remove dead irb_level method
* Restructure workspace management
Currently, workspace is an attribute of IRB::Context in most use cases.
But when some workspace commands are used, like `pushws` or `popws`, a
workspace will be created and used along side with the original workspace
attribute.
This complexity is not necessary and will prevent us from expanding
multi-workspace support in the future.
So this commit introduces a @workspace_stack ivar to IRB::Context so IRB
can have a more natural way to manage workspaces.
* Fix pushws without args
* Always display workspace stack after related commands are used
61560b99b3
60 lines
1.2 KiB
Ruby
60 lines
1.2 KiB
Ruby
# frozen_string_literal: true
|
|
#
|
|
# change-ws.rb -
|
|
# by Keiju ISHITSUKA(keiju@ruby-lang.org)
|
|
#
|
|
|
|
require_relative "../ext/workspaces"
|
|
|
|
module IRB
|
|
# :stopdoc:
|
|
|
|
module Command
|
|
class Workspaces < Base
|
|
category "Workspace"
|
|
description "Show workspaces."
|
|
|
|
def execute(*obj)
|
|
inspection_resuls = irb_context.instance_variable_get(:@workspace_stack).map do |ws|
|
|
truncated_inspect(ws.main)
|
|
end
|
|
|
|
puts "[" + inspection_resuls.join(", ") + "]"
|
|
end
|
|
|
|
private
|
|
|
|
def truncated_inspect(obj)
|
|
obj_inspection = obj.inspect
|
|
|
|
if obj_inspection.size > 20
|
|
obj_inspection = obj_inspection[0, 19] + "...>"
|
|
end
|
|
|
|
obj_inspection
|
|
end
|
|
end
|
|
|
|
class PushWorkspace < Workspaces
|
|
category "Workspace"
|
|
description "Push an object to the workspace stack."
|
|
|
|
def execute(*obj)
|
|
irb_context.push_workspace(*obj)
|
|
super
|
|
end
|
|
end
|
|
|
|
class PopWorkspace < Workspaces
|
|
category "Workspace"
|
|
description "Pop a workspace from the workspace stack."
|
|
|
|
def execute(*obj)
|
|
irb_context.pop_workspace(*obj)
|
|
super
|
|
end
|
|
end
|
|
end
|
|
|
|
# :startdoc:
|
|
end
|