summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMatijs van Zuijlen <matijs@matijs.net>2020-03-22 12:58:42 +0100
committerMatijs van Zuijlen <matijs@matijs.net>2020-03-22 13:02:21 +0100
commit20d63ca783133f05865892ce172fe75a39c0a2fa (patch)
tree1ecb65e795a52c784a5a499a67f8aa617e75d4d3 /lib
parentef8602bf987a590451344a47eabdfda6135587f1 (diff)
downloadpry-20d63ca783133f05865892ce172fe75a39c0a2fa.tar.gz
Remove plugin system in favor of regular requires
Diffstat (limited to 'lib')
-rw-r--r--lib/pry.rb1
-rw-r--r--lib/pry/cli.rb11
-rw-r--r--lib/pry/plugins.rb139
-rw-r--r--lib/pry/pry_class.rb4
4 files changed, 2 insertions, 153 deletions
diff --git a/lib/pry.rb b/lib/pry.rb
index 2fddd003..7ead087b 100644
--- a/lib/pry.rb
+++ b/lib/pry.rb
@@ -13,7 +13,6 @@ require 'pry/helpers'
require 'pry/basic_object'
require 'pry/prompt'
-require 'pry/plugins'
require 'pry/code_object'
require 'pry/exceptions'
require 'pry/hooks'
diff --git a/lib/pry/cli.rb b/lib/pry/cli.rb
index 2e2b1ea9..3098eb89 100644
--- a/lib/pry/cli.rb
+++ b/lib/pry/cli.rb
@@ -35,13 +35,6 @@ class Pry
self
end
- # Bring in options defined in plugins
- def add_plugin_options
- Pry.plugins.values.each(&:load_cli_options)
-
- self
- end
-
# Add a block responsible for processing parsed options.
def add_option_processor(&block)
self.option_processors ||= []
@@ -158,11 +151,11 @@ Pry::CLI.add_options do
end
on :s, "select-plugin=", "Only load specified plugin (and no others)." do |plugin_name|
- Pry.plugins[plugin_name].activate!
+ warn "The --select-plugin option is deprecated and has no effect"
end
on :d, "disable-plugin=", "Disable a specific plugin." do |plugin_name|
- Pry.plugins[plugin_name].disable!
+ warn "The --disable-plugin option is deprecated and has no effect"
end
on "no-plugins", "Suppress loading of plugins." do
diff --git a/lib/pry/plugins.rb b/lib/pry/plugins.rb
deleted file mode 100644
index c29894d4..00000000
--- a/lib/pry/plugins.rb
+++ /dev/null
@@ -1,139 +0,0 @@
-# frozen_string_literal: true
-
-require 'ostruct'
-
-class Pry
- class PluginManager
- PRY_PLUGIN_PREFIX = /^pry-/.freeze
-
- # Placeholder when no associated gem found, displays warning
- class NoPlugin
- def initialize(name)
- @name = name
- end
-
- def method_missing(*)
- warn "Warning: The plugin '#{@name}' was not found! (no gem found)"
- super
- end
-
- def respond_to_missing?(*)
- false
- end
- end
-
- class Plugin
- attr_accessor :name, :gem_name, :enabled, :spec, :active
-
- def initialize(name, gem_name, spec, enabled)
- @name = name
- @gem_name = gem_name
- @enabled = enabled
- @spec = spec
- end
-
- # Disable a plugin. (prevents plugin from being loaded, cannot
- # disable an already activated plugin)
- def disable!
- self.enabled = false
- end
-
- # Enable a plugin. (does not load it immediately but puts on
- # 'white list' to be loaded)
- def enable!
- self.enabled = true
- end
-
- # Load the Command line options defined by this plugin (if they exist)
- def load_cli_options
- cli_options_file = File.join(spec.full_gem_path, "lib/#{spec.name}/cli.rb")
- return unless File.exist?(cli_options_file)
-
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.4.4")
- cli_options_file = File.realpath(cli_options_file)
- end
- require cli_options_file
- end
-
- # Activate the plugin (require the gem - enables/loads the
- # plugin immediately at point of call, even if plugin is
- # disabled)
- # Does not reload plugin if it's already active.
- def activate!
- # Create the configuration object for the plugin.
- Pry.config.send("#{gem_name.tr('-', '_')}=", OpenStruct.new)
-
- begin
- require gem_name unless active?
- rescue LoadError => e
- warn "Found plugin #{gem_name}, but could not require '#{gem_name}'"
- warn e
- rescue StandardError => e
- warn "require '#{gem_name}' # Failed, saying: #{e}"
- end
-
- self.active = true
- self.enabled = true
- end
-
- alias active? active
- alias enabled? enabled
-
- def supported?
- pry_version = Gem::Version.new(VERSION)
- spec.dependencies.each do |dependency|
- if dependency.name == "pry"
- return dependency.requirement.satisfied_by?(pry_version)
- end
- end
- true
- end
- end
-
- def initialize
- @plugins = []
- end
-
- # Find all installed Pry plugins and store them in an internal array.
- def locate_plugins
- gem_list.each do |gem|
- next if gem.name !~ PRY_PLUGIN_PREFIX
-
- plugin_name = gem.name.split('-', 2).last
- plugin = Plugin.new(plugin_name, gem.name, gem, false)
- @plugins << plugin.tap(&:enable!) if plugin.supported? && !plugin_located?(plugin)
- end
- @plugins
- end
-
- # @return [Hash] A hash with all plugin names (minus the 'pry-') as
- # keys and Plugin objects as values.
- def plugins
- h = Hash.new { |_, key| NoPlugin.new(key) }
- @plugins.each do |plugin|
- h[plugin.name] = plugin
- end
- h
- end
-
- # Require all enabled plugins, disabled plugins are skipped.
- def load_plugins
- @plugins.each do |plugin|
- plugin.activate! if plugin.enabled?
- end
- end
-
- private
-
- def plugin_located?(plugin)
- @plugins.any? { |existing| existing.gem_name == plugin.gem_name }
- end
-
- def gem_list
- Gem.refresh
- return Gem::Specification if Gem::Specification.respond_to?(:each)
-
- Gem.source_index.find_name('')
- end
- end
-end
diff --git a/lib/pry/pry_class.rb b/lib/pry/pry_class.rb
index 00dc83bd..118102dd 100644
--- a/lib/pry/pry_class.rb
+++ b/lib/pry/pry_class.rb
@@ -24,8 +24,6 @@ class Pry
attr_accessor :last_internal_error
attr_accessor :config
- def_delegators :@plugin_manager, :plugins, :load_plugins, :locate_plugins
-
def_delegators(
:@config, :input, :input=, :output, :output=, :commands,
:commands=, :print, :print=, :exception_handler, :exception_handler=,
@@ -332,9 +330,7 @@ Readline version #{Readline::VERSION} detected - will not auto_resize! correctly
# Basic initialization.
def self.init
- @plugin_manager ||= PluginManager.new
reset_defaults
- locate_plugins
end
# Return a `Binding` object for `target` or return `target` if it is