Struct GenerateCompletionArgs

Source
pub struct GenerateCompletionArgs {
    pub shell: Shell,
}
Expand description

Command-line arguments for generating shell completion scripts.

The generate-completion command creates shell-specific completion scripts that enable intelligent tab completion for SubX commands and arguments. This greatly enhances the command-line user experience by providing context-aware suggestions and reducing typing requirements.

§Completion Capabilities

Generated scripts provide completion for:

  • Subcommands: match, convert, sync, detect-encoding, etc.
  • Flags and Options: --format, --output, --confidence, etc.
  • Enum Values: Available formats, AI providers, sync methods
  • File Paths: Intelligent file and directory completion
  • Configuration Keys: Valid configuration setting names

§Shell Integration

Each shell has different integration methods:

  • Immediate: Load completion in current session
  • Persistent: Add to shell configuration for permanent availability
  • System-wide: Install for all users on the system
  • Per-project: Enable completion in specific project directories

§Performance Considerations

Completion scripts are optimized for performance:

  • Lazy Loading: Completions are generated on-demand
  • Caching: Results are cached where appropriate
  • Minimal Overhead: Scripts add minimal startup time to shell
  • Incremental Updates: Only regenerate when command structure changes

§Examples

use subx_cli::cli::GenerateCompletionArgs;
use clap_complete::Shell;

// Generate Bash completion
let bash_args = GenerateCompletionArgs {
    shell: Shell::Bash,
};

// Generate Zsh completion
let zsh_args = GenerateCompletionArgs {
    shell: Shell::Zsh,
};

// Generate Fish completion
let fish_args = GenerateCompletionArgs {
    shell: Shell::Fish,
};

Fields§

§shell: Shell

Target shell for completion script generation.

Specifies which shell environment the completion script should target. Each shell has different syntax and capabilities, so the generated script is optimized for the specific shell’s completion system.

§Shell-Specific Features

§Bash

  • Traditional completion with complete command
  • Basic argument and flag completion
  • Compatible with most Linux distributions
  • Works with Bash 4.0+ (recommended: 4.4+)

§Zsh

  • Advanced completion with _arguments function
  • Rich help text and description display
  • Smart caching and performance optimization
  • Compatible with Oh My Zsh and other frameworks

§Fish

  • Native completion with complete command
  • Excellent help text integration
  • Real-time completion suggestions
  • Works with all Fish versions 3.0+

§PowerShell

  • Register-ArgumentCompleter integration
  • Full .NET completion capabilities
  • Works on Windows, Linux, and macOS
  • Compatible with PowerShell 5.1+ and PowerShell Core

§Elvish

  • Modern completion with structured data
  • Rich metadata and help integration
  • Advanced completion customization
  • Works with Elvish 0.18+

§Installation Instructions

§Bash

# Temporary (current session only)
eval "$(subx generate-completion bash)"

# Permanent (add to ~/.bashrc)
echo 'eval "$(subx generate-completion bash)"' >> ~/.bashrc

# System-wide (requires sudo)
subx generate-completion bash > /etc/bash_completion.d/subx

§Zsh

# Temporary (current session only)
eval "$(subx generate-completion zsh)"

# Permanent (add to ~/.zshrc)
echo 'eval "$(subx generate-completion zsh)"' >> ~/.zshrc

# Oh My Zsh (create plugin)
mkdir -p ~/.oh-my-zsh/custom/plugins/subx
subx generate-completion zsh > ~/.oh-my-zsh/custom/plugins/subx/_subx

§Fish

# Save to Fish completions directory
subx generate-completion fish > ~/.config/fish/completions/subx.fish

# System-wide installation
sudo subx generate-completion fish > /usr/share/fish/completions/subx.fish

§PowerShell

# Add to PowerShell profile
subx generate-completion powershell | Out-String | Invoke-Expression

# Permanent installation (add to profile)
Add-Content $PROFILE "subx generate-completion powershell | Out-String | Invoke-Expression"

§Troubleshooting

Common issues and solutions:

  • Completion not working: Verify shell version compatibility
  • Slow completion: Check for conflicting completion scripts
  • Missing commands: Ensure SubX is in PATH
  • Permission errors: Use appropriate installation method for your system

§Examples

# Generate and view Bash completion
subx generate-completion bash

# Generate and install Fish completion
subx generate-completion fish > ~/.config/fish/completions/subx.fish

# Generate PowerShell completion and execute immediately
subx generate-completion powershell | Out-String | Invoke-Expression

Trait Implementations§

Source§

impl Args for GenerateCompletionArgs

Source§

fn group_id() -> Option<Id>

Report the ArgGroup::id for this set of arguments
Source§

fn augment_args<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate Self via FromArgMatches::from_arg_matches_mut Read more
Source§

fn augment_args_for_update<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate self via FromArgMatches::update_from_arg_matches_mut Read more
Source§

impl Debug for GenerateCompletionArgs

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl FromArgMatches for GenerateCompletionArgs

Source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

fn update_from_arg_matches_mut( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,