SamovarSourceSamovarCompletionProvider

class Provider

Expands static, dynamic, and native completion providers.

Definitions

def initialize(context, completions)

Initialize a new completion provider.

Signature

parameter context Context

The completion context.

parameter completions Array | Proc | Symbol | Nil

The static, dynamic, or native completions.

Implementation

def initialize(context, completions)
	@context = context
	@completions = completions
end

def suggestions

Generate suggestions from the provider.

Signature

returns Result

The matching completion suggestions.

Implementation

def suggestions
	case @completions
	when nil
		Result.new
	when Symbol
		native_suggestions
	else
		matching_suggestions
	end
end

def matching_suggestions

Generate matching suggestions from static or dynamic completions.

Signature

returns Result

The matching completion suggestions.

Implementation

def matching_suggestions
	values = @completions
	
	if values.respond_to?(:call)
		values = values.call(@context)
	end
	
	values = Array(values).filter_map do |value|
		suggestion = Suggestion.wrap(value)
		
		suggestion if suggestion.start_with?(@context.current)
	end
	
	return Result.new(values)
end

def native_suggestions

Generate native shell completion requests.

Signature

returns Result

The native completion request suggestions.

Implementation

def native_suggestions
	case @completions
	when :path, :file
		Result.new([Suggestion.new(@context.current, description: "Path", type: :path)])
	when :directory
		Result.new([Suggestion.new(@context.current, description: "Directory", type: :directory)])
	when :executable
		Result.new([Suggestion.new(@context.current, description: "Executable", type: :executable)])
	else
		Result.new
	end
end