1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-08 12:06:26 +00:00

Separate severity for context messages

Change-Id: I8c0f9f0eae141e38e1f57afce4a30b6f95e8e412
Reviewed-on: https://dart-review.googlesource.com/43721
Reviewed-by: Peter von der Ahé <ahe@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
This commit is contained in:
Aske Simon Christensen 2018-02-26 16:24:13 +00:00 committed by commit-bot@chromium.org
parent af527dd769
commit bb088347f0
14 changed files with 102 additions and 66 deletions

View File

@ -99,6 +99,9 @@ void reportFrontEndMessage(
case fe.Severity.nit:
reporter.reportHintMessage(span, kind, {'text': message.message});
break;
case fe.Severity.context:
reporter.reportInfo(span, kind, {'text': message.message});
break;
default:
throw new UnimplementedError('unhandled severity ${message.severity}');
}

View File

@ -12,7 +12,7 @@ import 'dart:io' show exitCode;
import 'package:kernel/ast.dart' show Location;
import 'colors.dart' show cyan, magenta, red;
import 'colors.dart' show cyan, green, magenta, red;
import 'compiler_context.dart' show CompilerContext;
@ -68,6 +68,10 @@ String formatInternal(
text = magenta(text);
break;
case Severity.context:
text = green(text);
break;
default:
return unexpected("$severity", "formatInternal", -1, null);
}
@ -115,6 +119,7 @@ bool isHidden(Severity severity) {
switch (severity) {
case Severity.error:
case Severity.internalProblem:
case Severity.context:
return false;
case Severity.nit:
@ -144,6 +149,9 @@ bool shouldThrowOn(Severity severity) {
case Severity.warning:
return CompilerContext.current.options.throwOnWarningsForDebugging;
case Severity.context:
return false;
default:
return unexpected("$severity", "shouldThrowOn", -1, null);
}
@ -164,6 +172,9 @@ String severityName(Severity severity, {bool capitalized: false}) {
case Severity.warning:
return capitalized ? "Warning" : "warning";
case Severity.context:
return capitalized ? "Context" : "context";
default:
return unexpected("$severity", "severityName", -1, null);
}
@ -204,6 +215,7 @@ bool isCompileTimeError(Severity severity) {
case Severity.nit:
case Severity.warning:
case Severity.context:
return false;
}
return unexpected("$severity", "isCompileTimeError", -1, null);

View File

@ -288,6 +288,7 @@ const Code<Null> codeCandidateFound = messageCandidateFound;
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageCandidateFound = const MessageCode("CandidateFound",
severity: Severity.context,
message: r"""Found this candidate, but the arguments don't match.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@ -302,9 +303,9 @@ const Template<Message Function(String name)>
const Code<Message Function(String name)>
codeCandidateFoundIsDefaultConstructor =
const Code<Message Function(String name)>(
"CandidateFoundIsDefaultConstructor",
templateCandidateFoundIsDefaultConstructor,
);
"CandidateFoundIsDefaultConstructor",
templateCandidateFoundIsDefaultConstructor,
severity: Severity.context);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsCandidateFoundIsDefaultConstructor(String name) {
@ -635,7 +636,7 @@ const Code<Null> codeConflictsWithTypeVariableCause =
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageConflictsWithTypeVariableCause = const MessageCode(
"ConflictsWithTypeVariableCause",
severity: Severity.error,
severity: Severity.context,
message: r"""This is the type variable.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@ -709,6 +710,7 @@ const Code<Null> codeConstConstructorNonFinalFieldCause =
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageConstConstructorNonFinalFieldCause = const MessageCode(
"ConstConstructorNonFinalFieldCause",
severity: Severity.context,
message: r"""Field isn't final, but constructor is 'const'.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@ -984,9 +986,8 @@ const Template<Message Function(String name)>
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(String name)> codeDeferredPrefixDuplicatedCause =
const Code<Message Function(String name)>(
"DeferredPrefixDuplicatedCause",
templateDeferredPrefixDuplicatedCause,
);
"DeferredPrefixDuplicatedCause", templateDeferredPrefixDuplicatedCause,
severity: Severity.context);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsDeferredPrefixDuplicatedCause(String name) {
@ -1292,9 +1293,8 @@ const Template<Message Function(String name)>
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(String name)> codeDuplicatedParameterNameCause =
const Code<Message Function(String name)>(
"DuplicatedParameterNameCause",
templateDuplicatedParameterNameCause,
);
"DuplicatedParameterNameCause", templateDuplicatedParameterNameCause,
severity: Severity.context);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsDuplicatedParameterNameCause(String name) {
@ -2083,7 +2083,7 @@ const Code<Message Function(String name)>
const Code<Message Function(String name)>(
"FinalInstanceVariableAlreadyInitializedCause",
templateFinalInstanceVariableAlreadyInitializedCause,
severity: Severity.errorLegacyWarning);
severity: Severity.context);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsFinalInstanceVariableAlreadyInitializedCause(
@ -2263,9 +2263,9 @@ const Template<Message Function(String name)>
const Code<Message Function(String name)>
codeIllegalMixinDueToConstructorsCause =
const Code<Message Function(String name)>(
"IllegalMixinDueToConstructorsCause",
templateIllegalMixinDueToConstructorsCause,
);
"IllegalMixinDueToConstructorsCause",
templateIllegalMixinDueToConstructorsCause,
severity: Severity.context);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsIllegalMixinDueToConstructorsCause(String name) {
@ -3867,9 +3867,8 @@ const Template<Message Function(String name)> templateOverriddenMethodCause =
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(String name)> codeOverriddenMethodCause =
const Code<Message Function(String name)>(
"OverriddenMethodCause",
templateOverriddenMethodCause,
);
"OverriddenMethodCause", templateOverriddenMethodCause,
severity: Severity.context);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsOverriddenMethodCause(String name) {
@ -4262,6 +4261,7 @@ const Code<Null> codePatchClassOrigin = messagePatchClassOrigin;
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messagePatchClassOrigin = const MessageCode(
"PatchClassOrigin",
severity: Severity.context,
message: r"""This is the origin class.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@ -4288,6 +4288,7 @@ const Code<Null> codePatchDeclarationOrigin = messagePatchDeclarationOrigin;
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messagePatchDeclarationOrigin = const MessageCode(
"PatchDeclarationOrigin",
severity: Severity.context,
message: r"""This is the origin declaration.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@ -5239,10 +5240,9 @@ const Template<Message Function(String name)>
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Code<Message Function(String name)> codeTypeVariableDuplicatedNameCause =
const Code<Message Function(String name)>(
"TypeVariableDuplicatedNameCause",
templateTypeVariableDuplicatedNameCause,
);
const Code<Message Function(String name)>("TypeVariableDuplicatedNameCause",
templateTypeVariableDuplicatedNameCause,
severity: Severity.context);
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
Message _withArgumentsTypeVariableDuplicatedNameCause(String name) {

View File

@ -3613,12 +3613,10 @@ class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
fasta.templateFinalInstanceVariableAlreadyInitialized
.withArguments(name),
offset,
noLength);
addProblem(
fasta.templateFinalInstanceVariableAlreadyInitializedCause
.withArguments(name),
builder.charOffset,
noLength);
noLength,
context: fasta.templateFinalInstanceVariableAlreadyInitializedCause
.withArguments(name)
.withLocation(uri, builder.charOffset, noLength));
Builder constructor =
library.loader.getDuplicatedFieldInitializerError();
return buildInvalidInitializer(
@ -3814,13 +3812,16 @@ class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
}
@override
void addCompileTimeError(Message message, int charOffset, int length) {
library.addCompileTimeError(message, charOffset, length, uri);
void addCompileTimeError(Message message, int charOffset, int length,
{LocatedMessage context}) {
library.addCompileTimeError(message, charOffset, length, uri,
context: context);
}
@override
void addProblem(Message message, int charOffset, int length) {
library.addProblem(message, charOffset, length, uri);
void addProblem(Message message, int charOffset, int length,
{LocatedMessage context}) {
library.addProblem(message, charOffset, length, uri, context: context);
}
@override
@ -3830,7 +3831,7 @@ class BodyBuilder<Arguments> extends ScopeListener<JumpTarget>
// take two messages: one to use when a constant expression is
// required and one to use otherwise.
if (constantExpressionRequired) {
addCompileTimeError(message, charOffset, length);
addCompileTimeError(message, charOffset, length, context: context);
} else {
library.addProblem(message, charOffset, length, uri, context: context);
}

View File

@ -233,12 +233,11 @@ class KernelLibraryBuilder
TypeVariableBuilder existing = typeVariablesByName[tv.name];
if (existing != null) {
addCompileTimeError(messageTypeVariableDuplicatedName, tv.charOffset,
tv.name.length, fileUri);
addCompileTimeError(
templateTypeVariableDuplicatedNameCause.withArguments(tv.name),
existing.charOffset,
existing.name.length,
fileUri);
tv.name.length, fileUri,
context: templateTypeVariableDuplicatedNameCause
.withArguments(tv.name)
.withLocation(
fileUri, existing.charOffset, existing.name.length));
} else {
typeVariablesByName[tv.name] = tv;
if (owner is ClassBuilder) {

View File

@ -643,6 +643,8 @@ class KernelTarget extends TargetImplementation {
if (constructor.isConst && nonFinalFields.isNotEmpty) {
builder.addCompileTimeError(messageConstConstructorNonFinalField,
constructor.fileOffset, noLength);
// TODO(askesc): Put as context argument when multiple contexts
// are supported.
for (Field field in nonFinalFields) {
builder.addCompileTimeError(
messageConstConstructorNonFinalFieldCause,

View File

@ -248,7 +248,7 @@ severity: $severity
target.context
.report(message.withLocation(fileUri, charOffset, length), severity);
if (context != null) {
target.context.report(context, severity);
target.context.report(context, Severity.context);
}
recordMessage(severity, message, charOffset, length, fileUri,
context: context);

View File

@ -5,9 +5,10 @@
library fasta.severity;
enum Severity {
context,
error,
errorLegacyWarning,
internalProblem,
nit,
warning,
errorLegacyWarning,
}

View File

@ -15,6 +15,7 @@ import '../combinator.dart' show Combinator;
import '../fasta_codes.dart'
show
Message,
LocatedMessage,
messageExpectedBlockToSkip,
messageInterpolationInUri,
messageOperatorWithOptionalFormals,
@ -786,12 +787,11 @@ class OutlineBuilder extends UnhandledListener {
addCompileTimeError(
templateDuplicatedParameterName.withArguments(formals[1].name),
formals[1].charOffset,
formals[1].name.length);
addCompileTimeError(
templateDuplicatedParameterNameCause
.withArguments(formals[1].name),
formals[0].charOffset,
formals[0].name.length);
formals[1].name.length,
context: templateDuplicatedParameterNameCause
.withArguments(formals[1].name)
.withLocation(
uri, formals[0].charOffset, formals[0].name.length));
}
} else if (formals.length > 2) {
Map<String, FormalParameterBuilder> seenNames =
@ -1102,12 +1102,15 @@ class OutlineBuilder extends UnhandledListener {
}
@override
void addCompileTimeError(Message message, int charOffset, int length) {
library.addCompileTimeError(message, charOffset, length, uri);
void addCompileTimeError(Message message, int charOffset, int length,
{LocatedMessage context}) {
library.addCompileTimeError(message, charOffset, length, uri,
context: context);
}
void addProblem(Message message, int charOffset, int length) {
library.addProblem(message, charOffset, length, uri);
void addProblem(Message message, int charOffset, int length,
{LocatedMessage context}) {
library.addProblem(message, charOffset, length, uri, context: context);
}
/// Return the documentation comment for the entity that starts at the

View File

@ -444,12 +444,10 @@ abstract class SourceLibraryBuilder<T extends TypeBuilder, R>
templateDeferredPrefixDuplicated.withArguments(name),
deferred.charOffset,
noLength,
fileUri);
addCompileTimeError(
templateDeferredPrefixDuplicatedCause.withArguments(name),
other.charOffset,
noLength,
fileUri);
fileUri,
context: templateDeferredPrefixDuplicatedCause
.withArguments(name)
.withLocation(fileUri, other.charOffset, noLength));
}
return existing
..exportScope.merge(builder.exportScope,

View File

@ -521,12 +521,11 @@ class SourceLoader<L> extends Loader<L> {
templateIllegalMixinDueToConstructors
.withArguments(builder.fullNameForErrors),
cls.charOffset,
noLength);
builder.addCompileTimeError(
templateIllegalMixinDueToConstructorsCause
.withArguments(builder.fullNameForErrors),
constructory.charOffset,
noLength);
noLength,
context: templateIllegalMixinDueToConstructorsCause
.withArguments(builder.fullNameForErrors)
.withLocation(constructory.fileUri,
constructory.charOffset, noLength));
}
}
}
@ -782,6 +781,10 @@ class SourceLoader<L> extends Loader<L> {
// Use a property name expressing that, in case it slips through.
severityString = "unresolved severity";
break;
case Severity.context:
severityString = "context";
break;
}
instrumentation.record(
fileUri,

View File

@ -946,9 +946,11 @@ MethodNotFound:
CandidateFound:
template: "Found this candidate, but the arguments don't match."
severity: CONTEXT
CandidateFoundIsDefaultConstructor:
template: "The class '#name' has a constructor that takes no arguments."
severity: CONTEXT
TooFewArgumentsToFunction:
template: "Too few positional arguments to function: #count required, #count2 given."
@ -1283,6 +1285,7 @@ IllegalMixinDueToConstructors:
IllegalMixinDueToConstructorsCause:
template: "This constructor prevents using '#name' as a mixin."
severity: CONTEXT
ConflictsWithConstructor:
template: "Conflicts with constructor '#name'."
@ -1313,8 +1316,8 @@ ConflictsWithTypeVariable:
severity: ERROR
ConflictsWithTypeVariableCause:
template: "This is the type variable."
severity: ERROR
template: "This is the type variable."
severity: CONTEXT
IllegalMixin:
template: "The type '#name' can't be mixed in."
@ -1325,6 +1328,7 @@ OverrideTypeVariablesMismatch:
OverriddenMethodCause:
template: "This is the overriden method ('#name')."
severity: CONTEXT
OverrideMismatchNamedParameter:
template: "The method '#name' doesn't have the named parameter '#name2' of overriden method '#name3'."
@ -1369,6 +1373,7 @@ TypeVariableDuplicatedName:
TypeVariableDuplicatedNameCause:
template: "The other type variable named '#name'."
severity: CONTEXT
TypeVariableSameNameAsEnclosing:
template: "A type variable can't have the same name as its enclosing declaration."
@ -1538,6 +1543,7 @@ DeferredPrefixDuplicated:
DeferredPrefixDuplicatedCause:
template: "'#name' is used here."
severity: CONTEXT
TypeArgumentsOnTypeVariable:
template: "Can't use type arguments with type variable '#name'."
@ -1559,6 +1565,7 @@ DuplicatedParameterName:
DuplicatedParameterNameCause:
template: "Other parameter named '#name'."
severity: CONTEXT
MemberWithSameNameAsClass:
template: "A class member can't have the same name as the enclosing class."
@ -1675,7 +1682,7 @@ FinalInstanceVariableAlreadyInitialized:
FinalInstanceVariableAlreadyInitializedCause:
template: "'#name' was initialized here."
severity: ERROR_LEGACY_WARNING
severity: CONTEXT
TypeVariableInStaticContext:
template: "Type variables can't be used in static members."
@ -1709,6 +1716,7 @@ ConstConstructorNonFinalField:
ConstConstructorNonFinalFieldCause:
template: "Field isn't final, but constructor is 'const'."
severity: CONTEXT
AccessError:
template: "Access error: '#name'."
@ -1829,12 +1837,14 @@ PatchClassTypeVariablesMismatch:
PatchClassOrigin:
template: "This is the origin class."
severity: CONTEXT
PatchDeclarationMismatch:
template: "This patch doesn't match origin declaration."
PatchDeclarationOrigin:
template: "This is the origin declaration."
severity: CONTEXT
PatchInjectionFailed:
template: "Can't inject '#name' into '#uri'."

View File

@ -16,6 +16,7 @@ Map<String, String> severityEnumNames = <String, String>{
'ERROR': 'error',
'ERROR_LEGACY_WARNING': 'errorLegacyWarning',
'INTERNAL_PROBLEM': 'internalProblem',
'CONTEXT': 'context',
};
main(List<String> arguments) async {

View File

@ -102,6 +102,9 @@ abstract class Compiler {
case Severity.warning:
if (!suppressWarnings) stderr.writeln(formatted);
break;
case Severity.context:
stderr.writeln(formatted);
break;
}
};
}