static async displayUsage()

in packages/flow-dev-tools/src/command/Base.js [183:219]


  static async displayUsage(exn: ShowUsageException) {
    let usage = await this.usage();

    const flags = this.getAllFlags().sort((a, b) =>
      a.name.localeCompare(b.name),
    );

    usage += '\n\nOPTIONS:';
    for (const flag of flags) {
      const arg =
        flag.type === 'string' || flag.type === 'enum'
          ? ' ' + flag.argName
          : '';
      const values =
        flag.type === 'enum'
          ? format(
              ' [%s]',
              flag.validValues.map(x => format('"%s"', x)).join(', '),
            )
          : '';
      const defaultDesc =
        flag.default !== undefined
          ? format(' (default: "%s")', flag.default)
          : '';
      const names = []
        .concat(flag.name, flag.aliases || [])
        .map(name => (name.length == 1 ? '-' : '--') + name + arg)
        .join(', ');
      usage += '\n    ' + names;
      usage += '\n        ' + flag.description + values + defaultDesc;
    }

    usage += '\n';

    process.stderr.write(usage);
    process.exit(exn.exitCode);
  }