Add DiagnosticMessage support API

Change-Id: I0ae8d37e48951a58bd2d9016397baeee916857ee
Reviewed-on: https://dart-review.googlesource.com/c/78063
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Auto-Submit: Peter von der Ahé <ahe@google.com>
This commit is contained in:
Peter von der Ahé 2018-10-15 14:06:55 +00:00 committed by commit-bot@chromium.org
parent 88bde88112
commit e502edf28b
5 changed files with 45 additions and 32 deletions

View file

@ -8,10 +8,9 @@ import 'package:analyzer_fe_comparison/src/comparison_node.dart';
import 'package:front_end/src/api_prototype/compiler_options.dart'
show CompilerOptions;
import 'package:front_end/src/api_prototype/diagnostic_message.dart'
show DiagnosticMessage, DiagnosticMessageHandler;
show DiagnosticMessage, DiagnosticMessageHandler, getMessageHeaderText;
import 'package:front_end/src/api_prototype/kernel_generator.dart';
import 'package:front_end/src/api_prototype/standard_file_system.dart';
import 'package:front_end/src/fasta/messages.dart' show FormattedMessage;
import 'package:kernel/ast.dart';
import 'package:kernel/target/targets.dart';
@ -60,10 +59,7 @@ Future<ComparisonNode> analyzeProgram(Uri input, Uri packagesFileUri,
}
ComparisonNode _diagnosticMessageToNode(DiagnosticMessage message) {
// TODO(ahe): Temporarily using FormattedMessage until DiagnosticMessage
// is extended to support this use case.
FormattedMessage formatted = message;
return ComparisonNode(formatted.message);
return ComparisonNode(getMessageHeaderText(message));
}
CompilerOptions _makeCompilerOptions(Uri packagesFileUri, Uri platformUri,

View file

@ -4,6 +4,8 @@
library front_end.diagnostic_message;
import '../fasta/fasta_codes.dart' show Code, FormattedMessage;
import '../fasta/severity.dart' show Severity;
/// The type of a diagnostic message callback. For example:
@ -32,7 +34,29 @@ abstract class DiagnosticMessage {
Iterable<String> get plainTextFormatted;
Severity get severity;
// TODO(ahe): Rename this, it's actually an error code.
int get index;
}
/// This method is subject to change.
Uri getMessageUri(DiagnosticMessage message) {
return message is FormattedMessage ? message.uri : null;
}
/// This method is subject to change.
Code getMessageCodeObject(DiagnosticMessage message) {
return message is FormattedMessage ? message.code : null;
}
/// This method is subject to change.
String getMessageHeaderText(DiagnosticMessage message) {
return message is FormattedMessage ? message.message : null;
}
/// This method is subject to change.
int getMessageCode(DiagnosticMessage message) {
return message is FormattedMessage ? message.code.index : -1;
}
/// This method is subject to change.
Map<String, dynamic> getMessageArguments(DiagnosticMessage message) {
return message is FormattedMessage ? message.arguments : null;
}

View file

@ -10,11 +10,22 @@ import 'dart:io' show Platform, Process, ProcessResult, stderr, stdout;
import '../fasta/colors.dart' show ALL_CODES, TERMINAL_CAPABILITIES;
import 'diagnostic_message.dart' show DiagnosticMessage;
/// True if we should enable colors in output.
///
/// We enable colors only when both [stdout] and [stderr] support ANSI escapes.
final bool enableTerminalColors = _computeEnableColors();
void printDiagnosticMessage(
DiagnosticMessage message, void Function(String) println) {
if (enableTerminalColors) {
message.ansiFormatted.forEach(println);
} else {
message.plainTextFormatted.forEach(println);
}
}
/// On Windows, colors are enabled if both stdout and stderr supports ANSI
/// escapes. On other platforms, we rely on the external programs `tty` and
/// `tput` to compute if ANSI colors are supported.

View file

@ -2,17 +2,10 @@
// 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 '../api_prototype/diagnostic_message.dart' show DiagnosticMessage;
import '../api_prototype/terminal_color_support.dart' show enableTerminalColors;
import '../fasta/fasta_codes.dart' show FormattedMessage;
export '../api_prototype/compiler_options.dart'
show CompilerOptions, ProblemHandler;
export '../api_prototype/compiler_options.dart' show CompilerOptions;
export '../api_prototype/diagnostic_message.dart'
show DiagnosticMessage, DiagnosticMessageHandler;
show DiagnosticMessage, DiagnosticMessageHandler, getMessageUri;
export '../api_prototype/file_system.dart'
show FileSystem, FileSystemEntity, FileSystemException;
@ -27,6 +20,9 @@ export '../api_prototype/memory_file_system.dart' show MemoryFileSystem;
export '../api_prototype/standard_file_system.dart' show StandardFileSystem;
export '../api_prototype/terminal_color_support.dart'
show printDiagnosticMessage;
export '../base/processed_options.dart' show ProcessedOptions;
export '../compute_platform_binaries_location.dart'
@ -59,14 +55,3 @@ export '../fasta/hybrid_file_system.dart' show HybridFileSystem;
export '../fasta/kernel/utils.dart' show serializeComponent, serializeProcedure;
export '../fasta/severity.dart' show Severity;
Uri getMessageUri(FormattedMessage message) => message.uri;
void printDiagnosticMessage(
DiagnosticMessage message, void Function(String) println) {
if (enableTerminalColors) {
message.ansiFormatted.forEach(println);
} else {
message.plainTextFormatted.forEach(println);
}
}

View file

@ -181,9 +181,6 @@ class FormattedMessage implements DiagnosticMessage {
// TODO(ahe): Implement this correctly.
return ansiFormatted;
}
@override
int get index => code.index;
}
String relativizeUri(Uri uri) {