Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Speed up pry require with autoloading #2250

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
191 changes: 54 additions & 137 deletions lib/pry.rb
Expand Up @@ -3,143 +3,60 @@
# (C) John Mair (banisterfiend) 2016
# MIT License

require 'pry/version'
require 'pry/last_exception'
require 'pry/forwardable'

require 'pry/helpers/base_helpers'
require 'pry/helpers/documentation_helpers'
require 'pry/helpers'
require "method_source"
require "coderay"

require 'pry/basic_object'
require 'pry/prompt'
require 'pry/code_object'
require 'pry/version'
require 'pry/exceptions'
require 'pry/hooks'
require 'pry/input_completer'
require 'pry/command'
require 'pry/class_command'
require 'pry/block_command'
require 'pry/command_set'
require 'pry/syntax_highlighter'
require 'pry/editor'
require 'pry/history'
require 'pry/color_printer'
require 'pry/exception_handler'
require 'pry/system_command_handler'
require 'pry/control_d_handler'
require 'pry/command_state'
require 'pry/warning'
require 'pry/env'

Pry::Commands = Pry::CommandSet.new unless defined?(Pry::Commands)

require 'pry/commands/ls/jruby_hacks'
require 'pry/commands/ls/methods_helper'
require 'pry/commands/ls/interrogatable'
require 'pry/commands/ls/grep'
require 'pry/commands/ls/formatter'
require 'pry/commands/ls/globals'
require 'pry/commands/ls/constants'
require 'pry/commands/ls/methods'
require 'pry/commands/ls/self_methods'
require 'pry/commands/ls/instance_vars'
require 'pry/commands/ls/local_names'
require 'pry/commands/ls/local_vars'
require 'pry/commands/ls/interrogatable'
require 'pry/commands/ls/ls_entity'
require 'pry/commands/ls/methods_helper'
require 'pry/commands/ls'

require 'pry/config/attributable'
require 'pry/config/value'
require 'pry/config/memoized_value'
require 'pry/config/lazy_value'
require 'pry/config'

require 'pry/pry_class'
require 'pry/pry_instance'
require 'pry/inspector'
require 'pry/pager'
require 'pry/indent'
require 'pry/object_path'
require 'pry/output'
require 'pry/input_lock'
require 'pry/repl'
require 'pry/code'
require 'pry/ring'
require 'pry/method'

require 'pry/wrapped_module'
require 'pry/wrapped_module/candidate'

require 'pry/slop'
require 'pry/cli'
require 'pry/core_extensions'
require 'pry/repl_file_loader'

require 'pry/code/loc'
require 'pry/code/code_range'
require 'pry/code/code_file'

require 'pry/method/weird_method_locator'
require 'pry/method/disowned'
require 'pry/method/patcher'

require 'pry/commands/amend_line'
require 'pry/commands/bang'
require 'pry/commands/bang_pry'

require 'pry/commands/cat'
require 'pry/commands/cat/abstract_formatter.rb'
require 'pry/commands/cat/input_expression_formatter.rb'
require 'pry/commands/cat/exception_formatter.rb'
require 'pry/commands/cat/file_formatter.rb'

require 'pry/commands/cd'
require 'pry/commands/change_inspector'
require 'pry/commands/change_prompt'
require 'pry/commands/clear_screen'
require 'pry/commands/code_collector'
require 'pry/commands/disable_pry'
require 'pry/commands/easter_eggs'

require 'pry/commands/edit'
require 'pry/commands/edit/exception_patcher'
require 'pry/commands/edit/file_and_line_locator'

require 'pry/commands/exit'
require 'pry/commands/exit_all'
require 'pry/commands/exit_program'
require 'pry/commands/find_method'
require 'pry/commands/fix_indent'
require 'pry/commands/help'
require 'pry/commands/hist'
require 'pry/commands/import_set'
require 'pry/commands/jump_to'
require 'pry/commands/list_inspectors'

require 'pry/commands/nesting'
require 'pry/commands/play'
require 'pry/commands/pry_backtrace'
require 'pry/commands/pry_version'
require 'pry/commands/raise_up'
require 'pry/commands/reload_code'
require 'pry/commands/reset'
require 'pry/commands/ri'
require 'pry/commands/save_file'
require 'pry/commands/shell_command'
require 'pry/commands/shell_mode'
require 'pry/commands/show_info'
require 'pry/commands/show_doc'
require 'pry/commands/show_input'
require 'pry/commands/show_source'
require 'pry/commands/stat'
require 'pry/commands/switch_to'
require 'pry/commands/toggle_color'

require 'pry/commands/watch_expression'
require 'pry/commands/watch_expression/expression.rb'

require 'pry/commands/whereami'
require 'pry/commands/wtf'
class Pry
autoload(:LastException, 'pry/last_exception')
autoload(:Forwardable, 'pry/forwardable')

autoload(:Helpers, 'pry/helpers')

autoload(:BasicObject, 'pry/basic_object')
autoload(:Prompt, 'pry/prompt')
autoload(:CodeObject, 'pry/code_object')
autoload(:Hooks, 'pry/hooks')
autoload(:InputCompleter, 'pry/input_completer')
autoload(:Command, 'pry/command')
autoload(:ClassCommand, 'pry/class_command')
autoload(:BlockCommand, 'pry/block_command')
autoload(:CommandSet, 'pry/command_set')

Commands = Pry::CommandSet.new unless defined?(Pry::Commands)

autoload(:SyntaxHighlighter, 'pry/syntax_highlighter')
autoload(:Editor, 'pry/editor')
autoload(:History, 'pry/history')
autoload(:ColorPrinter, 'pry/color_printer')
autoload(:ExceptionHandler, 'pry/exception_handler')
autoload(:SystemCommandHandler, 'pry/system_command_handler')
autoload(:ControlDHandler, 'pry/control_d_handler')
autoload(:CommandState, 'pry/command_state')
autoload(:Warning, 'pry/warning')
autoload(:Env, 'pry/env')

autoload(:Config, 'pry/config')

autoload(:Inspector, 'pry/inspector')
autoload(:Pager, 'pry/pager')
autoload(:Indent, 'pry/indent')
autoload(:ObjectPath, 'pry/object_path')
autoload(:Output, 'pry/output')
autoload(:InputLock, 'pry/input_lock')
autoload(:REPL, 'pry/repl')
autoload(:Code, 'pry/code')
autoload(:Ring, 'pry/ring')
autoload(:Method, 'pry/method')
autoload(:WrappedModule, 'pry/wrapped_module')

autoload(:Slop, 'pry/slop')
autoload(:CLI, 'pry/cli')
autoload(:REPLFileLoader, 'pry/repl_file_loader')

require 'pry/pry_class'
require 'pry/pry_instance'
require 'pry/core_extensions'
end
4 changes: 4 additions & 0 deletions lib/pry/code.rb
Expand Up @@ -2,6 +2,10 @@

require 'method_source'

require 'pry/code/loc'
require 'pry/code/code_range'
require 'pry/code/code_file'

class Pry
class << self
# Convert the given object into an instance of `Pry::Code`, if it isn't
Expand Down
61 changes: 61 additions & 0 deletions lib/pry/commands.rb
@@ -0,0 +1,61 @@
# frozen_string_literal: true

require 'pry/commands/ls'

require 'pry/commands/amend_line'
require 'pry/commands/bang'
require 'pry/commands/bang_pry'

require 'pry/commands/cat'
require 'pry/commands/cat/abstract_formatter.rb'
require 'pry/commands/cat/input_expression_formatter.rb'
require 'pry/commands/cat/exception_formatter.rb'
require 'pry/commands/cat/file_formatter.rb'

require 'pry/commands/cd'
require 'pry/commands/change_inspector'
require 'pry/commands/change_prompt'
require 'pry/commands/clear_screen'
require 'pry/commands/code_collector'
require 'pry/commands/disable_pry'
require 'pry/commands/easter_eggs'

require 'pry/commands/edit'
require 'pry/commands/edit/exception_patcher'
require 'pry/commands/edit/file_and_line_locator'

require 'pry/commands/exit'
require 'pry/commands/exit_all'
require 'pry/commands/exit_program'
require 'pry/commands/find_method'
require 'pry/commands/fix_indent'
require 'pry/commands/help'
require 'pry/commands/hist'
require 'pry/commands/import_set'
require 'pry/commands/jump_to'
require 'pry/commands/list_inspectors'

require 'pry/commands/nesting'
require 'pry/commands/play'
require 'pry/commands/pry_backtrace'
require 'pry/commands/pry_version'
require 'pry/commands/raise_up'
require 'pry/commands/reload_code'
require 'pry/commands/reset'
require 'pry/commands/ri'
require 'pry/commands/save_file'
require 'pry/commands/shell_command'
require 'pry/commands/shell_mode'
require 'pry/commands/show_info'
require 'pry/commands/show_doc'
require 'pry/commands/show_input'
require 'pry/commands/show_source'
require 'pry/commands/stat'
require 'pry/commands/switch_to'
require 'pry/commands/toggle_color'

require 'pry/commands/watch_expression'
require 'pry/commands/watch_expression/expression.rb'

require 'pry/commands/whereami'
require 'pry/commands/wtf'
5 changes: 5 additions & 0 deletions lib/pry/commands/cat.rb
@@ -1,5 +1,10 @@
# frozen_string_literal: true

require 'pry/commands/cat/abstract_formatter.rb'
require 'pry/commands/cat/input_expression_formatter.rb'
require 'pry/commands/cat/exception_formatter.rb'
require 'pry/commands/cat/file_formatter.rb'

class Pry
class Command
class Cat < Pry::ClassCommand
Expand Down
2 changes: 1 addition & 1 deletion lib/pry/commands/cat/abstract_formatter.rb
Expand Up @@ -2,7 +2,7 @@

class Pry
class Command
class Cat
class Cat < Pry::ClassCommand
class AbstractFormatter
include Pry::Helpers::CommandHelpers
include Pry::Helpers::BaseHelpers
Expand Down
2 changes: 1 addition & 1 deletion lib/pry/commands/cat/exception_formatter.rb
Expand Up @@ -2,7 +2,7 @@

class Pry
class Command
class Cat
class Cat < Pry::ClassCommand
class ExceptionFormatter < AbstractFormatter
attr_reader :ex
attr_reader :opts
Expand Down
2 changes: 1 addition & 1 deletion lib/pry/commands/cat/file_formatter.rb
Expand Up @@ -2,7 +2,7 @@

class Pry
class Command
class Cat
class Cat < Pry::ClassCommand
class FileFormatter < AbstractFormatter
attr_reader :file_with_embedded_line
attr_reader :opts
Expand Down
2 changes: 1 addition & 1 deletion lib/pry/commands/cat/input_expression_formatter.rb
Expand Up @@ -2,7 +2,7 @@

class Pry
class Command
class Cat
class Cat < Pry::ClassCommand
class InputExpressionFormatter < AbstractFormatter
attr_accessor :input_expressions
attr_accessor :opts
Expand Down
3 changes: 3 additions & 0 deletions lib/pry/commands/edit.rb
@@ -1,5 +1,8 @@
# frozen_string_literal: true

require 'pry/commands/edit/exception_patcher'
require 'pry/commands/edit/file_and_line_locator'

class Pry
class Command
class Edit < Pry::ClassCommand
Expand Down
2 changes: 1 addition & 1 deletion lib/pry/commands/edit/exception_patcher.rb
Expand Up @@ -2,7 +2,7 @@

class Pry
class Command
class Edit
class Edit < Pry::ClassCommand
class ExceptionPatcher
attr_accessor :pry_instance
attr_accessor :state
Expand Down
2 changes: 1 addition & 1 deletion lib/pry/commands/edit/file_and_line_locator.rb
Expand Up @@ -2,7 +2,7 @@

class Pry
class Command
class Edit
class Edit < Pry::ClassCommand
module FileAndLineLocator
class << self
def from_binding(target)
Expand Down
37 changes: 16 additions & 21 deletions lib/pry/commands/ls.rb
@@ -1,29 +1,24 @@
# frozen_string_literal: true

require'pry/commands/ls/jruby_hacks'
require 'pry/commands/ls/methods_helper'
require 'pry/commands/ls/interrogatable'
require 'pry/commands/ls/grep'
require 'pry/commands/ls/formatter'
require 'pry/commands/ls/globals'
require 'pry/commands/ls/constants'
require 'pry/commands/ls/methods'
require 'pry/commands/ls/self_methods'
require 'pry/commands/ls/instance_vars'
require 'pry/commands/ls/local_names'
require 'pry/commands/ls/local_vars'
require 'pry/commands/ls/interrogatable'
require 'pry/commands/ls/ls_entity'
require 'pry/commands/ls/methods_helper'

class Pry
class Command
class Ls < Pry::ClassCommand
DEFAULT_OPTIONS = {
heading_color: :bright_blue,
public_method_color: :default,
private_method_color: :blue,
protected_method_color: :blue,
method_missing_color: :bright_red,
local_var_color: :yellow,
pry_var_color: :default, # e.g. _, pry_instance, _file_
instance_var_color: :blue, # e.g. @foo
class_var_color: :bright_blue, # e.g. @@foo
global_var_color: :default, # e.g. $CODERAY_DEBUG, $eventmachine_library
builtin_global_color: :cyan, # e.g. $stdin, $-w, $PID
pseudo_global_color: :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO
constant_color: :default, # e.g. VERSION, ARGF
class_constant_color: :blue, # e.g. Object, Kernel
exception_constant_color: :magenta, # e.g. Exception, RuntimeError
unloaded_constant_color: :yellow, # Any constant that is still in .autoload? state
separator: " ",
ceiling: [Object, Module, Class]
}.freeze

match 'ls'
group 'Context'
description 'Show the list of vars and methods in the current scope.'
Expand Down
2 changes: 1 addition & 1 deletion lib/pry/commands/watch_expression/expression.rb
Expand Up @@ -2,7 +2,7 @@

class Pry
class Command
class WatchExpression
class WatchExpression < Pry::ClassCommand
class Expression
attr_reader :target, :source, :value, :previous_value, :pry_instance

Expand Down