Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Unified Diff: pkg/docgen/lib/docgen.dart

Issue 18438003: Removed ArgResult in lib/docgen.dart and removed top level variables. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/docgen/bin/docgen.dart ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/docgen/lib/docgen.dart
diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart
index 5159c05b421e89a71b489771e52f4cb81bb6a850..dd5ae22b2663fbe0bd14208532c462bd02d033c5 100644
--- a/pkg/docgen/lib/docgen.dart
+++ b/pkg/docgen/lib/docgen.dart
@@ -19,7 +19,6 @@ import 'dart:io';
import 'dart:json';
import 'dart:async';
-import 'package:args/args.dart';
import 'package:logging/logging.dart';
import 'package:markdown/markdown.dart' as markdown;
import 'package:pathos/path.dart' as path;
@@ -51,47 +50,35 @@ MemberMirror _currentMember;
/// Resolves reference links in doc comments.
markdown.Resolver linkResolver;
-/// Package directory of directory being analyzed.
-String packageDir;
-
-bool outputToYaml;
-bool outputToJson;
-bool includePrivate;
-/// State for whether imported SDK libraries should also be outputted.
-bool includeSdk;
-/// State for whether all SDK libraries should be outputted.
-bool parseSdk;
-
/**
* Docgen constructor initializes the link resolver for markdown parsing.
* Also initializes the command line arguments.
+ *
+ * [packageRoot] is the packages directory of the directory being analyzed.
+ * If [includeSdk] is 'true', then any SDK libraries explicitly imported will
+ * also be documented.
+ * If [parseSdk] is 'true', then all Dart SDK libraries will be documented.
+ * This option is useful when only the SDK libraries are needed.
*/
-void docgen(ArgResults argResults) {
- _setCommandLineArguments(argResults);
+void docgen(List<String> files, {String packageRoot, bool outputToYaml: true,
+ bool includePrivate: false, bool includeSdk: false, bool parseSdk: false}) {
+ if (packageRoot == null && !parseSdk) {
+ packageRoot = _findPackageRoot(files.first);
+ }
+ logger.info('Package Root: ${packageRoot}');
linkResolver = (name) =>
fixReference(name, _currentLibrary, _currentClass, _currentMember);
- getMirrorSystem(argResults.rest).then((MirrorSystem mirrorSystem) {
- if (mirrorSystem.libraries.values.isEmpty) {
- throw new StateError('No Library Mirrors.');
- }
- _documentLibraries(mirrorSystem.libraries.values);
- });
-}
-
-void _setCommandLineArguments(ArgResults argResults) {
- outputToYaml = argResults['yaml'] || argResults['output-format'] == 'yaml';
- outputToJson = argResults['json'] || argResults['output-format'] == 'json';
- if (outputToYaml && outputToJson) {
- throw new ArgumentError('Cannot have contradictory output flags.');
- }
- outputToYaml = outputToYaml || !outputToJson;
- includePrivate = argResults['include-private'];
- parseSdk = argResults['parse-sdk'];
- includeSdk = parseSdk || argResults['include-sdk'];
- packageDir = argResults['package-root'];
- if (packageDir != null) logger.info('Package Root: ${packageDir}');
+ getMirrorSystem(files, packageRoot, parseSdk: parseSdk)
+ .then((MirrorSystem mirrorSystem) {
+ if (mirrorSystem.libraries.isEmpty) {
+ throw new StateError('No library mirrors were created.');
+ }
+ _documentLibraries(mirrorSystem.libraries.values,
+ includeSdk: includeSdk, includePrivate: includePrivate,
+ outputToYaml: outputToYaml);
+ });
}
List<String> _listLibraries(List<String> args) {
@@ -113,12 +100,6 @@ List<String> _listLibraries(List<String> args) {
List<String> _listDartFromDir(String args) {
var files = listDir(args, recursive: true);
- if (packageDir == null) {
- packageDir = files.firstWhere((f) =>
- f.endsWith('/pubspec.yaml'), orElse: () => '');
- if (packageDir != '') packageDir = path.dirname(packageDir) + '/packages';
- logger.info('Package Directory: $packageDir');
- }
// To avoid anaylzing package files twice, only files with paths not
// containing '/packages' will be added. The only exception is if the file to
// analyze already has a '/package' in its path.
@@ -127,6 +108,17 @@ List<String> _listDartFromDir(String args) {
..forEach((lib) => logger.info('Added to libraries: $lib'));
}
+String _findPackageRoot(String directory) {
+ var files = listDir(directory, recursive: true);
+ // Return '' means that there was no pubspec.yaml and therefor no packageRoot.
+ String packageRoot = files.firstWhere((f) =>
+ f.endsWith('/pubspec.yaml'), orElse: () => '');
+ if (packageRoot != '') {
+ packageRoot = path.dirname(packageRoot) + '/packages';
+ }
+ return packageRoot;
+}
+
List<String> _listSdk() {
var sdk = new List<String>();
LIBRARIES.forEach((String name, LibraryInfo info) {
@@ -142,7 +134,8 @@ List<String> _listSdk() {
* Analyzes set of libraries by getting a mirror system and triggers the
* documentation of the libraries.
*/
-Future<MirrorSystem> getMirrorSystem(List<String> args) {
+Future<MirrorSystem> getMirrorSystem(List<String> args, String packageRoot,
+ {bool parseSdk:false}) {
var libraries = !parseSdk ? _listLibraries(args) : _listSdk();
if (libraries.isEmpty) throw new StateError('No Libraries.');
// DART_SDK should be set to the root of the SDK library.
@@ -156,7 +149,7 @@ Future<MirrorSystem> getMirrorSystem(List<String> args) {
logger.info('SDK Root: ${sdkRoot}');
}
- return _getMirrorSystemHelper(libraries, sdkRoot, packageRoot: packageDir);
+ return _analyzeLibraries(libraries, sdkRoot, packageRoot: packageRoot);
}
// TODO(janicejl): Should make docgen fail gracefully, or output a friendly
@@ -167,7 +160,7 @@ Future<MirrorSystem> getMirrorSystem(List<String> args) {
* Analyzes set of libraries and provides a mirror system which can be used
* for static inspection of the source code.
*/
-Future<MirrorSystem> _getMirrorSystemHelper(List<String> libraries,
+Future<MirrorSystem> _analyzeLibraries(List<String> libraries,
String libraryRoot, {String packageRoot}) {
SourceFileProvider provider = new SourceFileProvider();
api.DiagnosticHandler diagnosticHandler =
@@ -197,12 +190,14 @@ Future<MirrorSystem> _getMirrorSystemHelper(List<String> libraries,
/**
* Creates documentation for filtered libraries.
*/
-void _documentLibraries(List<LibraryMirror> libraries) {
+void _documentLibraries(List<LibraryMirror> libraries,
+ {bool includeSdk:false, bool includePrivate:false, bool
+ outputToYaml:true}) {
libraries.forEach((lib) {
// Files belonging to the SDK have a uri that begins with 'dart:'.
if (includeSdk || !lib.uri.toString().startsWith('dart:')) {
- var library = generateLibrary(lib);
- _outputLibrary(library);
+ var library = generateLibrary(lib, includePrivate: includePrivate);
+ _writeLibraryToFile(library, outputToYaml);
}
});
// Outputs a text file with a list of files available after creating all
@@ -211,22 +206,24 @@ void _documentLibraries(List<LibraryMirror> libraries) {
_writeToFile(listDir("docs").join('\n'), 'library_list.txt');
}
-Library generateLibrary(dart2js.Dart2JsLibraryMirror library) {
+Library generateLibrary(dart2js.Dart2JsLibraryMirror library,
+ {bool includePrivate:false}) {
_currentLibrary = library;
var result = new Library(library.qualifiedName, _getComment(library),
- _getVariables(library.variables), _getMethods(library.functions),
- _getClasses(library.classes));
+ _getVariables(library.variables, includePrivate),
+ _getMethods(library.functions, includePrivate),
+ _getClasses(library.classes, includePrivate));
logger.fine('Generated library for ${result.name}');
return result;
}
-void _outputLibrary(Library result) {
- if (outputToJson) {
- _writeToFile(stringify(result.toMap()), '${result.name}.json');
- }
+void _writeLibraryToFile(Library result, bool outputToYaml) {
if (outputToYaml) {
_writeToFile(getYamlString(result.toMap()), '${result.name}.yaml');
- }
+ } else {
+ _writeToFile(stringify(result.toMap()), '${result.name}.json');
+ }
+
}
/**
@@ -275,8 +272,11 @@ markdown.Node fixReference(String name, LibraryMirror currentLibrary,
/**
* Returns a map of [Variable] objects constructed from inputted mirrors.
*/
-Map<String, Variable> _getVariables(Map<String, VariableMirror> mirrorMap) {
+Map<String, Variable> _getVariables(Map<String, VariableMirror> mirrorMap,
+ bool includePrivate) {
var data = {};
+ // TODO(janicejl): When map to map feature is created, replace the below with
+ // a filter. Issue(#9590).
mirrorMap.forEach((String mirrorName, VariableMirror mirror) {
if (includePrivate || !mirror.isPrivate) {
_currentMember = mirror;
@@ -291,7 +291,8 @@ Map<String, Variable> _getVariables(Map<String, VariableMirror> mirrorMap) {
/**
* Returns a map of [Method] objects constructed from inputted mirrors.
*/
-Map<String, Method> _getMethods(Map<String, MethodMirror> mirrorMap) {
+Map<String, Method> _getMethods(Map<String, MethodMirror> mirrorMap,
+ bool includePrivate) {
var data = {};
mirrorMap.forEach((String mirrorName, MethodMirror mirror) {
if (includePrivate || !mirror.isPrivate) {
@@ -309,7 +310,8 @@ Map<String, Method> _getMethods(Map<String, MethodMirror> mirrorMap) {
/**
* Returns a map of [Class] objects constructed from inputted mirrors.
*/
-Map<String, Class> _getClasses(Map<String, ClassMirror> mirrorMap) {
+Map<String, Class> _getClasses(Map<String, ClassMirror> mirrorMap,
+ bool includePrivate) {
var data = {};
mirrorMap.forEach((String mirrorName, ClassMirror mirror) {
if (includePrivate || !mirror.isPrivate) {
@@ -321,7 +323,8 @@ Map<String, Class> _getClasses(Map<String, ClassMirror> mirrorMap) {
data[mirrorName] = new Class(mirrorName, mirror.qualifiedName,
superclass, mirror.isAbstract, mirror.isTypedef,
_getComment(mirror), interfaces.toList(),
- _getVariables(mirror.variables), _getMethods(mirror.methods),
+ _getVariables(mirror.variables, includePrivate),
+ _getMethods(mirror.methods, includePrivate),
_getAnnotations(mirror));
}
});
« no previous file with comments | « pkg/docgen/bin/docgen.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698