[frontend_server] Support --verbosity argument
Adds support for the --verbosity argument in the frontend server to
control the printing level.
Closes #44867
Change-Id: I0f4e535c2e30e4d34cb8bc1d3fb4ac21d4009834
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245161
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
diff --git a/pkg/frontend_server/lib/frontend_server.dart b/pkg/frontend_server/lib/frontend_server.dart
index ca5700a..b2489b6 100644
--- a/pkg/frontend_server/lib/frontend_server.dart
+++ b/pkg/frontend_server/lib/frontend_server.dart
@@ -203,7 +203,12 @@
defaultsTo: false)
..addFlag('print-incremental-dependencies',
help: 'Print list of sources added and removed from compilation',
- defaultsTo: true);
+ defaultsTo: true)
+ ..addOption('verbosity',
+ help: 'Sets the verbosity level of the compilation',
+ defaultsTo: Verbosity.defaultValue,
+ allowed: Verbosity.allowedValues,
+ allowedHelp: Verbosity.allowedValuesHelp);
String usage = '''
Usage: server [options] [input.dart]
@@ -395,26 +400,19 @@
final List<String> errors = <String>[];
_onDiagnostic(DiagnosticMessage message) {
- // TODO(https://dartbug.com/44867): The frontend server should take a
- // verbosity argument and put that in CompilerOptions and use it here.
- bool printMessage;
switch (message.severity) {
case Severity.error:
case Severity.internalProblem:
- printMessage = true;
errors.addAll(message.plainTextFormatted);
break;
case Severity.warning:
- printMessage = true;
- break;
case Severity.info:
- printMessage = false;
break;
case Severity.context:
case Severity.ignored:
throw 'Unexpected severity: ${message.severity}';
}
- if (printMessage) {
+ if (Verbosity.shouldPrint(_compilerOptions.verbosity, message)) {
printDiagnosticMessage(message, _outputStream.writeln);
}
}
@@ -466,7 +464,10 @@
parseExperimentalArguments(options['enable-experiment']),
onError: (msg) => errors.add(msg))
..nnbdMode = (nullSafety == true) ? NnbdMode.Strong : NnbdMode.Weak
- ..onDiagnostic = _onDiagnostic;
+ ..onDiagnostic = _onDiagnostic
+ ..verbosity = Verbosity.parseArgument(options['verbosity'],
+ onError: (msg) => errors.add(msg));
+ _compilerOptions = compilerOptions;
if (options.wasParsed('libraries-spec')) {
compilerOptions.librariesSpecificationUri =
@@ -554,7 +555,6 @@
];
}
- _compilerOptions = compilerOptions;
_processedOptions = ProcessedOptions(options: compilerOptions);
KernelCompilationResults results;
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index 46457d0..4c7fca1 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -3062,6 +3062,61 @@
inputStreamController.close();
}
}, timeout: Timeout.factor(8));
+
+ test('compile with(out) warning', () async {
+ Future runTest({bool hideWarnings}) async {
+ var file = File('${tempDir.path}/foo.dart')..createSync();
+ file.writeAsStringSync("""
+main() {}
+method(int i) => i?.isEven;
+""");
+ var package_config =
+ File('${tempDir.path}/.dart_tool/package_config.json')
+ ..createSync(recursive: true)
+ ..writeAsStringSync('''
+ {
+ "configVersion": 2,
+ "packages": [
+ {
+ "name": "hello",
+ "rootUri": "../",
+ "packageUri": "./"
+ }
+ ]
+ }
+ ''');
+ var dillFile = File('${tempDir.path}/app.dill');
+
+ expect(dillFile.existsSync(), false);
+
+ final List<String> args = <String>[
+ '--sdk-root=${sdkRoot.toFilePath()}',
+ '--incremental',
+ '--platform=${ddcPlatformKernel.path}',
+ '--output-dill=${dillFile.path}',
+ '--packages=${package_config.path}',
+ '--target=dartdevc',
+ if (hideWarnings) '--verbosity=error',
+ file.path,
+ ];
+ StringBuffer output = new StringBuffer();
+ expect(await starter(args, output: output), 0);
+ String result = output.toString();
+ Matcher matcher =
+ contains("Warning: Operand of null-aware operation '?.' "
+ "has type 'int' which excludes null.");
+ if (hideWarnings) {
+ matcher = isNot(matcher);
+ }
+ expect(result, matcher);
+
+ file.deleteSync();
+ dillFile.deleteSync();
+ }
+
+ await runTest(hideWarnings: false);
+ await runTest(hideWarnings: true);
+ });
});
}