Skip to main content

cli_args

bool

def bool(
default = False,
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Accepts "true" or "false" from cli, and gets a bool in bxl. Defaults to false if no explicit default is provided.

Examples

Declaration:

cli_args = {
"verbose": cli_args.bool(), # defaults to false
"dry_run": cli_args.bool(True), # defaults to true
}

CLI usage:

buck2 bxl //my.bxl:target -- --verbose true

configured_target_expr

def configured_target_expr(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from the cli, and treats it as a target pattern. The target can be configured using either ?modifier syntax or --modifier flag, in addition to --target-platforms flag. Resolves the pattern and returns a list of ConfiguredTargetLabel in bxl.

Examples

Declaration:

cli_args = {
"targets": cli_args.configured_target_expr(),
}

CLI usage (accepts patterns like cell//foo:bar, cell//foo:, or cell//foo/...):

buck2 bxl //my.bxl:target -- --targets cell//package:rule?cell//config:platform

configured_target_label

def configured_target_label(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and gets a parsed ConfiguredTargetLabel in bxl. The target can be configured using either ?modifier syntax or --modifier flag, in addition to --target-platforms flag.

Examples

Declaration:

cli_args = {
"target": cli_args.configured_target_label(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --target cell//package:rule?cell//config:platform

enum

def enum(
variants: list[str] | tuple[str, ...],
/,
default = ...,
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes a set of defined values in variants, and gets a str in bxl. Only the specified variant strings are accepted; any other value is an error.

Examples

Declaration:

cli_args = {
"mode": cli_args.enum(["debug", "release"]),
}

CLI usage:

buck2 bxl //my.bxl:target -- --mode debug

float

def float(
default = ...,
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and gets a float in bxl.

Examples

Declaration:

cli_args = {
"threshold": cli_args.float(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --threshold 3.14

int

def int(
default = ...,
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and gets an int in bxl.

Examples

Declaration:

cli_args = {
"count": cli_args.int(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --count 42

json

def json(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, parses it as a JSON string, and returns the parsed object in bxl.

Note: Does not accept a file path. Use cli_args.json_file() to read JSON from a file.

Examples

Declaration:

cli_args = {
"config": cli_args.json(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --config '{"key": "value", "count": 3}'

json_file

def json_file(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, reads the specified file as JSON, and returns the parsed object in bxl. Supports both relative and absolute paths. Relative paths are resolved relative to the buck project root.

Examples

Declaration:

cli_args = {
"config": cli_args.json_file(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --config path/to/config.json

list

def list(
inner: bxl.CliArgs,
/,
default = ...,
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes a list of args from cli, and gets a list of the inner type in bxl.

Examples

Declaration:

cli_args = {
"numbers": cli_args.list(cli_args.int()),
"names": cli_args.list(cli_args.string()),
}

Multiple values can be passed either as space-separated values after a single flag, or by repeating the flag. Both styles produce the same result and can be mixed:

buck2 bxl //my.bxl:target -- --numbers 1 2 3
buck2 bxl //my.bxl:target -- --numbers 1 --numbers 2 --numbers 3

Both invocations above yield [1, 2, 3] in ctx.cli_args.numbers.


option

def option(
inner: bxl.CliArgs,
doc: str = "",
default = None,
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and gets the inner type in bxl. If not given, will get None in bxl.

Examples

Declaration:

cli_args = {
"message": cli_args.option(cli_args.string()),
"limit": cli_args.option(cli_args.int()),
}

CLI usage (omitting the flag yields None in bxl):

buck2 bxl //my.bxl:target -- --message "hello"

string

def string(
default = ...,
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and gets a string in bxl.

Examples

Declaration:

cli_args = {
"name": cli_args.string(),
"greeting": cli_args.string("hello"), # with default
}

CLI usage:

buck2 bxl //my.bxl:target -- --name foo

sub_target

def sub_target(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and gets a parsed ProvidersLabel in bxl.

Note: this will not check if the target is valid.

Examples

Declaration:

cli_args = {
"provider": cli_args.sub_target(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --provider cell//package:rule[subtarget]

sub_target_expr

def sub_target_expr(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and treats it as a sub target pattern. Resolves the pattern and returns a list of ProvidersLabel in bxl.

Examples

Declaration:

cli_args = {
"targets": cli_args.sub_target_expr(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --targets cell//package:rule[subtarget]

target_expr

def target_expr(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from the cli, and treats it as a target pattern. Resolves the pattern and returns a list of TargetLabel in bxl.

Examples

Declaration:

cli_args = {
"targets": cli_args.target_expr(),
}

CLI usage (accepts patterns like cell//foo:bar, cell//foo:, or cell//foo/...):

buck2 bxl //my.bxl:target -- --targets cell//package/...

target_label

def target_label(
doc: str = "",
*,
short = ...,
) -> bxl.CliArgs

Takes an arg from cli, and gets a parsed TargetLabel in bxl.

Note: this will not check if the target is valid.

Examples

Declaration:

cli_args = {
"target": cli_args.target_label(),
}

CLI usage:

buck2 bxl //my.bxl:target -- --target cell//package:rule