pub struct ArgSpec {
pub name: Cow<'static, str>,
pub kind: ArgKind,
pub doc: Cow<'static, str>,
pub prompt: Cow<'static, str>,
pub default: ArgDefault,
pub completion: Option<Cow<'static, str>>,
pub picker: Option<Cow<'static, str>>,
}Expand description
One argument’s metadata. A command’s args_schema is the ordered list
of these. Drives:
- The
:parser front-end’s structured-args extraction (when the syntax permits; delimiter-syntax commands still own their ownparse_args). - Keymap binding pre-supply: a binding may set some args ahead of time and prompt for the rest.
- Command palette / interactive form: each missing arg becomes a prompt with the schema-supplied prompt text + completion.
:describe-commandenumeration.
Fields§
§name: Cow<'static, str>Identifier shown in :describe-command output and used as the
minibuffer prompt label.
PL8.F: Cow<'static, str> — a builtin passes a zero-cost Cow::Borrowed
literal; a plugin-contributed schema (crossing WIT) passes Cow::Owned
that frees on unregister_plugin, replacing the old Box::leak intern.
kind: ArgKindThe value type this slot expects; drives the parser, the prompt’s
capture mode (ArgKind::Chord) and :describe-command.
doc: Cow<'static, str>One-line documentation. Surfaced in palette tooltips and
:describe-command.
prompt: Cow<'static, str>Prompt shown when the runtime needs to ask for this arg
interactively. Empty string means “use name as the prompt”.
default: ArgDefaultFallback when the caller does not supply this arg; see
ArgDefault for which variants the host currently acts on.
completion: Option<Cow<'static, str>>Name of the registered completion source (gen:commands,
gen:files, etc. – see lattice-completion) that fires
when the user is typing this arg. None = no completion
(free-form text). Wire-form is the source name (not its
runtime id) so the schema is constructable as a literal.
picker: Option<Cow<'static, str>>YR.6: name of a registered picker source offered for this
argument (magit-revision, magit-branch, …). None = no
picker.
Deliberately a second field rather than a variant of
Self::completion, because the two name entries in two
registries and that split is a decision, not an accident:
completion names a CandidateGenerator (engine shape —
prefix, buffer, command registry), picker names a
PickerSourceGenerator (surface shape — needs PickerContext).
completion-pipeline-unification.md slice 7d.1 chose to keep
both rather than bloat one context or type-erase it, so an
argument can legitimately have both: <Tab> completes inline,
the picker opens the richer surface for the same question.
Implementations§
Source§impl ArgSpec
impl ArgSpec
Sourcepub fn required(
name: impl Into<Cow<'static, str>>,
kind: ArgKind,
doc: impl Into<Cow<'static, str>>,
) -> Self
pub fn required( name: impl Into<Cow<'static, str>>, kind: ArgKind, doc: impl Into<Cow<'static, str>>, ) -> Self
Sugar for declaring a required arg with no fancy default: empty
prompt (falls back to name), no completion, no picker.
§Examples
use lattice_grammar::{ArgDefault, ArgKind, ArgSpec};
let spec = ArgSpec::required("path", ArgKind::String, "File to open.")
.with_completion("gen:files");
assert_eq!(spec.default, ArgDefault::Required);
assert_eq!(spec.completion.as_deref(), Some("gen:files"));
assert!(spec.picker.is_none());
let opt = ArgSpec::optional("count", ArgKind::Int, "Repeat count.");
assert_eq!(opt.default, ArgDefault::None);Sourcepub fn optional(
name: impl Into<Cow<'static, str>>,
kind: ArgKind,
doc: impl Into<Cow<'static, str>>,
) -> Self
pub fn optional( name: impl Into<Cow<'static, str>>, kind: ArgKind, doc: impl Into<Cow<'static, str>>, ) -> Self
Sugar for declaring an optional arg (ArgDefault::None); otherwise
as Self::required.
Sourcepub fn with_completion(self, source_name: impl Into<Cow<'static, str>>) -> Self
pub fn with_completion(self, source_name: impl Into<Cow<'static, str>>) -> Self
Builder helper: attach a completion source by registered name.
Sourcepub fn with_picker(self, source_name: impl Into<Cow<'static, str>>) -> Self
pub fn with_picker(self, source_name: impl Into<Cow<'static, str>>) -> Self
Builder helper: attach a picker source by registered name.
Composable with Self::with_completion — an argument may offer
inline completion on <Tab> and a picker on <C-x><C-o>, and
several magit arguments do exactly that.