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
]
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

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



36
37
38
# File 'lib/irb/completion.rb', line 36

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

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



40
41
42
# File 'lib/irb/completion.rb', line 40

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

#retrieve_files_to_require_from_load_pathObject



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

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



89
90
91
92
93
# File 'lib/irb/completion.rb', line 89

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



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

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