quick fix for EXTRANEOUS_MODIFIER

Change-Id: I8ee50febb04758a227a25aa8635ec1396ca180d6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/367640
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
This commit is contained in:
pq 2024-05-22 17:50:42 +00:00 committed by Commit Queue
parent 874f291ade
commit 4015ad7b2b
4 changed files with 108 additions and 5 deletions

View file

@ -32,9 +32,11 @@ class RemoveExtraModifier extends ResolvedCorrectionProducer {
var problemMessage = diagnostic.problemMessage;
// Extract the modifier.
// Example: "Can't have modifier 'abstract' here."
var message = problemMessage.messageText(includeUrl: false);
var modifierStart = message.indexOf("'") + 1;
var modifierStop = message.indexOf("'", modifierStart);
var modifierStart = message.indexOf(" '") + 2;
var modifierStop = message.indexOf("' ", modifierStart);
_modifierName = message.substring(modifierStart, modifierStop);

View file

@ -2848,9 +2848,7 @@ ParserErrorCode.EXTERNAL_TYPEDEF:
notes: |-
Remove the `external` keyword.
ParserErrorCode.EXTRANEOUS_MODIFIER:
status: needsFix
notes: |-
Remove the extraneous keyword.
status: hasFix
ParserErrorCode.EXTRANEOUS_MODIFIER_IN_EXTENSION_TYPE:
status: needsEvaluation
ParserErrorCode.EXTRANEOUS_MODIFIER_IN_PRIMARY_CONSTRUCTOR:

View file

@ -1348,6 +1348,9 @@ final _builtInNonLintProducers = <ErrorCode, List<ProducerGenerator>>{
ParserErrorCode.EXTENSION_DECLARES_CONSTRUCTOR: [
RemoveConstructor.new,
],
ParserErrorCode.EXTRANEOUS_MODIFIER: [
RemoveExtraModifier.new,
],
ParserErrorCode.GETTER_WITH_PARAMETERS: [
RemoveParametersInGetterDeclaration.new,
],

View file

@ -51,6 +51,78 @@ class RemoveExtraModifierTest extends FixProcessorTest {
@override
FixKind get kind => DartFixKind.REMOVE_EXTRA_MODIFIER;
Future<void> test_abstractEnum() async {
await resolveTestCode(r'''
abstract enum E {ONE}
''');
await assertHasFix('''
enum E {ONE}
''');
}
Future<void> test_abstractTopLevelFunction_function() async {
await resolveTestCode(r'''
abstract f(v) {}
''');
await assertHasFix('''
f(v) {}
''');
}
Future<void> test_abstractTopLevelFunction_getter() async {
await resolveTestCode(r'''
abstract get m {}
''');
await assertHasFix('''
get m {}
''');
}
Future<void> test_abstractTopLevelFunction_setter() async {
await resolveTestCode(r'''
abstract set m(v) {}
''');
await assertHasFix('''
set m(v) {}
''');
}
Future<void> test_abstractTopLevelVariable() async {
await resolveTestCode(r'''
abstract Object? o;
''');
await assertHasFix('''
Object? o;
''');
}
Future<void> test_abstractTypeDef() async {
await resolveTestCode(r'''
abstract typedef F();
''');
await assertHasFix('''
typedef F();
''');
}
Future<void> test_covariantTopLevelDeclaration_class() async {
await resolveTestCode(r'''
covariant class C {}
''');
await assertHasFix('''
class C {}
''');
}
Future<void> test_covariantTopLevelDeclaration_enum() async {
await resolveTestCode(r'''
covariant enum E { v }
''');
await assertHasFix('''
enum E { v }
''');
}
Future<void> test_duplicatedModifier() async {
await resolveTestCode(r'''
f() {
@ -95,6 +167,34 @@ augment abstract class A {}
augment library 'a.dart';
augment class A {}
''');
}
Future<void> test_localFunctionDeclarationModifier_abstract() async {
await resolveTestCode(r'''
class C {
m() {
abstract f() {}
f();
}
}
''');
await assertHasFix('''
class C {
m() {
f() {}
f();
}
}
''');
}
Future<void> test_staticTopLevelDeclaration_enum() async {
await resolveTestCode(r'''
static enum E { v }
''');
await assertHasFix('''
enum E { v }
''');
}
}