Skip to content

kevmoo/build_cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c829b13 · Mar 17, 2025
Mar 2, 2025
Mar 17, 2025
Jan 10, 2025
Sep 23, 2024
Apr 24, 2019
Mar 19, 2018
Mar 19, 2018
Oct 24, 2024
Nov 19, 2020
Dec 17, 2024

Repository files navigation

Dart CI Pub package package publisher

Parse command line arguments directly into an annotation class using the Dart Build System.

Example

Annotate a class with @CliOptions() from package:build_cli_annotations.

import 'package:build_cli_annotations/build_cli_annotations.dart';

part 'example.g.dart';

@CliOptions()
class Options {
  @CliOption(abbr: 'n', help: 'Required. The name to use in the greeting.')
  final String name;

  final bool nameWasParsed;

  late bool yell;

  @CliOption(defaultsTo: Language.en, abbr: 'l')
  late Language displayLanguage;

  @CliOption(negatable: false, help: 'Prints usage information.')
  late bool help;

  Options(this.name, {this.nameWasParsed = false});
}

enum Language { en, es }

Configure and run the Dart Build System and a set of helpers is created to parse the corresponding command line arguments and populate your class.

void main(List<String> args) {
  var options = parseOptions(args);
  if (!options.nameWasParsed) {
    throw new ArgumentError('You must set `name`.');
  }
  print(options.name);
}

Setup

Add three packages to pubspec.yaml:

dependencies:
  build_cli_annotations: ^1.0.0

dev_dependencies:
  build_cli: ^1.0.0
  build_runner: ^1.0.0
  • build_cli_annotations is a separate package containing the annotations you add to classes and members to tell build_cli what to do.
    • If the code you're annotating is in a published directory – lib, bin – put it in the dependencies section.
  • build_cli contains the logic to generate the code.
    • It should almost always be put in dev_dependencies.
  • build_runner contains the logic to run a build and generate code.
    • It should almost always be put in dev_dependencies.

Details

Uses package:args under the covers.

More examples: