[analyzer/linter] Deprecate LintRule.details to avoid new usages

Change-Id: I3d03d5f06901e0a548020522387e8984507a7f4c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/384940
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
diff --git a/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart b/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
index b362aa4..62d845a 100644
--- a/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
+++ b/pkg/analysis_server/lib/src/services/completion/yaml/analysis_options_generator.dart
@@ -106,7 +106,7 @@
     for (var rule in Registry.ruleRegistry.rules) {
       // TODO(pq): consider suggesting internal lints if editing an SDK options file
       if (!rule.state.isInternal) {
-        yield identifier(rule.name, docComplete: rule.details);
+        yield identifier(rule.name, docComplete: rule.description);
       }
     }
   }
diff --git a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
index ca4782c..a0d3f2b 100644
--- a/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
+++ b/pkg/analysis_server/test/src/services/completion/yaml/analysis_options_generator_test.dart
@@ -150,7 +150,7 @@
     var completion = assertSuggestion('annotate_overrides');
     expect(
       completion.docComplete,
-      contains('**DO** annotate overridden methods and fields'),
+      contains('Annotate overridden members.'),
     );
   }
 
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 514a51f..ac847e4 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -195,6 +195,10 @@
 
   /// Description (in markdown format) suitable for display in a detailed lint
   /// description.
+  ///
+  /// This property is deprecated and will be removed in a future release.
+  @Deprecated('Use .description for a short description and consider placing '
+      'long-form documentation on an external website.')
   final String details;
 
   /// Short description suitable for display in console output.
@@ -213,7 +217,7 @@
     required this.name,
     this.categories = const <String>{},
     required this.description,
-    required this.details,
+    this.details = '',
     State? state,
   }) : state = state ?? State.stable();
 
diff --git a/pkg/linter/test/validate_rule_description_format_test.dart b/pkg/linter/test/validate_rule_description_format_test.dart
index 2d24d48..20027f4 100644
--- a/pkg/linter/test/validate_rule_description_format_test.dart
+++ b/pkg/linter/test/validate_rule_description_format_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// ignore_for_file: deprecated_member_use
+
 import 'package:analyzer/src/lint/registry.dart';
 import 'package:test/test.dart';
 
diff --git a/pkg/linter/tool/machine.dart b/pkg/linter/tool/machine.dart
index 9e20cf5..d30e6f3 100644
--- a/pkg/linter/tool/machine.dart
+++ b/pkg/linter/tool/machine.dart
@@ -85,6 +85,7 @@
         ],
         'fixStatus':
             fixStatusMap[rule.lintCodes.first.uniqueName] ?? 'unregistered',
+        // ignore: deprecated_member_use
         'details': rule.details,
         if (sinceInfo != null)
           'sinceDartSdk': sinceInfo[rule.name]?.sinceDartSdk ?? 'Unreleased',