pub struct TaskFile {
pub env: Vec<(String, String)>,
pub tasks: Vec<Task>,
pub warnings: Vec<String>,
}Expand description
A parsed task file: the tasks, any file-level environment hoisted to all of
them (an Env: under a section heading applies to every task regardless
of where in the document it appears; hoisting is not positional), and any
parse warnings (an unterminated fence, a duplicate task, an unknown fence
language). Parsing is infallible. A malformed file still yields what it can,
so an embedder should surface warnings rather than trust silence.
Fields§
§env: Vec<(String, String)>§tasks: Vec<Task>§warnings: Vec<String>Implementations§
Source§impl TaskFile
impl TaskFile
Sourcepub fn task(&self, name: &str) -> Option<&Task>
pub fn task(&self, name: &str) -> Option<&Task>
Find a task by name. The match is exact and case-sensitive, against the heading text as written. The first definition wins if a name is duplicated (a warning is recorded).
Sourcepub fn agent_tasks(&self) -> impl Iterator<Item = &Task>
pub fn agent_tasks(&self) -> impl Iterator<Item = &Task>
The tasks that opted in to an agent or MCP surface via Agent: allow. A
caller exposing tasks to an agent should list and run only these. The
flag is advisory data on Task, so this iterator is the enforcement point,
not the field. (Direct field access bypasses the gate by design; the gate
lives at the surface that chooses what to expose.)
Sourcepub fn invocation(
&self,
task: &Task,
args: &BTreeMap<String, String>,
cwd: &Path,
task_file_dir: Option<&Path>,
) -> Result<Invocation, MissingArg>
pub fn invocation( &self, task: &Task, args: &BTreeMap<String, String>, cwd: &Path, task_file_dir: Option<&Path>, ) -> Result<Invocation, MissingArg>
Build the invocation for task, given args mapping each name to a value
(from TaskFile::bind or an embedder’s prompts). It substitutes
{{ arg }} in the script, exports the args and env, and resolves the
working directory:
- By default a task runs in
task_file_dir, the directory of the file that defines it (Nonefalls back tocwd). A task script is written against its project’s layout, so it runs from that project’s root, the wayjustruns a recipe from its justfile’s directory. For a task reached by the layered tree-walk, that is the directory of the ancestor file that defined it, again matchingjust’s fallback. Opts: inherit-cwdruns the task incwd, the invocation directory instead, for a carry-around task that operates on a path relative to where you are (just’s[no-cd]). Anything more specific than these two anchors is acdin the script.
Missing optional and variadic args are filled from their defaults, so a
partial args map is fine; only a missing required arg is an error.
The call is pure and cheap, with no filesystem or process access, so it is
safe to call straight from a UI event handler or render path. Build the
Invocation here and run it elsewhere.
Sourcepub fn bind(
task: &Task,
positional: &[String],
) -> Result<BTreeMap<String, String>, MissingArg>
pub fn bind( task: &Task, positional: &[String], ) -> Result<BTreeMap<String, String>, MissingArg>
Bind positional argument values (for example, from the CLI) to a task’s
declared Args:, applying defaults and collecting a trailing *variadic
from the rest. This feeds TaskFile::invocation and errors on a missing
required arg.