class Toys::Completion::FileSystem


A Completion that returns candidates from the local file system.
#

def call(context)

Returns:
  • (Array) - an array of candidates

Parameters:
  • context (Toys::Completion::Context) -- the current completion
def call(context)
  return [] unless @prefix_constraint === context.fragment_prefix
  substring = context.fragment
  prefix, name =
    if substring.empty? || substring.end_with?("/")
      [substring, ""]
    else
      ::File.split(substring)
    end
  dir = ::File.expand_path(prefix, @cwd)
  return [] unless ::File.directory?(dir)
  prefix = nil if [".", ""].include?(prefix)
  omits = [".", "..", ""]
  children = Compat.glob_in_dir(name, dir).find_all do |child|
    !omits.include?(child)
  end
  children += ::Dir.entries(dir).find_all do |child|
    child.start_with?(name) && !omits.include?(child)
  end
  generate_candidates(children.uniq.sort, prefix, dir)
end

def generate_candidates(children, prefix, dir)

def generate_candidates(children, prefix, dir)
  children.flat_map do |child|
    path = ::File.join(dir, child)
    str = prefix ? ::File.join(prefix, child) : child
    if ::File.file?(path)
      @include_files ? [Candidate.new(str)] : []
    elsif ::File.directory?(path)
      if @include_directories
        [Candidate.new("#{str}/", partial: true)]
      else
        []
      end
    else
      []
    end
  end
end

def initialize(cwd: nil, omit_files: false, omit_directories: false, prefix_constraint: "")

Parameters:
  • prefix_constraint (String, Regexp) -- Constraint on the fragment
  • omit_directories (Boolean) -- Omit directories from candidates
  • omit_files (Boolean) -- Omit files from candidates
  • cwd (String) -- Working directory (defaults to the current dir).
def initialize(cwd: nil, omit_files: false, omit_directories: false, prefix_constraint: "")
  @cwd = cwd || ::Dir.pwd
  @include_files = !omit_files
  @include_directories = !omit_directories
  @prefix_constraint = prefix_constraint
end