Implementation
final List<FigSubcommand> subcommands = [
Subcommand(
name: 'run',
description: 'Run a command or script',
options: runOptions,
args: [Arg(name: 'command', generators: commandGenerator)]),
Subcommand(name: 'init', description: 'Create a new project', options: [
...initOptions,
...initCacheOptions
], args: [
Arg(
name: 'Path',
template: 'filepaths',
description: 'The path to use for the project/script',
defaultValue: '.')
]),
Subcommand(
name: 'add',
description: 'Add dependencies to the project',
args: [
Arg(name: 'packages', description: 'Packages to add', isVariadic: true)
],
options: [
...addOptions,
...indexOptions,
...resolverOptions,
...installerOptions,
...buildOptions,
...cacheOptions
]),
Subcommand(
name: 'remove',
description: 'Remove dependencies from the project',
args: [
Arg(
name: 'dependencies',
description: 'Dependencies to remove',
generators: dependenciesGenerator,
isVariadic: true)
],
options: [
...removeOptions,
...indexOptions,
...resolverOptions,
...installerOptions,
...buildOptions,
...cacheOptions
]),
Subcommand(
name: 'sync',
description: 'Update the project\'s environment',
options: [
...syncOptions,
...indexOptions,
...resolverOptions,
...installerOptions,
...buildOptions,
...cacheOptions
]),
Subcommand(
name: 'lock',
description: 'Update the project\'s lockfile',
options: [
...lockOptions,
...indexOptions,
...resolverOptions,
...buildOptions,
...lockInstallerOptions,
...cacheOptions
]),
Subcommand(
name: 'export',
description: 'Export the project\'s lockfile to an alternate format',
options: [
...exportOptions,
...indexOptions,
...resolverOptions,
...buildOptions
]),
Subcommand(
name: 'tree',
description: 'Display the project\'s dependency tree',
options: [
...treeOptions,
...indexOptions,
...resolverOptions,
...installerOptions
.where((option) => option.nameList.contains('--link-mode'))
.toList(),
...pythonOptions,
...cacheOptions,
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
]),
Subcommand(
name: 'tool',
description: 'Run and install commands provided by Python packages',
subcommands: toolSubcommands,
options: [
...pythonOptions
.where((option) =>
option.nameList.contains('--no-python-downloads') ||
option.nameList.contains('--python-preference'))
.toList(),
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
]),
Subcommand(
name: 'python',
description: 'Manage Python versions and installations',
subcommands: pythonSubcommands,
options: [
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
...pythonOptions
.where((option) =>
option.nameList.contains('--python-preference') ||
option.nameList.contains('--no-python-downloads'))
.toList(),
]),
Subcommand(
name: 'pip',
description: 'Manage Python packages with a pip-compatible interface',
subcommands: pipSubcommands,
options: [
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
...pythonOptions
.where((option) =>
option.nameList.contains('--python-preference') ||
option.nameList.contains('--no-python-downloads'))
.toList(),
]),
Subcommand(
name: 'venv',
description: 'Create a virtual environment',
options: [
...pythonOptions,
...venvOptions,
...indexOptions
.where((option) =>
!option.nameList.contains('--index-strategy') &&
!option.nameList.contains('--keyring-provider'))
.toList(),
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
]),
Subcommand(
name: 'build',
description: 'Build Python packages into source distributions and wheels',
args: [
Arg(
name: 'SOURCE',
description:
'The directory from which distributions should be built, or a source distribution archive to build into a wheel')
],
options: [
...buildCommandOptions,
...pythonOptions,
...indexOptions,
...resolverOptions,
...buildOptions,
...installerOptions
.where((option) => option.nameList.contains('--link-mode'))
.toList(),
...cacheOptions,
]),
Subcommand(
name: 'publish',
description: 'Upload distributions to an index',
args: [
Arg(
name: 'FILES',
description: 'Paths to the files to upload, [default: dist/*]',
isVariadic: true)
],
options: [
...publishOptions,
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
...pythonOptions
.where((option) =>
option.nameList.contains('--python-preference') ||
option.nameList.contains('--no-python-downloads'))
.toList(),
]),
Subcommand(
name: 'cache',
description: 'Manage uv\'s cache',
subcommands: cacheSubcommands,
options: [
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
...pythonOptions
.where((option) =>
option.nameList.contains('--python-preference') ||
option.nameList.contains('--no-python-downloads'))
.toList(),
]),
Subcommand(
name: 'self',
description: 'Manage the uv executable',
subcommands: selfSubcommands,
options: [
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
...pythonOptions
.where((option) =>
option.nameList.contains('--python-preference') ||
option.nameList.contains('--no-python-downloads'))
.toList(),
]),
Subcommand(name: 'version', description: 'Display uv\'s version', options: [
Option(
name: '--output-format',
description: 'The output format to use',
args: [
Arg(name: 'OUTPUT_FORMAT', suggestions: [
FigSuggestion(name: 'text'),
FigSuggestion(name: 'json')
])
]),
...cacheOptions
.where((option) =>
option.nameList.contains('--cache-dir') ||
option.nameList.contains('--no-cache'))
.toList(),
...pythonOptions
.where((option) =>
option.nameList.contains('--python-preference') ||
option.nameList.contains('--no-python-downloads'))
.toList()
]),
Subcommand(
name: 'help',
description: 'Display documentation for a command',
options: [
Option(
name: '--no-pager', description: 'Disable pager when printing help')
])
];