feat: edit working-checkout comparisons with normal editor actions

This commit is contained in:
2026-10-11 02:13:16 +02:00
parent 704dce2539
commit 9a34669c08
16 changed files with 2277 additions and 647 deletions
+12 -11
View File
@@ -59,13 +59,13 @@ module Vamp
Core = Module.new
# @param entries [Array<Hash{String => String, nil}>] action name and optional Ex alias descriptors
# @return [Array<Module>] frozen action namespaces
# @return [Array<Module, Vamp::Action>] frozen action namespaces and leaves
def self.install_actions(entries)
raise TypeError, "core action catalog must be an Array" unless entries.is_a?(Array)
namespaces = [Core]
aliases = {}
entries.each do |entry|
entries.sort_by { |entry| entry.fetch("name").count(".") }.each do |entry|
raise TypeError, "core action descriptor must be a Hash" unless entry.is_a?(Hash)
install_action(entry.fetch("name"), namespaces)
@@ -139,7 +139,7 @@ module Vamp
end
# @param name [String]
# @param namespaces [Array<Module>]
# @param namespaces [Array<Module, Vamp::Action>]
# @return [Symbol] the installed action method name
def self.install_action(name, namespaces)
name = action_name(name)
@@ -147,7 +147,8 @@ module Vamp
namespace = parts[0...-1].reduce(Core) { |parent, part| action_namespace(parent, part, namespaces, name) }
leaf = parts.last
available_action!(namespace, leaf, name)
action = Action.send(:new, name.freeze).freeze
action = Action.send(:new, name.freeze)
namespaces << action
namespace.define_singleton_method(leaf) { action }
end
@@ -160,23 +161,23 @@ module Vamp
name
end
# @param parent [Module]
# @param parent [Module, Vamp::Action]
# @param part [String]
# @param namespaces [Array<Module>]
# @param namespaces [Array<Module, Vamp::Action>]
# @param name [String]
# @return [Module]
# @return [Module, Vamp::Action]
def self.action_namespace(parent, part, namespaces, name)
return new_action_namespace(parent, part, namespaces) unless parent.singleton_methods(false).include?(part.to_sym)
child = parent.public_send(part)
raise ArgumentError, "conflicting core action namespace: #{name}" unless child.is_a?(Module)
raise ArgumentError, "conflicting core action namespace: #{name}" unless child.is_a?(Module) || child.is_a?(Action)
child
end
# @param parent [Module]
# @param parent [Module, Vamp::Action]
# @param part [String]
# @param namespaces [Array<Module>]
# @param namespaces [Array<Module, Vamp::Action>]
# @return [Module]
def self.new_action_namespace(parent, part, namespaces)
child = Module.new
@@ -185,7 +186,7 @@ module Vamp
child
end
# @param namespace [Module]
# @param namespace [Module, Vamp::Action]
# @param leaf [String]
# @param name [String]
# @return [nil]