diff options
-rw-r--r-- | .circleci/config.yml | 13 | ||||
-rw-r--r-- | CHANGELOG.md | 20 | ||||
-rw-r--r-- | README.md | 4 | ||||
-rw-r--r-- | lib/pry.rb | 1 | ||||
-rw-r--r-- | lib/pry/cli.rb | 27 | ||||
-rw-r--r-- | lib/pry/commands/show_doc.rb | 1 | ||||
-rw-r--r-- | lib/pry/commands/show_source.rb | 1 | ||||
-rw-r--r-- | lib/pry/config.rb | 4 | ||||
-rw-r--r-- | lib/pry/plugins.rb | 139 | ||||
-rw-r--r-- | lib/pry/pry_class.rb | 5 | ||||
-rw-r--r-- | lib/pry/version.rb | 2 | ||||
-rw-r--r-- | spec/cli_spec.rb | 15 | ||||
-rw-r--r-- | spec/config_spec.rb | 1 | ||||
-rw-r--r-- | spec/integration/bundler_spec.rb | 3 | ||||
-rw-r--r-- | spec/syntax_checking_spec.rb | 2 |
15 files changed, 45 insertions, 193 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml index 7a7a0876..3f55e1d2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -138,6 +138,15 @@ jobs: - <<: *bundle_install - <<: *install_ubuntu_nano - <<: *unit + "ruby-3.0": + docker: + - image: circleci/ruby:3.0 + working_directory: ~/pry + steps: + - <<: *repo_restore_cache + - <<: *bundle_install + - <<: *install_ubuntu_nano + - <<: *unit "jruby-9.1-jdk": docker: - image: circleci/jruby:9.1-jdk @@ -199,6 +208,10 @@ workflows: requires: - rubocop_lint - yard_lint + - "ruby-3.0": + requires: + - rubocop_lint + - yard_lint - "jruby-9.1-jdk": requires: - rubocop_lint diff --git a/CHANGELOG.md b/CHANGELOG.md index b072fbf4..f3d6e4c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ ### master +### [v0.14.0][v0.14.0] (February 8, 2021) + +#### Features + +* Made `?` an alias to `show-source -d` + ([#2133](https://github.com/pry/pry/pull/2133)) +* Added support for Ruby 3.0 + +#### Breaking changes + +* Deleted support for plugin autoloading + ([#2119](https://github.com/pry/pry/pull/2119)). In order to load a Pry plugin + you must `require` it from your `pryrc` or add it to your Gemfile. + + ```rb + # ~/.pryrc + require 'pryrc' + ``` + ### [v0.13.1][v0.13.1] (April 12, 2020) #### Bug fixes @@ -1074,3 +1093,4 @@ complete CHANGELOG: [v0.12.2]: https://github.com/pry/pry/releases/tag/v0.12.2 [v0.13.0]: https://github.com/pry/pry/releases/tag/v0.13.0 [v0.13.1]: https://github.com/pry/pry/releases/tag/v0.13.1 +[v0.14.0]: https://github.com/pry/pry/releases/tag/v0.14.0 @@ -21,7 +21,7 @@ Pry **Links:** -* https://pryrepl.org/ +* https://pry.github.com/ * [YARD API documentation](https://www.rubydoc.info/gems/pry) * [Wiki](https://github.com/pry/pry/wiki) @@ -82,7 +82,7 @@ Installation ### Bundler ```ruby -gem 'pry', '~> 0.12.2' +gem 'pry', '~> 0.13.1' ``` ### Manual @@ -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 17c0d030..8d56794d 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 ||= [] @@ -124,15 +117,6 @@ class Pry end end -# Bring in options defined by plugins -Pry::Slop.new do - on "no-plugins" do - Pry.config.should_load_plugins = false - end -end.parse(ARGV.dup) - -Pry::CLI.add_plugin_options if Pry.config.should_load_plugins - # The default Pry command line options (before plugin options are included) Pry::CLI.add_options do banner( @@ -166,17 +150,16 @@ Pry::CLI.add_options do Pry.config.should_load_local_rc = false end - on :s, "select-plugin=", "Only load specified plugin (and no others)." do |plugin_name| - Pry.config.should_load_plugins = false - Pry.plugins[plugin_name].activate! + on :s, "select-plugin=", "Only load specified plugin (and no others)." do |_plugin_name| + 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! + on :d, "disable-plugin=", "Disable a specific plugin." do |_plugin_name| + warn "The --disable-plugin option is deprecated and has no effect" end on "no-plugins", "Suppress loading of plugins." do - Pry.config.should_load_plugins = false + warn "The --no-plugins option is deprecated and has no effect" end on "plugins", "List installed plugins." do diff --git a/lib/pry/commands/show_doc.rb b/lib/pry/commands/show_doc.rb index c0f183b2..3742348a 100644 --- a/lib/pry/commands/show_doc.rb +++ b/lib/pry/commands/show_doc.rb @@ -89,6 +89,5 @@ class Pry end Pry::Commands.add_command(Pry::Command::ShowDoc) - Pry::Commands.alias_command '?', 'show-doc' end end diff --git a/lib/pry/commands/show_source.rb b/lib/pry/commands/show_source.rb index 7df865c6..1a020349 100644 --- a/lib/pry/commands/show_source.rb +++ b/lib/pry/commands/show_source.rb @@ -113,5 +113,6 @@ class Pry Pry::Commands.add_command(Pry::Command::ShowSource) Pry::Commands.alias_command 'show-method', 'show-source' Pry::Commands.alias_command '$', 'show-source' + Pry::Commands.alias_command '?', 'show-source -d' end end diff --git a/lib/pry/config.rb b/lib/pry/config.rb index 0e54bf69..48c4089d 100644 --- a/lib/pry/config.rb +++ b/lib/pry/config.rb @@ -73,9 +73,6 @@ class Pry # @return [Boolean] whether the local ./.pryrc should be loaded attribute :should_load_local_rc - # @return [Boolean] - attribute :should_load_plugins - # @return [Boolean] whether to load files specified with the -r flag attribute :should_load_requires @@ -196,7 +193,6 @@ class Pry output_prefix: '=> ', requires: [], should_load_requires: true, - should_load_plugins: true, windows_console_warning: true, control_d_handler: Pry::ControlDHandler.method(:default), memory_size: 100, 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 80dda807..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=, @@ -142,7 +140,6 @@ you can add "Pry.config.windows_console_warning = false" to your pryrc. return if @session_finalized @session_finalized = true - load_plugins if Pry.config.should_load_plugins load_requires if Pry.config.should_load_requires load_history if Pry.config.history_load load_traps if Pry.config.should_trap_interrupts @@ -333,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 diff --git a/lib/pry/version.rb b/lib/pry/version.rb index 2ecd02cf..69c4452f 100644 --- a/lib/pry/version.rb +++ b/lib/pry/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true class Pry - VERSION = '0.13.1'.freeze + VERSION = '0.14.0'.freeze end diff --git a/spec/cli_spec.rb b/spec/cli_spec.rb index 93625f79..39d6c7a2 100644 --- a/spec/cli_spec.rb +++ b/spec/cli_spec.rb @@ -41,21 +41,6 @@ RSpec.describe Pry::CLI do end end - describe ".add_plugin_options" do - it "returns self" do - expect(described_class.add_plugin_options).to eq(described_class) - end - - it "loads cli options of plugins" do - plugin_mock = double - expect(plugin_mock).to receive(:load_cli_options) - plugins = { 'pry-testplugin' => plugin_mock } - expect(Pry).to receive(:plugins).and_return(plugins) - - described_class.add_plugin_options - end - end - describe ".add_option_processor" do it "returns self" do expect(described_class.add_option_processor {}).to eq(described_class) diff --git a/spec/config_spec.rb b/spec/config_spec.rb index f1cf5ea6..4018a1db 100644 --- a/spec/config_spec.rb +++ b/spec/config_spec.rb @@ -28,7 +28,6 @@ RSpec.describe Pry::Config do specify { expect(subject.output_prefix).to be_a(String) } specify { expect(subject.requires).to be_an(Array) } specify { expect(subject.should_load_requires).to be(true).or be(false) } - specify { expect(subject.should_load_plugins).to be(true).or be(false) } specify { expect(subject.windows_console_warning).to be(true).or be(false) } specify { expect(subject.control_d_handler).to respond_to(:call) } specify { expect(subject.memory_size).to be_a(Numeric) } diff --git a/spec/integration/bundler_spec.rb b/spec/integration/bundler_spec.rb index 2c4f2b27..224616c2 100644 --- a/spec/integration/bundler_spec.rb +++ b/spec/integration/bundler_spec.rb @@ -9,8 +9,9 @@ RSpec.describe 'Bundler' do context "when Pry requires Gemfile, which doesn't specify Pry as a dependency" do it "loads auto-completion correctly" do code = <<-RUBY - require "pry" + require "bundler" require "bundler/inline" + require "pry" # Silence the "The Gemfile specifies no dependencies" warning class Bundler::UI::Shell diff --git a/spec/syntax_checking_spec.rb b/spec/syntax_checking_spec.rb index ca75ba9f..beba497f 100644 --- a/spec/syntax_checking_spec.rb +++ b/spec/syntax_checking_spec.rb @@ -36,7 +36,7 @@ describe Pry do ["o = Object.new.tap{ def o.render;", "'MEH'", "}"], # multiple syntax errors reported in one SyntaxException - ["puts {'key'=>'val'}.to_json"] + ["puts {key: 'val'}.to_json"] ].compact.each do |foo| it "should raise an error on invalid syntax like #{foo.inspect}" do redirect_pry_io(InputTester.new(*foo), @str_output) do |