From 75617a12c3015f84aaf05d831423f32df49736b7 Mon Sep 17 00:00:00 2001 From: pq Date: Tue, 16 Jul 2024 15:24:07 +0000 Subject: [PATCH] [wildcards] quick fixes for `DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER` Fixes: https://github.com/dart-lang/sdk/issues/56221 Change-Id: Ie599d570bf6a6f13987a4175f955eb522ae20a10 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/375784 Reviewed-by: Brian Wilkerson Commit-Queue: Phil Quitslund --- .../correction/dart/remove_initializer.dart | 17 +++++++++++++--- .../services/correction/dart/remove_late.dart | 11 ++++++++++ .../services/correction/error_fix_status.yaml | 8 +++----- .../src/services/correction/fix_internal.dart | 4 ++++ .../fix/remove_initializer_test.dart | 20 +++++++++++++++++++ .../correction/fix/remove_late_test.dart | 13 ++++++++++++ 6 files changed, 65 insertions(+), 8 deletions(-) diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart index a76a6cf08200..85dfac593086 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_initializer.dart @@ -13,14 +13,25 @@ class RemoveInitializer extends ResolvedCorrectionProducer { @override final CorrectionApplicability applicability; + /// If true, remove the `late` keyword. + final bool _removeLate; + /// Initialize a newly created instance that can't apply bulk and in-file /// fixes. RemoveInitializer({required super.context}) - : applicability = CorrectionApplicability.singleLocation; + : applicability = CorrectionApplicability.singleLocation, + _removeLate = true; /// Initialize a newly created instance that can apply bulk and in-file fixes. RemoveInitializer.bulkFixable({required super.context}) - : applicability = CorrectionApplicability.automatically; + : applicability = CorrectionApplicability.automatically, + _removeLate = true; + + /// Initialize a newly created instance that can't apply bulk and in-file + /// fixes and will not remove the `late` keyword if present. + RemoveInitializer.notLate({required super.context}) + : applicability = CorrectionApplicability.singleLocation, + _removeLate = false; @override FixKind get fixKind => DartFixKind.REMOVE_INITIALIZER; @@ -53,7 +64,7 @@ class RemoveInitializer extends ResolvedCorrectionProducer { ); }); // Delete the `late` keyword if present. - if (variable.isLate) { + if (_removeLate && variable.isLate) { var parent = node.parent; if (parent != null) { await builder.addDartFileEdit(file, (builder) { diff --git a/pkg/analysis_server/lib/src/services/correction/dart/remove_late.dart b/pkg/analysis_server/lib/src/services/correction/dart/remove_late.dart index 60a7153c6517..6f4d24d495f8 100644 --- a/pkg/analysis_server/lib/src/services/correction/dart/remove_late.dart +++ b/pkg/analysis_server/lib/src/services/correction/dart/remove_late.dart @@ -55,6 +55,17 @@ class RemoveLate extends ResolvedCorrectionProducer { } } } + } else { + var grandParent = node.parent?.parent; + if (grandParent is VariableDeclarationList) { + var lateKeyword = grandParent.lateKeyword; + if (lateKeyword != null) { + return _LateKeywordLocation( + lateKeyword: lateKeyword, + nextToken: lateKeyword.next!, + ); + } + } } return null; diff --git a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml index da263a5976e9..3af2ade5b522 100644 --- a/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml +++ b/pkg/analysis_server/lib/src/services/correction/error_fix_status.yaml @@ -45,8 +45,8 @@ # # Stats: # - 42 "needsEvaluation" -# - 307 "needsFix" -# - 441 "hasFix" +# - 306 "needsFix" +# - 442 "hasFix" # - 517 "noFix" AnalysisOptionsErrorCode.INCLUDED_FILE_PARSE_ERROR: @@ -3390,9 +3390,7 @@ WarningCode.DEAD_CODE: WarningCode.DEAD_CODE_CATCH_FOLLOWING_CATCH: status: hasFix WarningCode.DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER: - status: needsFix - notes: |- - Remove the initializer or remove the late keyword. + status: hasFix WarningCode.DEAD_CODE_ON_CATCH_SUBTYPE: status: hasFix WarningCode.DEPRECATED_EXPORT_USE: diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart index f35e0cb581f2..d5a60c37eec3 100644 --- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart +++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart @@ -1607,6 +1607,10 @@ final _builtInNonLintProducers = >{ // a place where it can be reached (when possible). RemoveDeadCode.new, ], + WarningCode.DEAD_CODE_LATE_WILDCARD_VARIABLE_INITIALIZER: [ + RemoveInitializer.notLate, + RemoveLate.new, + ], WarningCode.DEAD_CODE_ON_CATCH_SUBTYPE: [ // TODO(brianwilkerson): Add a fix to move the unreachable catch clause to // a place where it can be reached (when possible). diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart index 1a6aea415875..4cf3da590789 100644 --- a/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart +++ b/pkg/analysis_server/test/src/services/correction/fix/remove_initializer_test.dart @@ -13,9 +13,29 @@ void main() { defineReflectiveSuite(() { defineReflectiveTests(RemoveInitializerBulkTest); defineReflectiveTests(RemoveInitializerTest); + defineReflectiveTests(RemoveDeadWildcardInitializerTest); }); } +@reflectiveTest +class RemoveDeadWildcardInitializerTest extends FixProcessorTest { + @override + FixKind get kind => DartFixKind.REMOVE_INITIALIZER; + + Future test_deadLateWildcardVariableInitializer() async { + await resolveTestCode(''' +f() { + late var _ = 0; +} +'''); + await assertHasFix(''' +f() { + late var _; +} +'''); + } +} + @reflectiveTest class RemoveInitializerBulkTest extends BulkFixProcessorTest { @override diff --git a/pkg/analysis_server/test/src/services/correction/fix/remove_late_test.dart b/pkg/analysis_server/test/src/services/correction/fix/remove_late_test.dart index 3fa9baf5452c..1756e89cb302 100644 --- a/pkg/analysis_server/test/src/services/correction/fix/remove_late_test.dart +++ b/pkg/analysis_server/test/src/services/correction/fix/remove_late_test.dart @@ -38,6 +38,19 @@ class RemoveLateTest extends FixProcessorTest { @override FixKind get kind => DartFixKind.REMOVE_LATE; + Future test_deadLateWildcardVariableInitializer() async { + await resolveTestCode(''' +f() { + late var _ = 0; +} +'''); + await assertHasFix(''' +f() { + var _ = 0; +} +'''); + } + Future test_it() async { await resolveTestCode(''' void f(Object? x) {