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

Unified Diff: lib/dartdoc/dartdoc.dart

Issue 10809035: Several new features and improvements for dartdoc. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 5 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
Index: lib/dartdoc/dartdoc.dart
diff --git a/lib/dartdoc/dartdoc.dart b/lib/dartdoc/dartdoc.dart
index 5ce8427ea81bb5c1e319dff9818067e60c17256f..86e4a2f8236d8ad41cf71c79f92bd977047e68f2 100644
--- a/lib/dartdoc/dartdoc.dart
+++ b/lib/dartdoc/dartdoc.dart
@@ -26,6 +26,7 @@
#import('markdown.dart', prefix: 'md');
#import('../compiler/implementation/scanner/scannerlib.dart',
prefix: 'dart2js');
+#import('../compiler/implementation/library_map.dart');
#source('comment_map.dart');
#source('utils.dart');
@@ -56,19 +57,15 @@ final MODE_STATIC = 0;
*/
final MODE_LIVE_NAV = 1;
+final API_LOCATION = 'http://api.dartlang.org/';
+
/**
* Run this from the `lib/dartdoc` directory.
*/
void main() {
final args = new Options().arguments;
- // Parse the dartdoc options.
- bool includeSource;
- int mode;
- Path outputDir;
- bool generateAppCache;
- bool omitGenerationTime;
- bool verbose;
+ final dartdoc = new Dartdoc();
if (args.isEmpty()) {
print('No arguments provided.');
@@ -76,37 +73,57 @@ void main() {
return;
}
- for (int i = 0; i < args.length - 1; i++) {
+ List<Path> entrypoints = new List<Path>();
Bob Nystrom 2012/07/23 17:04:31 final entrypoints = <Path>[];
Johnni Winther 2012/07/24 08:49:16 Done.
+
+ var i = 0;
+ while (i < args.length) {
final arg = args[i];
+ if (!arg.startsWith('--')) {
+ // The remaining arguments must be entry points.
+ break;
+ }
switch (arg) {
case '--no-code':
- includeSource = false;
+ dartdoc.includeSource = false;
break;
case '--mode=static':
- mode = MODE_STATIC;
+ dartdoc.mode = MODE_STATIC;
break;
case '--mode=live-nav':
- mode = MODE_LIVE_NAV;
+ dartdoc.mode = MODE_LIVE_NAV;
break;
case '--generate-app-cache':
case '--generate-app-cache=true':
- generateAppCache = true;
+ dartdoc.generateAppCache = true;
break;
case '--omit-generation-time':
- omitGenerationTime = true;
+ dartdoc.omitGenerationTime = true;
break;
case '--verbose':
- verbose = true;
+ dartdoc.verbose = true;
+ break;
+ case '--include-api':
+ dartdoc.includeAPI = true;
Bob Nystrom 2012/07/23 17:04:31 Should be "includeApi".
Johnni Winther 2012/07/24 08:49:16 Done.
+ break;
+ case '--link-api':
+ dartdoc.linkToApi = true;
break;
default:
if (arg.startsWith('--out=')) {
- outputDir = new Path.fromNative(arg.substring('--out='.length));
+ dartdoc.outputDir =
+ new Path.fromNative(arg.substring('--out='.length));
+ } else if (arg.startsWith('--include-lib=')) {
+ dartdoc.includeLibraries =
+ arg.substring('--include-lib='.length).split(',');
+ } else if (arg.startsWith('--exclude-lib=')) {
+ dartdoc.excludeLibraries =
+ arg.substring('--exclude-lib='.length).split(',');
} else {
print('Unknown option: $arg');
printUsage();
@@ -114,24 +131,23 @@ void main() {
}
break;
}
+ i++;
+ }
+ while (i < args.length) {
+ final arg = args[i];
+ entrypoints.add(new Path.fromNative(arg));
+ i++;
}
- final entrypoint = new Path.fromNative(args[args.length - 1]);
-
- final dartdoc = new Dartdoc();
-
- if (includeSource != null) dartdoc.includeSource = includeSource;
- if (mode != null) dartdoc.mode = mode;
- if (outputDir != null) dartdoc.outputDir = outputDir;
- if (generateAppCache != null) dartdoc.generateAppCache = generateAppCache;
- if (omitGenerationTime != null) {
- dartdoc.omitGenerationTime = omitGenerationTime;
+ if (entrypoints.isEmpty()) {
+ print('No entrypoints provided.');
+ printUsage();
+ return;
}
- if (verbose != null) dartdoc.verbose = verbose;
cleanOutputDirectory(dartdoc.outputDir);
- dartdoc.documentEntryPoint(entrypoint, libPath);
+ dartdoc.documentLibraries(entrypoints, libPath);
// Compile the client-side code to JS.
final clientScript = (dartdoc.mode == MODE_STATIC) ? 'static' : 'live-nav';
@@ -151,7 +167,7 @@ void main() {
void printUsage() {
print('''
-Usage dartdoc [options] <entrypoint>
+Usage dartdoc [options] <entrypoint(s)>
[options] include
--no-code Do not include source code in the documentation.
@@ -179,6 +195,25 @@ Usage dartdoc [options] <entrypoint>
--out=<dir> Generates files into directory <dir>. If omitted
the files are generated into ./docs/
+ --link-api Link to the online language API in the generated
+ documentation. The option overrides inclusion
+ through --include-api or --include-lib.
+
+ --include-api Include the used API libraries in the generated
+ documentation. If the --link-api option is used,
+ this option is ignored.
+
+ --include-lib=<libs> Use this option to explicitly specify which
+ libraries to include in the documentation. If
+ omitted, all used libraries are included by
+ default. <libs> is comma-separated list of library
+ names.
+
+ --exclude-lib=<libs> Use this option to explicitly specify which
+ libraries to exclude from the documentation. If
+ omitted, no libraries are excluded. <libs> is
+ comma-separated list of library names.
+
--verbose Print verbose information during generation.
''');
}
@@ -312,8 +347,17 @@ class Dartdoc {
/** Set by Dartdoc user to print extra information during generation. */
bool verbose = false;
- /** Set this to select the libraries to document */
- List<String> libraries = null;
+ /** Set this to include API libraries in the documentation. */
+ bool includeAPI = false;
+
+ /** Set this to generate link to the online API. */
floitsch 2012/07/23 10:43:56 links
Johnni Winther 2012/07/24 08:49:16 Done.
+ bool linkToApi = false;
+
+ /** Set this to select the libraries to include in the documentation */
floitsch 2012/07/23 10:43:56 documentation.
Johnni Winther 2012/07/24 08:49:16 Done.
+ List<String> includeLibraries = null;
floitsch 2012/07/23 10:43:56 Wouldn't it be easier, if you initialized this wit
Bob Nystrom 2012/07/23 17:04:31 +1. Also, I would name it "includedLibraries", or
Johnni Winther 2012/07/24 08:49:16 Done.
Johnni Winther 2012/07/24 08:49:16 Done.
+
+ /** Set this to select the libraries to exclude from the documentation */
floitsch 2012/07/23 10:43:56 documentation.
Johnni Winther 2012/07/24 08:49:16 Done.
+ List<String> excludeLibraries = null;
floitsch 2012/07/23 10:43:56 ditto (empty list).
Bob Nystrom 2012/07/23 17:04:31 "excludedLibraries"
Johnni Winther 2012/07/24 08:49:16 Done.
Johnni Winther 2012/07/24 08:49:16 Done.
/**
* This list contains the libraries sorted in by the library name.
@@ -354,12 +398,44 @@ class Dartdoc {
}
bool includeLibrary(LibraryMirror library) {
floitsch 2012/07/23 10:43:56 not a boolean name. shouldIncludeLibrary?
Bob Nystrom 2012/07/23 17:04:31 +1. Also, needs a doc comment.
- if (libraries != null) {
- return libraries.indexOf(library.simpleName()) != -1;
+ if (linkLibrary(library)) {
Bob Nystrom 2012/07/23 17:04:31 It's up to you, but if you like, the style guide d
+ return false;
+ }
+ String libraryName = library.simpleName();
+ if (includeLibraries != null) {
+ if (includeLibraries.indexOf(libraryName) != -1) {
+ return true;
+ }
+ }
+ if (excludeLibraries != null) {
+ if (excludeLibraries.indexOf(libraryName) != -1) {
+ return false;
+ }
+ }
+ if (libraryName.startsWith('dart:')) {
+ String suffix = libraryName.substring('dart:'.length);
floitsch 2012/07/23 10:43:56 This code is duplicated here and below. Maybe crea
Johnni Winther 2012/07/24 08:49:16 They are slightly different.
+ LibraryInfo info = DART2JS_LIBRARY_MAP[suffix];
+ if (info != null) {
+ return !info.internal && includeAPI;
+ }
}
return true;
}
+ bool linkLibrary(LibraryMirror library) {
floitsch 2012/07/23 10:43:56 that's not a boolean name. shouldLinkToPublicApi ?
Johnni Winther 2012/07/24 08:49:16 Done.
+ if (linkToApi) {
+ String libraryName = library.simpleName();
+ if (libraryName.startsWith('dart:')) {
+ String suffix = libraryName.substring('dart:'.length);
+ LibraryInfo info = DART2JS_LIBRARY_MAP[suffix];
+ if (info != null) {
+ return !info.internal;
+ }
+ }
+ }
+ return false;
+ }
+
String get footerContent(){
var footerItems = [];
if(!omitGenerationTime) {
@@ -1281,7 +1357,9 @@ class Dartdoc {
assert(type is InterfaceMirror);
// Link to the type.
- if (includeLibrary(type.library())) {
+ if (linkLibrary(type.library())) {
+ write('<a href="$API_LOCATION${typeUrl(type)}">${type.simpleName()}</a>');
+ } else if (includeLibrary(type.library())) {
write(a(typeUrl(type), type.simpleName()));
} else {
write(type.simpleName());

Powered by Google App Engine
This is Rietveld 408576698