Class: Toys::ToolDefinition::DefaultCompletion

Inherits:
Completion::Base show all
Defined in:
lib/toys/tool_definition.rb

Overview

A Completion that implements the default algorithm for a tool.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(complete_subtools: true, include_hidden_subtools: false, complete_args: true, complete_flags: true, complete_flag_values: true, delegation_target: nil) ⇒ DefaultCompletion

Create a completion given configuration options.

Parameters:

  • complete_subtools (true, false) (defaults to: true)

    Whether to complete subtool names

  • include_hidden_subtools (true, false) (defaults to: false)

    Whether to include hidden subtools (i.e. those beginning with an underscore)

  • complete_args (true, false) (defaults to: true)

    Whether to complete positional args

  • complete_flags (true, false) (defaults to: true)

    Whether to complete flag names

  • complete_flag_values (true, false) (defaults to: true)

    Whether to complete flag values

  • delegation_target (Array<String>, nil) (defaults to: nil)

    Delegation target, or nil if none.



28
29
30
31
32
33
34
35
36
37
38
# File 'lib/toys/tool_definition.rb', line 28

def initialize(complete_subtools: true, include_hidden_subtools: false,
               complete_args: true, complete_flags: true, complete_flag_values: true,
               delegation_target: nil)
  super()
  @complete_subtools = complete_subtools
  @include_hidden_subtools = include_hidden_subtools
  @complete_flags = complete_flags
  @complete_args = complete_args
  @complete_flag_values = complete_flag_values
  @delegation_target = delegation_target
end

Instance Attribute Details

#delegation_targetArray<String>?

Delegation target, or nil for none.

Returns:

  • (Array<String>)

    if there is a delegation target

  • (nil)

    if there is no delegation target



85
86
87
# File 'lib/toys/tool_definition.rb', line 85

def delegation_target
  @delegation_target
end

Instance Method Details

#call(context) ⇒ Array<Toys::Completion::Candidate>

Returns candidates for the current completion.

Parameters:

Returns:



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/toys/tool_definition.rb', line 94

def call(context)
  candidates = valued_flag_candidates(context)
  return candidates if candidates
  candidates = subtool_or_arg_candidates(context)
  candidates += plain_flag_candidates(context)
  candidates += flag_value_candidates(context)
  if delegation_target
    delegate_tool = context.cli.loader.lookup_specific(delegation_target)
    if delegate_tool
      context = context.with(previous_words: delegation_target)
      candidates += delegate_tool.completion.call(context)
    end
  end
  candidates
end

#complete_args?true, false

Whether to complete positional args

Returns:

  • (true, false)


68
69
70
# File 'lib/toys/tool_definition.rb', line 68

def complete_args?
  @complete_args
end

#complete_flag_values?true, false

Whether to complete flag values

Returns:

  • (true, false)


76
77
78
# File 'lib/toys/tool_definition.rb', line 76

def complete_flag_values?
  @complete_flag_values
end

#complete_flags?true, false

Whether to complete flags

Returns:

  • (true, false)


60
61
62
# File 'lib/toys/tool_definition.rb', line 60

def complete_flags?
  @complete_flags
end

#complete_subtools?true, false

Whether to complete subtool names

Returns:

  • (true, false)


44
45
46
# File 'lib/toys/tool_definition.rb', line 44

def complete_subtools?
  @complete_subtools
end

#include_hidden_subtools?true, false

Whether to include hidden subtools

Returns:

  • (true, false)


52
53
54
# File 'lib/toys/tool_definition.rb', line 52

def include_hidden_subtools?
  @include_hidden_subtools
end