jdx/mise · error

the packslip of {} declares no {shell} completion

Error message

the packslip of {} declares no {shell} completion

What it means

The tool's packslip statement contains no completion resource for the requested shell at all. mise enumerates the statement's declared completion sources for the shell; when the list is empty and the statement does not even declare a completion for that shell, it reports that the packslip declares no such completion rather than pretending one exists.

Source

Thrown at src/packslip.rs:1175

    let artifact = selected_artifact(
        &statement,
        tv.request.options().get_string("variant").as_deref(),
    );
    let sources = completion_sources(
        &statement,
        &install_path,
        shell,
        artifact.as_ref(),
        Some(tool),
    );
    if sources.is_empty() {
        if declares_completion(&statement, shell) {
            bail!(
                "the packslip of {} declares a {shell} completion, but none of the files it names are in the install: the resource fetch failed or was skipped",
                tv.style()
            );
        }
        bail!(
            "the packslip of {} declares no {shell} completion",
            tv.style()
        );
    }
    // A completion is asked for the moment a shell completes the command,
    // which is when the user was going to run it anyway, so an `exec`
    // source runs on demand with no setting; the specification's Running
    // an exec entry says so. Because it runs the tool, its result is
    // cached beside the install so the command runs once per version and
    // shell rather than at every tab.
    let bin = completion_bin(&statement, Some(tool)).ok_or_else(|| {
        eyre!(
            "{} provides several executables; name the command to complete",
            tv.style()
        )
    })?;
    let cache = completion_cache_path(&install_path, bin, shell)?;
    // Nothing below happens until a source that runs the tool comes up. A

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Request a shell the packslip supports (check the statement's completion entries, typically bash/zsh/fish/pwsh).
  2. Upgrade the tool to a newer release whose packslip declares your shell's completion.
  3. If you publish the packslip, add a completion resource for the missing shell.
  4. Generate the completion with the tool's own CLI and source it manually in your shell config.

Example fix

// before
mise completion pwsh --tool jq  # packslip declares no pwsh completion
// after
mise completion bash --tool jq
Defensive patterns

Strategy: validation

Validate before calling

let supported = declared_completion_shells(&statement); // e.g. ["bash","zsh"]
if !supported.contains(&shell.to_string()) { eprintln!("{tool} packslip declares no {shell} completion"); }

Type guard

fn shell_declared(statement: &Statement, shell: &str) -> bool { declares_completion(statement, shell) }

Try / catch

if !declares_completion(&statement, shell) {
    eprintln!("no native {shell} completion; sourcing tool-generated script instead");
    return tool_native_completions(tool, shell);
}

Prevention

When it happens

Trigger: Running `mise completion <shell> --tool <tool>` (or a shell requesting lazy completion registration) where the packslip statement for the installed version has no completion entry for that shell — e.g. asking for fish completions when the packslip only declares bash and zsh.

Common situations: Requesting completions for a shell the publisher does not support; a packslip authored without completion declarations; older release of a tool predating completion declarations.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/44fd9e71887c3e23. Report an issue: GitHub.