Index: pkg/analyzer_cli/lib/src/options.dart |
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart |
index 9d754768a635105e035dc112430c391e024adcbc..776828240cf171c94b40813914ff48ae33e20013 100644 |
--- a/pkg/analyzer_cli/lib/src/options.dart |
+++ b/pkg/analyzer_cli/lib/src/options.dart |
@@ -11,6 +11,7 @@ import 'package:analyzer/src/util/sdk.dart'; |
import 'package:analyzer_cli/src/ansi.dart' as ansi; |
import 'package:analyzer_cli/src/driver.dart'; |
import 'package:args/args.dart'; |
+import 'package:telemetry/telemetry.dart' as telemetry; |
const _binaryName = 'dartanalyzer'; |
@@ -115,7 +116,7 @@ class CommandLineOptions { |
final String perfReport; |
/// Batch mode (for unit testing) |
- final bool shouldBatch; |
+ final bool batchMode; |
/// Whether to show package: warnings |
final bool showPackageWarnings; |
@@ -184,7 +185,7 @@ class CommandLineOptions { |
log = args['log'], |
machineFormat = args['format'] == 'machine', |
perfReport = args['x-perf-report'], |
- shouldBatch = args['batch'], |
+ batchMode = args['batch'], |
showPackageWarnings = args['show-package-warnings'] || |
args['package-warnings'] || |
args['x-package-warnings-prefix'] != null, |
@@ -238,8 +239,14 @@ class CommandLineOptions { |
/// analyzer options. In case of a format error, calls [printAndFail], which |
/// by default prints an error message to stderr and exits. |
static CommandLineOptions parse(List<String> args, |
- [printAndFail(String msg) = printAndFail]) { |
+ {printAndFail(String msg) = printAndFail}) { |
CommandLineOptions options = _parse(args); |
+ |
+ /// Only happens in testing. |
+ if (options == null) { |
+ return null; |
+ } |
+ |
// Check SDK. |
if (!options.buildModePersistentWorker) { |
// Infer if unspecified. |
@@ -346,6 +353,8 @@ class CommandLineOptions { |
help: 'Treat non-type warnings as fatal.', |
defaultsTo: false, |
negatable: false) |
+ ..addFlag('analytics', |
+ help: 'Enable or disable sending analytics information to Google.') |
..addFlag('help', |
abbr: 'h', |
help: |
@@ -528,15 +537,25 @@ class CommandLineOptions { |
// Help requests. |
if (results['help']) { |
- _showUsage(parser); |
+ _showUsage(parser, analytics, fromHelp: true); |
+ exitHandler(0); |
+ return null; // Only reachable in testing. |
+ } |
+ |
+ // Enable / disable analytics. |
+ if (results.wasParsed('analytics')) { |
+ analytics.enabled = results['analytics']; |
+ outSink |
+ .writeln(telemetry.createAnalyticsStatusMessage(analytics.enabled)); |
exitHandler(0); |
return null; // Only reachable in testing. |
} |
+ |
// Batch mode and input files. |
if (results['batch']) { |
if (results.rest.isNotEmpty) { |
errorSink.writeln('No source files expected in the batch mode.'); |
- _showUsage(parser); |
+ _showUsage(parser, analytics); |
exitHandler(15); |
return null; // Only reachable in testing. |
} |
@@ -544,7 +563,7 @@ class CommandLineOptions { |
if (results.rest.isNotEmpty) { |
errorSink.writeln( |
'No source files expected in the persistent worker mode.'); |
- _showUsage(parser); |
+ _showUsage(parser, analytics); |
exitHandler(15); |
return null; // Only reachable in testing. |
} |
@@ -554,7 +573,7 @@ class CommandLineOptions { |
return null; // Only reachable in testing. |
} else { |
if (results.rest.isEmpty && !results['build-mode']) { |
- _showUsage(parser); |
+ _showUsage(parser, analytics, fromHelp: true); |
exitHandler(15); |
return null; // Only reachable in testing. |
} |
@@ -562,21 +581,46 @@ class CommandLineOptions { |
return new CommandLineOptions._fromArgs(results); |
} on FormatException catch (e) { |
errorSink.writeln(e.message); |
- _showUsage(parser); |
+ _showUsage(parser, null); |
exitHandler(15); |
return null; // Only reachable in testing. |
} |
} |
- static _showUsage(ArgParser parser) { |
+ static _showUsage(ArgParser parser, telemetry.Analytics analytics, |
+ {bool fromHelp: false}) { |
+ void printAnalyticsInfo() { |
+ if (fromHelp) { |
+ errorSink.writeln(''); |
+ errorSink.writeln(telemetry.analyticsNotice); |
+ } |
+ |
+ if (analytics != null) { |
+ errorSink.writeln(''); |
+ errorSink.writeln(telemetry.createAnalyticsStatusMessage( |
+ analytics.enabled, |
+ command: 'analytics')); |
+ } |
+ } |
+ |
errorSink.writeln( |
'Usage: $_binaryName [options...] <directory or list of files>'); |
+ |
+ // If it's our first run, we display the analytics info more prominently. |
+ if (analytics != null && analytics.firstRun) { |
+ printAnalyticsInfo(); |
+ } |
+ |
errorSink.writeln(''); |
errorSink.writeln(parser.usage); |
+ |
+ if (analytics != null && !analytics.firstRun) { |
+ printAnalyticsInfo(); |
+ } |
+ |
errorSink.writeln(''); |
errorSink.writeln(''' |
Run "dartanalyzer -h -v" for verbose help output, including less commonly used options. |
-For more information, see http://www.dartlang.org/tools/analyzer. |
-'''); |
+For more information, see https://www.dartlang.org/tools/analyzer.\n'''); |
} |
} |