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

[View source]

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)
[View source]

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)
[View source]

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

[View source]

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

[View source]

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

[View source]

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