diff --git a/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart b/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart index 2a562619f40..a99d3ba3ec6 100644 --- a/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart +++ b/pkg/analysis_server/lib/src/handler/legacy/edit_bulk_fixes.dart @@ -9,7 +9,9 @@ import 'package:analysis_server/src/handler/legacy/legacy_handler.dart'; import 'package:analysis_server/src/services/correction/bulk_fix_processor.dart'; import 'package:analysis_server_plugin/src/correction/dart_change_workspace.dart'; import 'package:analyzer/exception/exception.dart'; +import 'package:analyzer/src/analysis_rule/analysis_rule.dart'; import 'package:analyzer/src/dart/analysis/analysis_context_collection.dart'; +import 'package:analyzer/src/lint/registry.dart'; /// The handler for the `edit.bulkFixes` request. class EditBulkFixes extends LegacyHandler { @@ -46,6 +48,28 @@ class EditBulkFixes extends LegacyHandler { sdkPath: server.sdkPath, byteStore: server.byteStore, withFineDependencies: true, + updateAnalysisOptions4: codes != null && codes.isNotEmpty + ? ({required analysisOptions}) { + var rules = []; + for (var code in codes) { + var rule = Registry.ruleRegistry.getRule(code); + if (rule != null) { + rules.add(rule); + } + } + if (rules.isNotEmpty) { + analysisOptions.lint = true; + var existingNames = analysisOptions.lintRules + .map((rule) => rule.name) + .toSet(); + for (var rule in rules) { + if (!existingNames.contains(rule.name)) { + analysisOptions.lintRules.add(rule); + } + } + } + } + : null, ); var workspace = DartChangeWorkspace( collection.contexts.map((c) => c.currentSession).toList(), diff --git a/pkg/analysis_server/test/edit/bulk_fixes_test.dart b/pkg/analysis_server/test/edit/bulk_fixes_test.dart index bbef24513a2..091a3bd8846 100644 --- a/pkg/analysis_server/test/edit/bulk_fixes_test.dart +++ b/pkg/analysis_server/test/edit/bulk_fixes_test.dart @@ -78,16 +78,26 @@ import 'a.dart'; addTestFile(''' import 'a.dart'; - -class A { - A f() => new A(); -} '''); var details = await _getBulkFixDetails(); expect(details, isEmpty); } + Future test_lint_notEnabledInOptions() async { + addDiagnosticCode('unnecessary_new'); + + addTestFile(''' +class A {} +A f() => new A(); +'''); + + await assertEditEquals(testFile, ''' +class A {} +A f() => A(); +'''); + } + Future test_lint_unnecessaryNew() async { newAnalysisOptionsYamlFile(testPackageRootPath, ''' linter: diff --git a/pkg/dartdev/test/commands/fix_test.dart b/pkg/dartdev/test/commands/fix_test.dart index d4e8a2ee849..e7cb68afddd 100644 --- a/pkg/dartdev/test/commands/fix_test.dart +++ b/pkg/dartdev/test/commands/fix_test.dart @@ -344,7 +344,11 @@ linter: expect(result.stderr, isEmpty); expect( result.stdout, - stringContainsInOrderWithVariableBullets(['Nothing to fix!']), + stringContainsInOrderWithVariableBullets([ + 'lib/main.dart', + 'prefer_single_quotes - 1 fix', + '1 fix made in 1 file.', + ]), ); });