blob: 2a116de5b1bec5557663576bbb3959b1757c1734 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:io';
import 'package:args/args.dart';
import 'package:logging/logging.dart';
import '../lib/docgen.dart';
import 'package:path/path.dart' as path;
List<String> excludedLibraries = [];
/**
* Analyzes Dart files and generates a representation of included libraries,
* classes, and members.
*/
void main(List<String> arguments) {
var results = _initArgParser().parse(arguments);
var includeSdk = results['parse-sdk'] || results['include-sdk'];
var scriptDir = path.dirname(Platform.script.toFilePath());
var introduction = includeSdk ? '' : results['introduction'];
docgen(results.rest.map(path.normalize).toList(),
packageRoot: results['package-root'],
outputToYaml: !results['json'],
includePrivate: results['include-private'],
includeSdk: includeSdk,
parseSdk: results['parse-sdk'],
append: results['append'] && new Directory(results['out']).existsSync(),
introFileName: introduction,
out: results['out'],
excludeLibraries: excludedLibraries,
includeDependentPackages: results['include-dependent-packages']);
}
/**
* Creates parser for docgen command line arguments.
*/
ArgParser _initArgParser() {
var parser = new ArgParser();
parser.addFlag('help', abbr: 'h',
help: 'Prints help and usage information.',
negatable: false,
callback: (help) {
if (help) {
print(parser.getUsage());
print('Usage: dart docgen.dart [OPTIONS] fooDir/barFile');
exit(0);
}
});
parser.addFlag('verbose', abbr: 'v',
help: 'Output more logging information.', negatable: false,
callback: (verbose) {
if (verbose) Logger.root.level = Level.FINEST;
});
parser.addFlag('json', abbr: 'j',
help: 'Outputs to JSON. Files are outputted to YAML by default. '
'If --append is used, it takes the file-format of the previous '
'run stated in library_list.json ignoring the flag.',
negatable: true);
parser.addFlag('include-private',
help: 'Flag to include private declarations.', negatable: false);
parser.addFlag('include-sdk',
help: 'Flag to parse SDK Library files.', negatable: false);
parser.addFlag('parse-sdk',
help: 'Parses the SDK libraries only.',
defaultsTo: false, negatable: false);
parser.addOption('package-root',
help: 'Sets the package root of the library being analyzed.');
parser.addFlag('append',
help: 'Append to the docs folder, library_list.json and index.txt',
defaultsTo: false, negatable: false);
parser.addOption('introduction',
help: 'Adds the provided markdown text file as the introduction'
' for the generated documentation.', defaultsTo: '');
parser.addOption('out',
help: 'The name of the output directory.',
defaultsTo: 'docs');
parser.addOption('exclude-lib',
help: 'Exclude the library by this name from the documentation',
allowMultiple: true,
callback: (libs) => excludedLibraries.addAll(libs));
parser.addFlag('include-dependent-packages',
help: 'Assumes we are documenting a single package and are running '
'in the directory with its pubspec. Includes documentation for all '
'of its dependent packages.',
defaultsTo: false, negatable: false);
return parser;
}