Adjust front end nomenclature for error messages.

This change updates the classes Message, MessageCode, Template,
LocatedMessage, and FormattedMessage so that they uniformly refer to
error message text using the terminology `problemMessage` and to
correction suggestions using the terminology `correctionMessage`.
This brings them into alignment with the names we've decided to use to
unify the structure of front_end and analyzer, and makes them match
the names used in the anlayzer and front end's `messages.yaml` files.

Change-Id: Idcbb7ccfff6bb4e99ca22a3ef3c19d83880cf3c7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/215154
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
This commit is contained in:
Paul Berry 2021-10-04 13:32:46 +00:00 committed by commit-bot@chromium.org
parent c3d9664956
commit b2c2acee09
39 changed files with 1917 additions and 1687 deletions

View file

@ -39,14 +39,16 @@ class Code<T> {
class Message {
final Code<dynamic> code;
final String message;
final String problemMessage;
final String? tip;
final String? correctionMessage;
final Map<String, dynamic> arguments;
const Message(this.code,
{required this.message, this.tip, this.arguments = const {}});
{this.correctionMessage,
required this.problemMessage,
this.arguments = const {}});
LocatedMessage withLocation(Uri uri, int charOffset, int length) {
return new LocatedMessage(uri, charOffset, length, this);
@ -57,21 +59,21 @@ class Message {
}
String toString() {
return "Message[$code, $message, $tip, $arguments]";
return "Message[$code, $problemMessage, $correctionMessage, $arguments]";
}
}
class MessageCode extends Code<Null> implements Message {
final String message;
final String problemMessage;
final String? tip;
final String? correctionMessage;
const MessageCode(String name,
{int index: -1,
List<String>? analyzerCodes,
Severity severity: Severity.error,
required this.message,
this.tip})
required this.problemMessage,
this.correctionMessage})
: super(name,
index: index, analyzerCodes: analyzerCodes, severity: severity);
@ -90,15 +92,15 @@ class MessageCode extends Code<Null> implements Message {
}
class Template<T> {
final String messageTemplate;
final String problemMessageTemplate;
final String? tipTemplate;
final String? correctionMessageTemplate;
final T withArguments;
const Template(
{required this.messageTemplate,
this.tipTemplate,
{this.correctionMessageTemplate,
required this.problemMessageTemplate,
required this.withArguments});
}
@ -116,9 +118,9 @@ class LocatedMessage implements Comparable<LocatedMessage> {
Code<dynamic> get code => messageObject.code;
String get message => messageObject.message;
String get problemMessage => messageObject.problemMessage;
String? get tip => messageObject.tip;
String? get correctionMessage => messageObject.correctionMessage;
Map<String, dynamic> get arguments => messageObject.arguments;
@ -128,7 +130,7 @@ class LocatedMessage implements Comparable<LocatedMessage> {
if (result != 0) return result;
result = charOffset.compareTo(other.charOffset);
if (result != 0) return result;
return message.compareTo(message);
return problemMessage.compareTo(problemMessage);
}
FormattedMessage withFormatting(PlainAndColorizedString formatted, int line,
@ -209,9 +211,9 @@ class FormattedMessage implements DiagnosticMessage {
String get codeName => code.name;
String get message => locatedMessage.message;
String get problemMessage => locatedMessage.problemMessage;
String? get tip => locatedMessage.tip;
String? get correctionMessage => locatedMessage.correctionMessage;
Map<String, dynamic> get arguments => locatedMessage.arguments;

File diff suppressed because it is too large Load diff

View file

@ -66,7 +66,7 @@ Code? getMessageCodeObject(DiagnosticMessage message) {
/// This method is subject to change.
String? getMessageHeaderText(DiagnosticMessage message) {
return message is FormattedMessage ? message.message : null;
return message is FormattedMessage ? message.problemMessage : null;
}
/// This method is subject to change.

View file

@ -22,5 +22,6 @@ class ParserError {
ParserError.fromTokens(Token begin, Token end, Message message)
: this(begin.charOffset, end.charOffset + end.charCount, message);
String toString() => "@${beginOffset}: ${message.message}\n${message.tip}";
String toString() => "@${beginOffset}: ${message.problemMessage}\n"
"${message.correctionMessage}";
}

View file

@ -96,7 +96,8 @@ abstract class StackListener extends Listener {
// If offset is available report and internal problem to show the
// parsed code in the output.
throw internalProblem(
new Message(const Code<String>('Internal error'), message: message),
new Message(const Code<String>('Internal error'),
problemMessage: message),
token.charOffset,
uri);
} else {
@ -198,7 +199,8 @@ abstract class StackListener extends Listener {
// If offset is available report and internal problem to show the
// parsed code in the output.
throw internalProblem(
new Message(const Code<String>('Internal error'), message: message),
new Message(const Code<String>('Internal error'),
problemMessage: message),
token.charOffset,
uri);
} else {
@ -480,7 +482,7 @@ abstract class StackListener extends Listener {
@override
void handleRecoverableError(
Message message, Token startToken, Token endToken) {
debugEvent("Error: ${message.message}");
debugEvent("Error: ${message.problemMessage}");
if (isIgnoredError(message.code, startToken)) return;
addProblem(
message, startToken.charOffset, lengthOfSpan(startToken, endToken));

View file

@ -73,7 +73,7 @@ abstract class ErrorToken extends SimpleToken {
int get length => 1;
String get lexeme {
String errorMsg = assertionMessage.message;
String errorMsg = assertionMessage.problemMessage;
// Attempt to include the location which is calling the parser
// in an effort to debug https://github.com/dart-lang/sdk/issues/37528

View file

@ -13,7 +13,7 @@ class CommandLineProblem {
CommandLineProblem.deprecated(String message)
: this(templateUnspecified.withArguments(message));
String toString() => message.message;
String toString() => message.problemMessage;
}
class ParsedOptions {

View file

@ -3416,7 +3416,7 @@ class AstBuilder extends StackListener {
if (message == messageNativeClauseShouldBeAnnotation && allowNativeClause) {
return;
}
debugEvent("Error: ${message.message}");
debugEvent("Error: ${message.problemMessage}");
if (message.code.analyzerCodes == null && startToken is ErrorToken) {
translateErrorToken(startToken, errorReporter.reportScannerError);
} else {
@ -3728,7 +3728,7 @@ class AstBuilder extends StackListener {
@override
Never internalProblem(Message message, int charOffset, Uri uri) {
throw UnsupportedError(message.message);
throw UnsupportedError(message.problemMessage);
}
/// Return `true` if [token] is either `null` or is the symbol or keyword

View file

@ -582,7 +582,7 @@ class MiniAstBuilder extends StackListener {
@override
internalProblem(Message message, int charOffset, Uri? uri) {
throw UnsupportedError(message.message);
throw UnsupportedError(message.problemMessage);
}
List? popList(int n, List list) {

View file

@ -141,5 +141,5 @@ DiagnosticMessage _createDiagnosticMessage(
var sourceSpan = SourceSpan(
message.uri, message.charOffset, message.charOffset + message.length);
return reporter.createMessage(
sourceSpan, MessageKind.GENERIC, {'text': message.message});
sourceSpan, MessageKind.GENERIC, {'text': message.problemMessage});
}

View file

@ -2168,7 +2168,7 @@ DiagnosticMessage _createDiagnosticMessage(
SourceSpan sourceSpan = SourceSpan(
message.uri, message.charOffset, message.charOffset + message.length);
return reporter.createMessage(
sourceSpan, MessageKind.GENERIC, {'text': message.message});
sourceSpan, MessageKind.GENERIC, {'text': message.problemMessage});
}
void reportLocatedMessage(DiagnosticReporter reporter,

View file

@ -31,8 +31,8 @@ main() {
var cantReadFile =
templateCantReadFile.withArguments(entryPoint, EXCEPTION);
List<String> expectedLines = [
"Error: ${cantReadFile.message}",
"Error: ${messageMissingMain.message}",
"Error: ${cantReadFile.problemMessage}",
"Error: ${messageMissingMain.problemMessage}",
];
test('Throw in input provider',
await run(memorySourceFiles: new CrashingMap()),

View file

@ -38,7 +38,7 @@ import 'package:kernel/ast.dart'
DiagnosticMessage _createInternalError(Uri uri, int line, int col, String msg) {
return Message(Code<String>('Expression Compiler Internal error'),
message: msg)
problemMessage: msg)
.withLocation(uri, 0, 0)
.withFormatting(PlainAndColorizedString.plainOnly('Internal error: $msg'),
line, col, Severity.internalProblem, []);

View file

@ -251,7 +251,7 @@ class ProcessedOptions {
if (_raw.skipForDebugging < 0) {
print(templateDebugTrace
.withArguments("$severity", "${StackTrace.current}")
.message);
.problemMessage);
} else {
throw new DebugAbort(
message.uri, message.charOffset, severity, StackTrace.current);
@ -606,7 +606,7 @@ class ProcessedOptions {
// We throw a new exception to ensure that the message include the uri
// that led to the exception. Exceptions in Uri don't include the
// offending uri in the exception message.
throw new ArgumentError(message.message);
throw new ArgumentError(message.problemMessage);
}
return null;
}
@ -729,7 +729,7 @@ class ProcessedOptions {
// We throw a new exception to ensure that the message include the uri
// that led to the exception. Exceptions in Uri don't include the
// offending uri in the exception message.
throw new ArgumentError(message.message);
throw new ArgumentError(message.problemMessage);
}
}

View file

@ -604,7 +604,7 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
return unhandled(
templateTypeArgumentMismatch
.withArguments(typeVariablesCount)
.message,
.problemMessage,
"buildTypeArguments",
-1,
null);

View file

@ -137,7 +137,7 @@ abstract class ExtensionBuilderImpl extends DeclarationBuilderImpl
return unhandled(
templateTypeArgumentMismatch
.withArguments(typeVariablesCount)
.message,
.problemMessage,
"buildTypeArguments",
-1,
null);

View file

@ -53,10 +53,11 @@ PlainAndColorizedString format(LocatedMessage message, Severity severity,
length = 1;
}
String? prefix = severityPrefixes[severity];
String messageTextTmp =
prefix == null ? message.message : "$prefix: ${message.message}";
if (message.tip != null) {
messageTextTmp += "\n${message.tip}";
String messageTextTmp = prefix == null
? message.problemMessage
: "$prefix: ${message.problemMessage}";
if (message.correctionMessage != null) {
messageTextTmp += "\n${message.correctionMessage}";
}
final String messageTextPlain = messageTextTmp;
String messageTextColorized;
@ -106,7 +107,7 @@ PlainAndColorizedString format(LocatedMessage message, Severity severity,
}
} catch (error, trace) {
print("Crash when formatting: "
"[${message.code.name}] ${safeToString(message.message)}\n"
"[${message.code.name}] ${safeToString(message.problemMessage)}\n"
"${safeToString(error)}\n"
"$trace");
throw new Crash(message.uri, message.charOffset, error, trace);

View file

@ -100,9 +100,11 @@ class CompilerContext {
if (context == null) {
// Note: we throw directly and don't use internalProblem, because
// internalProblem depends on having a compiler context available.
String message = messageInternalProblemMissingContext.message;
String tip = messageInternalProblemMissingContext.tip!;
throw "Internal problem: $message\nTip: $tip";
String problemMessage =
messageInternalProblemMissingContext.problemMessage;
String correctionMessage =
messageInternalProblemMissingContext.correctionMessage!;
throw "Internal problem: $problemMessage\nTip: $correctionMessage";
}
return context;
}

View file

@ -172,7 +172,7 @@ class DillLoader extends Loader {
double ms = elapsed.inMicroseconds / Duration.microsecondsPerMillisecond;
Message message = template.withArguments(
libraryCount, byteCount, ms, byteCount / ms, ms / libraryCount);
print("$sinceStart: ${message.message}");
print("$sinceStart: ${message.problemMessage}");
});
}
@ -218,7 +218,7 @@ class DillLoader extends Loader {
severity ??= message.code.severity;
if (severity == Severity.ignored) return null;
String trace = """
message: ${message.message}
message: ${message.problemMessage}
charOffset: $charOffset
fileUri: $fileUri
severity: $severity

File diff suppressed because it is too large Load diff

View file

@ -1066,7 +1066,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
errorReporter.report(locatedMessageActualError);
}
return new UnevaluatedConstant(
new InvalidExpression(result.message.message));
new InvalidExpression(result.message.problemMessage));
}
if (result is _AbortDueToThrowConstant) {
final Object value = result.throwValue;
@ -1090,7 +1090,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
createLocatedMessage(node, messageConstEvalStartingPoint);
errorReporter.report(locatedMessage, contextMessages);
}
return new UnevaluatedConstant(new InvalidExpression(message.message));
return new UnevaluatedConstant(
new InvalidExpression(message.problemMessage));
}
if (result is _AbortDueToInvalidExpressionConstant) {
return new UnevaluatedConstant(
@ -4534,7 +4535,7 @@ class SimpleErrorReporter implements ErrorReporter {
}
void _report(LocatedMessage message) {
reportMessage(message.uri, message.charOffset, message.message);
reportMessage(message.uri, message.charOffset, message.problemMessage);
}
void reportMessage(Uri? uri, int offset, String message) {

View file

@ -525,6 +525,6 @@ class LabeledNode {
? templateTypeOrigin.withArguments(toString(), importUri)
: templateTypeOriginWithFileUri.withArguments(
toString(), importUri, fileUri);
return "\n - " + message.message;
return "\n - " + message.problemMessage;
}
}

View file

@ -35,7 +35,7 @@ class DebugAbort {
.withoutLocation();
@override
String toString() => "DebugAbort: ${message.message}";
String toString() => "DebugAbort: ${message.problemMessage}";
}
/// Used to report an internal error.

View file

@ -1334,7 +1334,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
default:
if (member is InvalidTypeDeclarationBuilder) {
unserializableExports ??= <String, String>{};
unserializableExports![name] = member.message.message;
unserializableExports![name] = member.message.problemMessage;
} else {
// Eventually (in #buildBuilder) members aren't added to the
// library if the have 'next' pointers, so don't add them as

View file

@ -401,7 +401,7 @@ class SourceLoader extends Loader {
double ms = elapsed.inMicroseconds / Duration.microsecondsPerMillisecond;
Message message = template.withArguments(
libraryCount, byteCount, ms, byteCount / ms, ms / libraryCount);
print("$sinceStart: ${message.message}");
print("$sinceStart: ${message.problemMessage}");
});
}
@ -442,7 +442,7 @@ class SourceLoader extends Loader {
severity ??= message.code.severity;
if (severity == Severity.ignored) return null;
String trace = """
message: ${message.message}
message: ${message.problemMessage}
charOffset: $charOffset
fileUri: $fileUri
severity: $severity
@ -661,7 +661,8 @@ severity: $severity
return utf8.encode(defaultDartTypedDataSource);
default:
return utf8.encode(message == null ? "" : "/* ${message.message} */");
return utf8
.encode(message == null ? "" : "/* ${message.problemMessage} */");
}
}

View file

@ -237,7 +237,7 @@ class SourceTypeAliasBuilder extends TypeAliasBuilderImpl {
return unhandled(
templateTypeArgumentMismatch
.withArguments(typeVariablesCount)
.message,
.problemMessage,
"buildTypeArguments",
-1,
null);

View file

@ -272,8 +272,9 @@ class TypeInferrerImpl implements TypeInferrer {
Arguments arguments;
// ignore: unnecessary_null_comparison
if (errorMessage != null) {
arguments = new Arguments(
[new StringLiteral(errorMessage.message)..fileOffset = fileOffset])
arguments = new Arguments([
new StringLiteral(errorMessage.problemMessage)..fileOffset = fileOffset
])
..fileOffset = fileOffset;
} else {
arguments = new Arguments([])..fileOffset = fileOffset;

View file

@ -734,7 +734,7 @@ String errorsToText(List<FormattedMessage> errors, {bool useCodes: false}) {
if (useCodes) {
return errors.map((m) => m.code).join(',');
} else {
return errors.map((m) => m.message).join(',');
return errors.map((m) => m.problemMessage).join(',');
}
}

View file

@ -89,11 +89,11 @@ class ExtensionsDataComputer extends DataComputer<Features> {
Id id, List<FormattedMessage> errors) {
Features features = new Features();
for (FormattedMessage error in errors) {
if (error.message.contains(',')) {
if (error.problemMessage.contains(',')) {
// TODO(johnniwinther): Support escaping of , in Features.
features.addElement(Tags.errors, error.code);
} else {
features.addElement(Tags.errors, error.message);
features.addElement(Tags.errors, error.problemMessage);
}
}
return features;

View file

@ -54,7 +54,7 @@ void main() {
}
Set<String> testedSubtools = new Set<String>.from(subtools)
.difference(new Set<String>.from(unsafeTools));
String usage = messageFastaUsageShort.message;
String usage = messageFastaUsageShort.problemMessage;
Map expectations = {
"abcompile": {
"exitCode": 1,

View file

@ -20,9 +20,10 @@ import 'package:test/test.dart'
test;
import 'package:front_end/src/api_prototype/front_end.dart'
show CompilerOptions;
show CompilerOptions, DiagnosticMessage;
import 'package:front_end/src/fasta/fasta_codes.dart' show messageMissingMain;
import 'package:front_end/src/fasta/fasta_codes.dart'
show FormattedMessage, messageMissingMain;
import 'package:front_end/src/fasta/kernel/utils.dart' show serializeComponent;
@ -84,10 +85,11 @@ void main() {
});
test('compiler requires a main method', () async {
var errors = [];
var errors = <DiagnosticMessage>[];
var options = new CompilerOptions()..onDiagnostic = errors.add;
await compileScript('a() => print("hi");', options: options);
expect(errors.first.message, messageMissingMain.message);
expect((errors.first as FormattedMessage).problemMessage,
messageMissingMain.problemMessage);
});
test('generated program contains source-info', () async {

View file

@ -23,7 +23,7 @@ void main() {
for (int i = 0; i < Severity.values.length; i++) {
Severity severity = Severity.values[i];
Code code = new Code("MyCodeName");
Message message = new Message(code, message: '');
Message message = new Message(code, problemMessage: '');
LocatedMessage locatedMessage1 =
new LocatedMessage(Uri.parse("what:ever/fun_1.dart"), 117, 2, message);
FormattedMessage formattedMessage2 = new FormattedMessage(

View file

@ -526,9 +526,9 @@ class ParserTestListenerWithMessageFormatting extends ParserTestListener {
location,
length,
shortName,
message.message));
message.problemMessage));
} else {
errors.add(message.message);
errors.add(message.problemMessage);
}
super.handleRecoverableError(message, startToken, endToken);

View file

@ -323,7 +323,7 @@ class ProcessedOptionsTest {
}
Future<void> test_getUriTranslator_noPackages() async {
var errors = [];
var errors = <DiagnosticMessage>[];
// .packages file should be ignored.
fileSystem
.entityForUri(Uri.parse('org-dartlang-test:///.packages'))
@ -335,7 +335,7 @@ class ProcessedOptionsTest {
var processed = new ProcessedOptions(options: raw);
var uriTranslator = await processed.getUriTranslator();
expect(uriTranslator.packages.packages, isEmpty);
expect(errors.single.message,
expect((errors.single as FormattedMessage).problemMessage,
startsWith(_stringPrefixOf(templateCantReadFile)));
}
@ -343,13 +343,14 @@ class ProcessedOptionsTest {
fileSystem
.entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
.writeAsStringSync('main(){}\n');
var errors = [];
var errors = <DiagnosticMessage>[];
var raw = new CompilerOptions()
..fileSystem = fileSystem
..onDiagnostic = errors.add;
var options = new ProcessedOptions(options: raw);
var result = await options.validateOptions();
expect(errors.single.message, messageMissingInput.message);
expect((errors.single as FormattedMessage).problemMessage,
messageMissingInput.problemMessage);
expect(result, isFalse);
}
@ -397,7 +398,7 @@ class ProcessedOptionsTest {
.entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
.writeAsStringSync('main(){}\n');
var sdkRoot = Uri.parse('org-dartlang-test:///sdk/root');
var errors = [];
var errors = <DiagnosticMessage>[];
var raw = new CompilerOptions()
..sdkRoot = sdkRoot
..fileSystem = fileSystem
@ -405,7 +406,7 @@ class ProcessedOptionsTest {
var options =
new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
expect(await options.validateOptions(), isFalse);
expect(errors.first.message,
expect((errors.first as FormattedMessage).problemMessage,
startsWith(_stringPrefixOf(templateSdkRootNotFound)));
}
@ -433,7 +434,7 @@ class ProcessedOptionsTest {
.entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
.writeAsStringSync('main(){}\n');
var sdkSummary = Uri.parse('org-dartlang-test:///sdk/root/outline.dill');
var errors = [];
var errors = <DiagnosticMessage>[];
var raw = new CompilerOptions()
..sdkSummary = sdkSummary
..fileSystem = fileSystem
@ -441,7 +442,7 @@ class ProcessedOptionsTest {
var options =
new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
expect(await options.validateOptions(), isFalse);
expect(errors.single.message,
expect((errors.single as FormattedMessage).problemMessage,
startsWith(_stringPrefixOf(templateSdkSummaryNotFound)));
}
@ -474,7 +475,7 @@ class ProcessedOptionsTest {
fileSystem
.entityForUri(Uri.parse('org-dartlang-test:///foo.dart'))
.writeAsStringSync('main(){}\n');
var errors = [];
var errors = <DiagnosticMessage>[];
var raw = new CompilerOptions()
..sdkSummary = sdkSummary
..fileSystem = fileSystem
@ -482,14 +483,14 @@ class ProcessedOptionsTest {
var options =
new ProcessedOptions(options: raw, inputs: [Uri.parse('foo.dart')]);
expect(await options.validateOptions(), isFalse);
expect(errors.single.message,
expect((errors.single as FormattedMessage).problemMessage,
startsWith(_stringPrefixOf(templateSdkSummaryNotFound)));
}
/// Returns the longest prefix of the text in a message template that doesn't
/// mention a template argument.
String _stringPrefixOf(Template template) {
var messageTemplate = template.messageTemplate;
var messageTemplate = template.problemMessageTemplate;
var index = messageTemplate.indexOf('#');
var prefix = messageTemplate.substring(0, index - 1);

View file

@ -210,7 +210,7 @@ class DynamicVisitor extends StaticTypeVisitorBase {
// add ' (allowed)' to an existing message!
LocatedMessage locatedMessage = message.locatedMessage;
String newMessageText =
'${locatedMessage.messageObject.message} (allowed)';
'${locatedMessage.messageObject.problemMessage} (allowed)';
message = locatedMessage.withFormatting(
format(
new LocatedMessage(
@ -218,8 +218,9 @@ class DynamicVisitor extends StaticTypeVisitorBase {
locatedMessage.charOffset,
locatedMessage.length,
new Message(locatedMessage.messageObject.code,
message: newMessageText,
tip: locatedMessage.messageObject.tip,
problemMessage: newMessageText,
correctionMessage:
locatedMessage.messageObject.correctionMessage,
arguments: locatedMessage.messageObject.arguments)),
Severity.warning,
location:

View file

@ -18,7 +18,7 @@ void main() {
String expected =
" ${Flags.target}=${(targets.keys.toList()..sort()).join('|')}";
MessageCode code = messageFastaUsageLong;
if (!code.message.contains(expected)) {
if (!code.problemMessage.contains(expected)) {
throw "Error: ${code.name} in pkg/front_end/messages.yaml doesn't contain"
" '$expected'.";
}

View file

@ -107,7 +107,7 @@ ProcessedOptions analyzeCommandLine(String programName,
final bool verbose = Options.verbose.read(parsedOptions);
if (help) {
print(computeUsage(programName, verbose).message);
print(computeUsage(programName, verbose).problemMessage);
exit(0);
}
@ -335,7 +335,7 @@ Future<T> withGlobalOptions<T>(
return CompilerContext.runWithOptions<T>(options, (CompilerContext c) {
if (problem != null) {
print(computeUsage(programName, options.verbose).message);
print(computeUsage(programName, options.verbose).problemMessage);
PlainAndColorizedString formatted =
c.format(problem.message.withoutLocation(), Severity.error);
String formattedText;
@ -355,9 +355,10 @@ Future<T> withGlobalOptions<T>(
Message computeUsage(String programName, bool verbose) {
String basicUsage = "Usage: $programName [options] dartfile\n";
String? summary;
String options =
(verbose ? messageFastaUsageLong.message : messageFastaUsageShort.message)
.trim();
String options = (verbose
? messageFastaUsageLong.problemMessage
: messageFastaUsageShort.problemMessage)
.trim();
switch (programName) {
case "outline":
summary =
@ -398,7 +399,7 @@ Future<T> runProtectedFromAbort<T>(Future<T> Function() action,
try {
return await action();
} on DebugAbort catch (e) {
print(e.message.message);
print(e.message.problemMessage);
// DebugAbort should never happen in production code, so we want test.py to
// treat this as a crash which is signalled by exiting with 255.

View file

@ -430,10 +430,10 @@ Template compileTemplate(String name, int? index, String? problemMessage,
if (parameters.isEmpty && conversions.isEmpty && arguments.isEmpty) {
// ignore: unnecessary_null_comparison
if (problemMessage != null) {
codeArguments.add('message: r"""$problemMessage"""');
codeArguments.add('problemMessage: r"""$problemMessage"""');
}
if (correctionMessage != null) {
codeArguments.add('tip: r"""$correctionMessage"""');
codeArguments.add('correctionMessage: r"""$correctionMessage"""');
}
return new Template("""
@ -449,10 +449,11 @@ const MessageCode message$name =
List<String> templateArguments = <String>[];
// ignore: unnecessary_null_comparison
if (problemMessage != null) {
templateArguments.add('messageTemplate: r"""$problemMessage"""');
templateArguments.add('problemMessageTemplate: r"""$problemMessage"""');
}
if (correctionMessage != null) {
templateArguments.add('tipTemplate: r"""$correctionMessage"""');
templateArguments
.add('correctionMessageTemplate: r"""$correctionMessage"""');
}
templateArguments.add("withArguments: _withArguments$name");
@ -462,9 +463,10 @@ const MessageCode message$name =
if (hasLabeler) {
message += " + labeler.originMessages";
}
messageArguments.add("message: ${message}");
messageArguments.add("problemMessage: ${message}");
if (correctionMessage != null) {
messageArguments.add("tip: ${interpolate(correctionMessage)}");
messageArguments
.add("correctionMessage: ${interpolate(correctionMessage)}");
}
messageArguments.add("arguments: { ${arguments.join(', ')} }");

View file

@ -653,7 +653,7 @@ String _createParseErrorMessage(kernel.Source source, int position,
location,
endToken.charEnd - startToken.charOffset,
source.importUri!.toString(),
message.message);
message.problemMessage);
}
CommentString extractComments(CommentToken comment, String rawString) {