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

Unified Diff: bin/format.dart

Issue 945583004: If no paths are provided, read source from stdin. Fix #165. (Closed) Base URL: https://github.com/dart-lang/dart_style.git@master
Patch Set: Created 5 years, 10 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 | « CHANGELOG.md ('k') | example/format.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: bin/format.dart
diff --git a/bin/format.dart b/bin/format.dart
index a1644b4602ffb0a420cfb5a6ffe8d5e1007d9a5f..d6be2b9900b37a9427507bc13bda2f708f1e6a2c 100644
--- a/bin/format.dart
+++ b/bin/format.dart
@@ -1,6 +1,13 @@
+// Copyright (c) 2015, 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:convert';
import 'dart:io';
import 'package:args/args.dart';
+import 'package:dart_style/src/dart_formatter.dart';
+import 'package:dart_style/src/formatter_exception.dart';
import 'package:dart_style/src/formatter_options.dart';
import 'package:dart_style/src/io.dart';
@@ -15,13 +22,12 @@ void main(List<String> args) {
parser.addFlag("dry-run", abbr: "n", negatable: false,
help: "Show which files would be modified but make no changes.");
parser.addFlag("overwrite", abbr: "w", negatable: false,
- help: "Overwrite input files with formatted output.\n"
- "If unset, prints results to standard output.");
+ help: "Overwrite input files with formatted output.");
+ parser.addFlag("machine", abbr: "m", negatable: false,
+ help: "Produce machine-readable JSON output.");
parser.addFlag("follow-links", negatable: false,
help: "Follow links to files and directories.\n"
"If unset, links will be ignored.");
- parser.addFlag("machine", abbr: "m", negatable: false,
- help: "Produce machine-readable JSON output.");
parser.addFlag("transform", abbr: "t", negatable: false,
help: "Unused flag for compability with the old formatter.");
@@ -47,22 +53,29 @@ void main(List<String> args) {
}
checkForReporterCollision(String chosen, String other) {
- if (argResults[other]) {
- printUsage(parser,
- "Cannot use --$chosen and --$other at the same time.");
- exitCode = 64;
- return;
- }
+ if (!argResults[other]) return false;
+
+ printUsage(parser,
+ "Cannot use --$chosen and --$other at the same time.");
+ exitCode = 64;
+ return true;
}
var reporter = OutputReporter.print;
if (argResults["dry-run"]) {
- checkForReporterCollision("dry-run", "overwrite");
- checkForReporterCollision("dry-run", "machine");
+ if (checkForReporterCollision("dry-run", "overwrite")) return;
+ if (checkForReporterCollision("dry-run", "machine")) return;
reporter = OutputReporter.dryRun;
} else if (argResults["overwrite"]) {
- checkForReporterCollision("overwrite", "machine");
+ if (checkForReporterCollision("overwrite", "machine")) return;
+
+ if (argResults.rest.isEmpty) {
+ printUsage(parser,
+ "Cannot use --overwrite without providing any paths to format.");
+ exitCode = 64;
+ return;
+ }
reporter = OutputReporter.overwrite;
} else if (argResults["machine"]) {
@@ -82,17 +95,41 @@ void main(List<String> args) {
var followLinks = argResults["follow-links"];
+ var options = new FormatterOptions(reporter,
+ pageWidth: pageWidth, followLinks: followLinks);
+
if (argResults.rest.isEmpty) {
- printUsage(parser,
- "Please provide at least one directory or file to format.");
- exitCode = 64;
- return;
+ formatStdin(options);
+ } else {
+ formatPaths(options, argResults.rest);
}
+}
- var options = new FormatterOptions(reporter,
- pageWidth: pageWidth, followLinks: followLinks);
+/// Reads input from stdin until it's closed, and the formats it.
+void formatStdin(FormatterOptions options) {
+ var input = new StringBuffer();
+ stdin.transform(new Utf8Decoder()).listen(input.write, onDone: () {
+ var formatter = new DartFormatter(pageWidth: options.pageWidth);
+ try {
+ var source = input.toString();
+ var output = formatter.format(source, uri: "stdin");
+ options.reporter.showFile(null, "<stdin>", output,
+ changed: source != output);
+ return true;
+ } on FormatterException catch (err) {
+ stderr.writeln(err.message());
+ } catch (err, stack) {
+ stderr.writeln('''Hit a bug in the formatter when formatting stdin.
+Please report at: github.com/dart-lang/dart_style/issues
+$err
+$stack''');
+ }
+ });
+}
- for (var path in argResults.rest) {
+/// Formats all of the files and directories given by [paths].
+void formatPaths(FormatterOptions options, List<String> paths) {
+ for (var path in paths) {
var directory = new Directory(path);
if (directory.existsSync()) {
if (!processDirectory(options, directory)) {
@@ -123,7 +160,7 @@ void printUsage(ArgParser parser, [String error]) {
output.write("""$message
-Usage: dartformat [-w] <files or directories...>
+Usage: dartformat [-n|-w] [files or directories...]
${parser.usage}
""");
« no previous file with comments | « CHANGELOG.md ('k') | example/format.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698