Class: IRB::BaseCompletor

Inherits:
Object show all
Defined in:
lib/irb/completion.rb

Overview

:nodoc:

Direct Known Subclasses

RegexpCompletor, TypeCompletor

Constant Summary collapse

ReservedWords =

Set of reserved words used by Ruby, you should not use these for constants or variables

%w[
  __ENCODING__ __LINE__ __FILE__
  BEGIN END
  alias and
  begin break
  case class
  def defined? do
  else elsif end ensure
  false for
  if in
  module
  next nil not
  or
  redo rescue retry return
  self super
  then true
  undef unless until
  when while
  yield
]
HELP_COMMAND_PREPOSING =
/\Ahelp\s+/
GEM_PATHS =
if defined?(Gem::Specification)
  Gem::Specification.latest_specs(true).map { |s|
    s.require_paths.map { |p|
      if File.absolute_path?(p)
        p
      else
        File.join(s.full_gem_path, p)
      end
    }
  }.flatten
else
  []
end.freeze

Instance Method Summary collapse

Instance Method Details

#command_candidates(target) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/irb/completion.rb', line 91

def command_candidates(target)
  if !target.empty?
    IRB::Command.command_names.select { _1.start_with?(target) }
  else
    []
  end
end

#completion_candidates(preposing, target, postposing, bind:) ⇒ Object

Raises:

  • (NotImplementedError)


38
39
40
# File 'lib/irb/completion.rb', line 38

def completion_candidates(preposing, target, postposing, bind:)
  raise NotImplementedError
end

#doc_namespace(preposing, matched, postposing, bind:) ⇒ Object

Raises:

  • (NotImplementedError)


42
43
44
# File 'lib/irb/completion.rb', line 42

def doc_namespace(preposing, matched, postposing, bind:)
  raise NotImplementedError
end

#retrieve_files_to_require_from_load_pathObject



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/irb/completion.rb', line 72

def retrieve_files_to_require_from_load_path
  @files_from_load_path ||=
    (
      shortest = []
      rest = retrieve_gem_and_system_load_path.each_with_object([]) { |path, result|
        begin
          names = Dir.glob("**/*.{rb,#{RbConfig::CONFIG['DLEXT']}}", base: path)
        rescue Errno::ENOENT
          nil
        end
        next if names.empty?
        names.map! { |n| n.sub(/\.(rb|#{RbConfig::CONFIG['DLEXT']})\z/, '') }.sort!
        shortest << names.shift
        result.concat(names)
      }
      shortest.sort! | rest
    )
end

#retrieve_files_to_require_relative_from_current_dirObject



99
100
101
102
103
# File 'lib/irb/completion.rb', line 99

def retrieve_files_to_require_relative_from_current_dir
  @files_from_current_dir ||= Dir.glob("**/*.{rb,#{RbConfig::CONFIG['DLEXT']}}", base: '.').map { |path|
    path.sub(/\.(rb|#{RbConfig::CONFIG['DLEXT']})\z/, '')
  }
end

#retrieve_gem_and_system_load_pathObject



61
62
63
64
65
66
67
68
69
70
# File 'lib/irb/completion.rb', line 61

def retrieve_gem_and_system_load_path
  candidates = (GEM_PATHS | $LOAD_PATH)
  candidates.map do |p|
    if p.respond_to?(:to_path)
      p.to_path
    else
      String(p) rescue nil
    end
  end.compact.sort
end