| Index: tools/line_doc_comments.dart
|
| diff --git a/tools/line_doc_comments.dart b/tools/line_doc_comments.dart
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..aa7627cc0d977cb5161253bafe60da3e50caa50b
|
| --- /dev/null
|
| +++ b/tools/line_doc_comments.dart
|
| @@ -0,0 +1,87 @@
|
| +#!/usr/bin/env dart
|
| +
|
| +/// Converts block-style Doc comments in Dart code to line style.
|
| +library line_doc_comments;
|
| +import 'dart:io';
|
| +
|
| +import '../pkg/path/lib/path.dart' as path;
|
| +
|
| +final oneLineBlock = new RegExp(r'^(\s*)/\*\*\s?(.*)\*/\s*$');
|
| +final startBlock = new RegExp(r'^(\s*)/\*\*(.*)$');
|
| +final blockLine = new RegExp(r'^\s*\*\s?(.*)$');
|
| +final endBlock = new RegExp(r'^\s*\*/\s*$');
|
| +
|
| +main() {
|
| + var args = new Options().arguments;
|
| + if (args.length != 1) {
|
| + print('Converts "/**"-style block doc comments in a directory ');
|
| + print('containing Dart code to "///"-style line doc comments.');
|
| + print('');
|
| + print('Usage: line_doc_coments.dart <dir>');
|
| + return;
|
| + }
|
| +
|
| + var dir = new Directory(args[0]);
|
| + var lister = dir.list(recursive: true);
|
| + lister.onFile = (file) {
|
| + if (path.extension(file) != '.dart') return;
|
| + fixFile(file);
|
| + };
|
| +}
|
| +
|
| +void fixFile(String path) {
|
| + var file = new File(path);
|
| + file.readAsLines().transform(fixContents).chain((fixed) {
|
| + return new File(path).writeAsString(fixed);
|
| + }).then((file) {
|
| + print(file.name);
|
| + });
|
| +}
|
| +
|
| +String fixContents(List<String> lines) {
|
| + var buffer = new StringBuffer();
|
| + var inBlock = false;
|
| + var indent;
|
| + for (var line in lines) {
|
| + if (inBlock) {
|
| + // See if it's the end of the comment.
|
| + if (endBlock.hasMatch(line)) {
|
| + inBlock = false;
|
| +
|
| + // Just a pointless line, delete it!
|
| + line = null;
|
| + } else {
|
| + var match = blockLine.firstMatch(line);
|
| + line = '$indent/// ${match[1]}';
|
| + }
|
| + } else {
|
| + // See if it's a one-line block comment like: /** Blah. */
|
| + var match = oneLineBlock.firstMatch(line);
|
| + if (match != null) {
|
| + if (match[2] != '') {
|
| + line = '${match[1]}/// ${match[2]}';
|
| + } else {
|
| + line = '${match[1]}///';
|
| + }
|
| + } else {
|
| + // See if it's the start of a block doc comment.
|
| + match = startBlock.firstMatch(line);
|
| + if (match != null) {
|
| + inBlock = true;
|
| + indent = match[1];
|
| + if (match[2] != '') {
|
| + // Got comment on /** line.
|
| + line = match[2];
|
| + } else {
|
| + // Just a pointless line, delete it!
|
| + line = null;
|
| + }
|
| + }
|
| + }
|
| + }
|
| +
|
| + if (line != null) buffer.add('$line\n');
|
| + }
|
| +
|
| + return buffer.toString();
|
| +}
|
|
|