Move lint rule category mappings to messages.yaml

Cq-Include-Trybots: luci.dart.try:flutter-analyze-try,analyzer-win-release-try,pkg-win-release-try
Change-Id: Ie15fbe4d442ced91540f7653888882691bbb4ec1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/382780
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Commit-Queue: Samuel Rawlins <srawlins@google.com>
diff --git a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
index d69f07d..3806c3d 100644
--- a/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
+++ b/pkg/analysis_server/test/lsp/code_actions_fixes_test.dart
@@ -34,7 +34,6 @@
   DeprecatedCamelCaseTypes()
       : super(
           name: 'camel_case_types',
-          categories: {LintRuleCategory.style},
           state: State.deprecated(),
           description: '',
           details: '',
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 72bfc9b..ca4782c 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
@@ -263,7 +263,6 @@
   InternalRule()
       : super(
           name: 'internal_lint',
-          categories: {LintRuleCategory.style},
           state: State.internal(),
           description: '',
           details: '',
diff --git a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart
index de25f0f..919af7f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/analysis_options/remove_lint_test.dart
@@ -25,7 +25,6 @@
           name: 'deprecated_rule',
           description: '',
           details: '...',
-          categories: {LintRuleCategory.errors},
           state: State.deprecated(since: dart2_12),
         );
 
@@ -42,7 +41,6 @@
             name: 'removed_rule',
             description: '',
             details: '...',
-            categories: {LintRuleCategory.errors},
             state: State.removed());
 
   @override
diff --git a/pkg/analyzer/lib/src/lint/linter.dart b/pkg/analyzer/lib/src/lint/linter.dart
index 02a2395..3352fad 100644
--- a/pkg/analyzer/lib/src/lint/linter.dart
+++ b/pkg/analyzer/lib/src/lint/linter.dart
@@ -216,7 +216,7 @@
 
   LintRule({
     required this.name,
-    required this.categories,
+    this.categories = const <String>{},
     required this.description,
     required this.details,
     State? state,
@@ -327,24 +327,9 @@
 }
 
 abstract final class LintRuleCategory {
-  /// A category of rules that help to minimize binary size.
-  static const String binarySize = 'binary size';
-
-  /// A category of rules that encourage brevity in the source code.
-  static const String brevity = 'brevity';
-
-  /// A category of rules that help to maintain documentation comments.
-  static const String documentationCommentMaintenance =
-      'documentation comment maintenance';
-
   /// A category of rules that align with the Effective Dart style guide.
   static const String effectiveDart = 'effective dart';
 
-  /// A category representing possible coding errors.
-  // TODO(srawlins): Hopefully deprecate this (or just rename `error_prone`
-  // back to this one).
-  static const String errors = 'errors';
-
   /// A category of rules that protect against error-prone code.
   static const String errorProne = 'error-prone';
 
diff --git a/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart b/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart
index 34c5a27..3181eab 100644
--- a/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/removed_lint_use_test.dart
@@ -19,7 +19,6 @@
   RemovedLint()
       : super(
           name: 'removed_lint',
-          categories: {LintRuleCategory.style},
           state: State.removed(since: dart3),
           description: '',
           details: '',
diff --git a/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart b/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart
index 1c61e56..8093b63 100644
--- a/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/replaced_lint_use_test.dart
@@ -19,7 +19,6 @@
   RemovedLint()
       : super(
           name: 'removed_lint',
-          categories: {LintRuleCategory.style},
           state: State.removed(since: dart3, replacedBy: 'replacing_lint'),
           description: '',
           details: '',
@@ -65,7 +64,6 @@
   ReplacingLint()
       : super(
           name: 'replacing_lint',
-          categories: {LintRuleCategory.style},
           state: State.removed(since: dart3),
           description: '',
           details: '',
diff --git a/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart b/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart
index b84e7f4..3ce3bec 100644
--- a/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unignorable_ignore_test.dart
@@ -80,7 +80,6 @@
           name: 'avoid_int',
           description: '',
           details: '',
-          categories: {LintRuleCategory.errors},
         );
 
   @override
diff --git a/pkg/analyzer/test/src/lint/lint_rule_test.dart b/pkg/analyzer/test/src/lint/lint_rule_test.dart
index 994fa64..2f80bfb 100644
--- a/pkg/analyzer/test/src/lint/lint_rule_test.dart
+++ b/pkg/analyzer/test/src/lint/lint_rule_test.dart
@@ -141,7 +141,6 @@
           name: 'test_rule',
           description: '',
           details: '... tl;dr ...',
-          categories: {LintRuleCategory.errors},
         );
 
   @override
diff --git a/pkg/analyzer/test/src/options/apply_options_test.dart b/pkg/analyzer/test/src/options/apply_options_test.dart
index fa98f08..acf3d9b 100644
--- a/pkg/analyzer/test/src/options/apply_options_test.dart
+++ b/pkg/analyzer/test/src/options/apply_options_test.dart
@@ -439,7 +439,6 @@
           name: 'fantastic_test_rule',
           description: '',
           details: '',
-          categories: {LintRuleCategory.style},
         );
 
   TestRule.withName(String name)
@@ -447,7 +446,6 @@
           name: name,
           description: '',
           details: '',
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/analyzer/test/src/options/options_rule_validator_test.dart b/pkg/analyzer/test/src/options/options_rule_validator_test.dart
index 4b0ae34..884ed86 100644
--- a/pkg/analyzer/test/src/options/options_rule_validator_test.dart
+++ b/pkg/analyzer/test/src/options/options_rule_validator_test.dart
@@ -27,7 +27,6 @@
   DeprecatedLint()
       : super(
           name: 'deprecated_lint',
-          categories: {LintRuleCategory.style},
           state: State.deprecated(),
           description: '',
           details: '',
@@ -38,7 +37,6 @@
   DeprecatedLintWithReplacement()
       : super(
           name: 'deprecated_lint_with_replacement',
-          categories: {LintRuleCategory.style},
           state: State.deprecated(replacedBy: 'replacing_lint'),
           description: '',
           details: '',
@@ -49,7 +47,6 @@
   DeprecatedSince3Lint()
       : super(
           name: 'deprecated_since_3_lint',
-          categories: {LintRuleCategory.style},
           state: State.deprecated(since: dart3),
           description: '',
           details: '',
@@ -293,7 +290,6 @@
   RemovedIn2_12Lint()
       : super(
           name: 'removed_in_2_12_lint',
-          categories: {LintRuleCategory.style},
           state: State.removed(since: dart2_12),
           description: '',
           details: '',
@@ -304,7 +300,6 @@
   ReplacedLint()
       : super(
           name: 'replaced_lint',
-          categories: {LintRuleCategory.style},
           state: State.removed(since: dart3, replacedBy: 'replacing_lint'),
           description: '',
           details: '',
@@ -315,7 +310,6 @@
   ReplacingLint()
       : super(
           name: 'replacing_lint',
-          categories: {LintRuleCategory.style},
           description: '',
           details: '',
         );
@@ -325,7 +319,6 @@
   RuleNeg()
       : super(
           name: 'rule_neg',
-          categories: {LintRuleCategory.style},
           description: '',
           details: '',
         );
@@ -338,7 +331,6 @@
   RulePos()
       : super(
           name: 'rule_pos',
-          categories: {LintRuleCategory.style},
           description: '',
           details: '',
         );
@@ -351,7 +343,6 @@
   StableLint()
       : super(
           name: 'stable_lint',
-          categories: {LintRuleCategory.style},
           state: State.stable(),
           description: '',
           details: '',
diff --git a/pkg/analyzer/test/src/task/options_test.dart b/pkg/analyzer/test/src/task/options_test.dart
index a88322d..d030993 100644
--- a/pkg/analyzer/test/src/task/options_test.dart
+++ b/pkg/analyzer/test/src/task/options_test.dart
@@ -579,7 +579,6 @@
           name: 'fantastic_test_rule',
           description: '',
           details: '',
-          categories: {LintRuleCategory.style},
         );
 
   TestRule.withName(String name)
@@ -587,7 +586,6 @@
           name: name,
           description: '',
           details: '',
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/linter_lint_codes.dart b/pkg/linter/lib/src/linter_lint_codes.dart
index 48e8c8f..89dea49 100644
--- a/pkg/linter/lib/src/linter_lint_codes.dart
+++ b/pkg/linter/lib/src/linter_lint_codes.dart
@@ -520,13 +520,6 @@
     uniqueName: 'deprecated_consistency_constructor',
   );
 
-  static const LintCode deprecated_consistency_parameter = LinterLintCode(
-    'deprecated_consistency',
-    "Parameters that initialize a deprecated field should be deprecated.",
-    correctionMessage: "Try marking the parameter as deprecated.",
-    uniqueName: 'deprecated_consistency_parameter',
-  );
-
   static const LintCode deprecated_consistency_field = LinterLintCode(
     'deprecated_consistency',
     "Fields that are initialized by a deprecated parameter should be "
@@ -535,6 +528,13 @@
     uniqueName: 'deprecated_consistency_field',
   );
 
+  static const LintCode deprecated_consistency_parameter = LinterLintCode(
+    'deprecated_consistency',
+    "Parameters that initialize a deprecated field should be deprecated.",
+    correctionMessage: "Try marking the parameter as deprecated.",
+    uniqueName: 'deprecated_consistency_parameter',
+  );
+
   static const LintCode deprecated_member_use_from_same_package_with_message =
       LinterLintCode(
     'deprecated_member_use_from_same_package',
@@ -1225,14 +1225,6 @@
     hasPublishedDocs: true,
   );
 
-  static const LintCode prefer_inlined_adds_single = LinterLintCode(
-    'prefer_inlined_adds',
-    "The addition of a list item could be inlined.",
-    correctionMessage: "Try adding the item to the list literal directly.",
-    hasPublishedDocs: true,
-    uniqueName: 'prefer_inlined_adds_single',
-  );
-
   static const LintCode prefer_inlined_adds_multiple = LinterLintCode(
     'prefer_inlined_adds',
     "The addition of multiple list items could be inlined.",
@@ -1241,6 +1233,14 @@
     uniqueName: 'prefer_inlined_adds_multiple',
   );
 
+  static const LintCode prefer_inlined_adds_single = LinterLintCode(
+    'prefer_inlined_adds',
+    "The addition of a list item could be inlined.",
+    correctionMessage: "Try adding the item to the list literal directly.",
+    hasPublishedDocs: true,
+    uniqueName: 'prefer_inlined_adds_single',
+  );
+
   static const LintCode prefer_int_literals = LinterLintCode(
     'prefer_int_literals',
     "Unnecessary use of a 'double' literal.",
@@ -1738,13 +1738,6 @@
     uniqueName: 'unsafe_html_attribute',
   );
 
-  static const LintCode unsafe_html_method = LinterLintCode(
-    'unsafe_html',
-    "Invoking the method '{0}' is unsafe.",
-    correctionMessage: "Try finding a different way to implement the page.",
-    uniqueName: 'unsafe_html_method',
-  );
-
   static const LintCode unsafe_html_constructor = LinterLintCode(
     'unsafe_html',
     "Invoking the constructor '{0}' is unsafe.",
@@ -1752,6 +1745,13 @@
     uniqueName: 'unsafe_html_constructor',
   );
 
+  static const LintCode unsafe_html_method = LinterLintCode(
+    'unsafe_html',
+    "Invoking the method '{0}' is unsafe.",
+    correctionMessage: "Try finding a different way to implement the page.",
+    uniqueName: 'unsafe_html_method',
+  );
+
   static const LintCode use_build_context_synchronously_async_use =
       LinterLintCode(
     'use_build_context_synchronously',
@@ -1763,18 +1763,6 @@
     uniqueName: 'use_build_context_synchronously_async_use',
   );
 
-  static const LintCode use_colored_box = LinterLintCode(
-    'use_colored_box',
-    "Use a 'ColoredBox' rather than a 'Container' with only a 'Color'.",
-    correctionMessage: "Try replacing the 'Container' with a 'ColoredBox'.",
-  );
-
-  static const LintCode use_decorated_box = LinterLintCode(
-    'use_decorated_box',
-    "Use 'DecoratedBox' rather than a 'Container' with only a 'Decoration'.",
-    correctionMessage: "Try replacing the 'Container' with a 'DecoratedBox'.",
-  );
-
   static const LintCode use_build_context_synchronously_wrong_mounted =
       LinterLintCode(
     'use_build_context_synchronously',
@@ -1787,6 +1775,18 @@
     uniqueName: 'use_build_context_synchronously_wrong_mounted',
   );
 
+  static const LintCode use_colored_box = LinterLintCode(
+    'use_colored_box',
+    "Use a 'ColoredBox' rather than a 'Container' with only a 'Color'.",
+    correctionMessage: "Try replacing the 'Container' with a 'ColoredBox'.",
+  );
+
+  static const LintCode use_decorated_box = LinterLintCode(
+    'use_decorated_box',
+    "Use 'DecoratedBox' rather than a 'Container' with only a 'Decoration'.",
+    correctionMessage: "Try replacing the 'Container' with a 'DecoratedBox'.",
+  );
+
   static const LintCode use_enums = LinterLintCode(
     'use_enums',
     "Class should be an enum.",
@@ -1797,8 +1797,6 @@
     'use_full_hex_values_for_flutter_colors',
     "Instances of 'Color' should be created using an 8-digit hexadecimal "
         "integer (such as '0xFFFFFFFF').",
-    correctionMessage:
-        "Try using an 8-digit hexadecimal integer to create the 'Color'.",
     hasPublishedDocs: true,
   );
 
diff --git a/pkg/linter/lib/src/rules.dart b/pkg/linter/lib/src/rules.dart
index 797fcdf..1922fed 100644
--- a/pkg/linter/lib/src/rules.dart
+++ b/pkg/linter/lib/src/rules.dart
@@ -333,8 +333,8 @@
     ..register(InvalidCasePatterns())
     ..register(InvariantBooleans())
     ..register(IterableContainsUnrelatedType())
-    ..register(JoinReturnWithAssignment())
     ..register(InvalidRuntimeCheckWithJSInteropTypes())
+    ..register(JoinReturnWithAssignment())
     ..register(LeadingNewlinesInMultilineStrings())
     ..register(LibraryAnnotations())
     ..register(LibraryNames())
diff --git a/pkg/linter/lib/src/rules/always_declare_return_types.dart b/pkg/linter/lib/src/rules/always_declare_return_types.dart
index 1efe0c6..83b67f8 100644
--- a/pkg/linter/lib/src/rules/always_declare_return_types.dart
+++ b/pkg/linter/lib/src/rules/always_declare_return_types.dart
@@ -49,10 +49,10 @@
 class AlwaysDeclareReturnTypes extends LintRule {
   AlwaysDeclareReturnTypes()
       : super(
-            name: 'always_declare_return_types',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'always_declare_return_types',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart b/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart
index 6f61f77..0559fd0 100644
--- a/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart
+++ b/pkg/linter/lib/src/rules/always_put_control_body_on_new_line.dart
@@ -53,10 +53,10 @@
 class AlwaysPutControlBodyOnNewLine extends LintRule {
   AlwaysPutControlBodyOnNewLine()
       : super(
-            name: 'always_put_control_body_on_new_line',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'always_put_control_body_on_new_line',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.always_put_control_body_on_new_line;
diff --git a/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart b/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart
index b966c74..51078e0 100644
--- a/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart
+++ b/pkg/linter/lib/src/rules/always_put_required_named_parameters_first.dart
@@ -38,10 +38,10 @@
 class AlwaysPutRequiredNamedParametersFirst extends LintRule {
   AlwaysPutRequiredNamedParametersFirst()
       : super(
-            name: 'always_put_required_named_parameters_first',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'always_put_required_named_parameters_first',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart b/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart
index 6200e66..4bbae41 100644
--- a/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart
+++ b/pkg/linter/lib/src/rules/always_require_non_null_named_parameters.dart
@@ -38,11 +38,11 @@
 class AlwaysRequireNonNullNamedParameters extends LintRule {
   AlwaysRequireNonNullNamedParameters()
       : super(
-            name: 'always_require_non_null_named_parameters',
-            description: _desc,
-            details: _details,
-            state: State.removed(since: dart3_3),
-            categories: {LintRuleCategory.style});
+          name: 'always_require_non_null_named_parameters',
+          description: _desc,
+          details: _details,
+          state: State.removed(since: dart3_3),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/always_specify_types.dart b/pkg/linter/lib/src/rules/always_specify_types.dart
index 5da92e3..17d5c56 100644
--- a/pkg/linter/lib/src/rules/always_specify_types.dart
+++ b/pkg/linter/lib/src/rules/always_specify_types.dart
@@ -64,10 +64,10 @@
 class AlwaysSpecifyTypes extends LintRule {
   AlwaysSpecifyTypes()
       : super(
-            name: 'always_specify_types',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'always_specify_types',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const [
diff --git a/pkg/linter/lib/src/rules/always_use_package_imports.dart b/pkg/linter/lib/src/rules/always_use_package_imports.dart
index d13d4c5..e0995cd 100644
--- a/pkg/linter/lib/src/rules/always_use_package_imports.dart
+++ b/pkg/linter/lib/src/rules/always_use_package_imports.dart
@@ -49,10 +49,10 @@
 class AlwaysUsePackageImports extends LintRule {
   AlwaysUsePackageImports()
       : super(
-            name: 'always_use_package_imports',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'always_use_package_imports',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const ['prefer_relative_imports'];
diff --git a/pkg/linter/lib/src/rules/annotate_overrides.dart b/pkg/linter/lib/src/rules/annotate_overrides.dart
index b0dd7d0..cde32b2 100644
--- a/pkg/linter/lib/src/rules/annotate_overrides.dart
+++ b/pkg/linter/lib/src/rules/annotate_overrides.dart
@@ -50,10 +50,10 @@
 class AnnotateOverrides extends LintRule {
   AnnotateOverrides()
       : super(
-            name: 'annotate_overrides',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'annotate_overrides',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.annotate_overrides;
diff --git a/pkg/linter/lib/src/rules/annotate_redeclares.dart b/pkg/linter/lib/src/rules/annotate_redeclares.dart
index 9122443..f5ffe4f 100644
--- a/pkg/linter/lib/src/rules/annotate_redeclares.dart
+++ b/pkg/linter/lib/src/rules/annotate_redeclares.dart
@@ -51,11 +51,11 @@
 class AnnotateRedeclares extends LintRule {
   AnnotateRedeclares()
       : super(
-            name: 'annotate_redeclares',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style},
-            state: State.experimental());
+          name: 'annotate_redeclares',
+          description: _desc,
+          details: _details,
+          state: State.experimental(),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.annotate_redeclares;
diff --git a/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart b/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart
index 44da3af..875d44d 100644
--- a/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart
+++ b/pkg/linter/lib/src/rules/avoid_annotating_with_dynamic.dart
@@ -41,10 +41,10 @@
 class AvoidAnnotatingWithDynamic extends LintRule {
   AvoidAnnotatingWithDynamic()
       : super(
-            name: 'avoid_annotating_with_dynamic',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'avoid_annotating_with_dynamic',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_annotating_with_dynamic;
diff --git a/pkg/linter/lib/src/rules/avoid_as.dart b/pkg/linter/lib/src/rules/avoid_as.dart
index 3c02baa..d8200d7 100644
--- a/pkg/linter/lib/src/rules/avoid_as.dart
+++ b/pkg/linter/lib/src/rules/avoid_as.dart
@@ -53,7 +53,6 @@
           name: 'avoid_as',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
           state: State.removed(since: dart2_12),
         );
 
diff --git a/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart b/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
index 01e4e40..4209d48 100644
--- a/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
+++ b/pkg/linter/lib/src/rules/avoid_bool_literals_in_conditional_expressions.dart
@@ -34,10 +34,10 @@
 class AvoidBoolLiteralsInConditionalExpressions extends LintRule {
   AvoidBoolLiteralsInConditionalExpressions()
       : super(
-            name: 'avoid_bool_literals_in_conditional_expressions',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity});
+          name: 'avoid_bool_literals_in_conditional_expressions',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart b/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart
index 6708dcd..f24d11d 100644
--- a/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart
+++ b/pkg/linter/lib/src/rules/avoid_catches_without_on_clauses.dart
@@ -57,13 +57,10 @@
 class AvoidCatchesWithoutOnClauses extends LintRule {
   AvoidCatchesWithoutOnClauses()
       : super(
-            name: 'avoid_catches_without_on_clauses',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'avoid_catches_without_on_clauses',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_catches_without_on_clauses;
diff --git a/pkg/linter/lib/src/rules/avoid_catching_errors.dart b/pkg/linter/lib/src/rules/avoid_catching_errors.dart
index df4f1f7..11db03c 100644
--- a/pkg/linter/lib/src/rules/avoid_catching_errors.dart
+++ b/pkg/linter/lib/src/rules/avoid_catching_errors.dart
@@ -40,10 +40,10 @@
 class AvoidCatchingErrors extends LintRule {
   AvoidCatchingErrors()
       : super(
-            name: 'avoid_catching_errors',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_catching_errors',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart b/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart
index 596c9a7..a41ae02 100644
--- a/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart
+++ b/pkg/linter/lib/src/rules/avoid_classes_with_only_static_members.dart
@@ -48,14 +48,10 @@
 class AvoidClassesWithOnlyStaticMembers extends LintRule {
   AvoidClassesWithOnlyStaticMembers()
       : super(
-            name: 'avoid_classes_with_only_static_members',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.languageFeatureUsage,
-              LintRuleCategory.style,
-            });
+          name: 'avoid_classes_with_only_static_members',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart b/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart
index 67a5bda..cfc7539 100644
--- a/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart
+++ b/pkg/linter/lib/src/rules/avoid_double_and_int_checks.dart
@@ -45,10 +45,10 @@
 class AvoidDoubleAndIntChecks extends LintRule {
   AvoidDoubleAndIntChecks()
       : super(
-            name: 'avoid_double_and_int_checks',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne, LintRuleCategory.web});
+          name: 'avoid_double_and_int_checks',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_double_and_int_checks;
diff --git a/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart b/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart
index 4bd2f86..61bf62b 100644
--- a/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart
+++ b/pkg/linter/lib/src/rules/avoid_dynamic_calls.dart
@@ -99,10 +99,6 @@
           name: 'avoid_dynamic_calls',
           description: _desc,
           details: _details,
-          categories: {
-            LintRuleCategory.binarySize,
-            LintRuleCategory.errorProne
-          },
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/avoid_empty_else.dart b/pkg/linter/lib/src/rules/avoid_empty_else.dart
index 3c4ae51..6bd3c07 100644
--- a/pkg/linter/lib/src/rules/avoid_empty_else.dart
+++ b/pkg/linter/lib/src/rules/avoid_empty_else.dart
@@ -56,13 +56,10 @@
 class AvoidEmptyElse extends LintRule {
   AvoidEmptyElse()
       : super(
-            name: 'avoid_empty_else',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.errorProne
-            });
+          name: 'avoid_empty_else',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_empty_else;
diff --git a/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart b/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart
index 1d94f8c..71475f6 100644
--- a/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart
+++ b/pkg/linter/lib/src/rules/avoid_equals_and_hash_code_on_mutable_classes.dart
@@ -68,13 +68,10 @@
 class AvoidEqualsAndHashCodeOnMutableClasses extends LintRule {
   AvoidEqualsAndHashCodeOnMutableClasses()
       : super(
-            name: 'avoid_equals_and_hash_code_on_mutable_classes',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'avoid_equals_and_hash_code_on_mutable_classes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart b/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart
index 5f21cf8..a2578f7 100644
--- a/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart
+++ b/pkg/linter/lib/src/rules/avoid_escaping_inner_quotes.dart
@@ -28,10 +28,10 @@
 class AvoidEscapingInnerQuotes extends LintRule {
   AvoidEscapingInnerQuotes()
       : super(
-            name: 'avoid_escaping_inner_quotes',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_escaping_inner_quotes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_escaping_inner_quotes;
diff --git a/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart b/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart
index 0228087..6b8ab80 100644
--- a/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart
+++ b/pkg/linter/lib/src/rules/avoid_field_initializers_in_const_classes.dart
@@ -38,14 +38,12 @@
 ''';
 
 class AvoidFieldInitializersInConstClasses extends LintRule {
-  AvoidFieldInitializersInConstClasses() : super(
-            name: 'avoid_field_initializers_in_const_classes',
-            description: _desc,
-            details: _details,
-            // TODO(srawlins): This rule has nothing to do with style. It is to
-            // reduce runtime memory usage. But we don't have a Category for
-            // that yet.
-            categories: {LintRuleCategory.style});
+  AvoidFieldInitializersInConstClasses()
+      : super(
+          name: 'avoid_field_initializers_in_const_classes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/avoid_final_parameters.dart b/pkg/linter/lib/src/rules/avoid_final_parameters.dart
index abc5b4e..ec36670 100644
--- a/pkg/linter/lib/src/rules/avoid_final_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_final_parameters.dart
@@ -55,10 +55,10 @@
 class AvoidFinalParameters extends LintRule {
   AvoidFinalParameters()
       : super(
-            name: 'avoid_final_parameters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_final_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const ['prefer_final_parameters'];
diff --git a/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart b/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart
index be4b5bb..97ddcdc 100644
--- a/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart
+++ b/pkg/linter/lib/src/rules/avoid_function_literals_in_foreach_calls.dart
@@ -62,10 +62,10 @@
 class AvoidFunctionLiteralsInForeachCalls extends LintRule {
   AvoidFunctionLiteralsInForeachCalls()
       : super(
-            name: 'avoid_function_literals_in_foreach_calls',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_function_literals_in_foreach_calls',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart b/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart
index 443759d..fc705e8 100644
--- a/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart
+++ b/pkg/linter/lib/src/rules/avoid_implementing_value_types.dart
@@ -92,10 +92,10 @@
 class AvoidImplementingValueTypes extends LintRule {
   AvoidImplementingValueTypes()
       : super(
-            name: 'avoid_implementing_value_types',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_implementing_value_types',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_implementing_value_types;
diff --git a/pkg/linter/lib/src/rules/avoid_init_to_null.dart b/pkg/linter/lib/src/rules/avoid_init_to_null.dart
index 239fed2..e2480f1 100644
--- a/pkg/linter/lib/src/rules/avoid_init_to_null.dart
+++ b/pkg/linter/lib/src/rules/avoid_init_to_null.dart
@@ -62,14 +62,10 @@
 class AvoidInitToNull extends LintRule {
   AvoidInitToNull()
       : super(
-            name: 'avoid_init_to_null',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'avoid_init_to_null',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_init_to_null;
diff --git a/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart b/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart
index dc6eb58..bb5f89f 100644
--- a/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart
+++ b/pkg/linter/lib/src/rules/avoid_js_rounded_ints.dart
@@ -36,10 +36,10 @@
 class AvoidJsRoundedInts extends LintRule {
   AvoidJsRoundedInts()
       : super(
-            name: 'avoid_js_rounded_ints',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne, LintRuleCategory.web});
+          name: 'avoid_js_rounded_ints',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_js_rounded_ints;
diff --git a/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart b/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart
index 12eef40..6d7ee70 100644
--- a/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart
+++ b/pkg/linter/lib/src/rules/avoid_multiple_declarations_per_line.dart
@@ -30,10 +30,10 @@
 class AvoidMultipleDeclarationsPerLine extends LintRule {
   AvoidMultipleDeclarationsPerLine()
       : super(
-            name: 'avoid_multiple_declarations_per_line',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_multiple_declarations_per_line',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_multiple_declarations_per_line;
diff --git a/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart b/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart
index 60b57ed..f47c767 100644
--- a/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart
+++ b/pkg/linter/lib/src/rules/avoid_null_checks_in_equality_operators.dart
@@ -65,10 +65,10 @@
 class AvoidNullChecksInEqualityOperators extends LintRule {
   AvoidNullChecksInEqualityOperators()
       : super(
-            name: 'avoid_null_checks_in_equality_operators',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_null_checks_in_equality_operators',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart b/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart
index 2acbe55..6c36efb 100644
--- a/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_positional_boolean_parameters.dart
@@ -44,13 +44,10 @@
 class AvoidPositionalBooleanParameters extends LintRule {
   AvoidPositionalBooleanParameters()
       : super(
-            name: 'avoid_positional_boolean_parameters',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'avoid_positional_boolean_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_positional_boolean_parameters;
diff --git a/pkg/linter/lib/src/rules/avoid_print.dart b/pkg/linter/lib/src/rules/avoid_print.dart
index 21c188e..2db6dc1 100644
--- a/pkg/linter/lib/src/rules/avoid_print.dart
+++ b/pkg/linter/lib/src/rules/avoid_print.dart
@@ -61,10 +61,10 @@
 class AvoidPrint extends LintRule {
   AvoidPrint()
       : super(
-            name: 'avoid_print',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unintentional});
+          name: 'avoid_print',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_print;
diff --git a/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart b/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart
index 1b398d7..0304843 100644
--- a/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart
+++ b/pkg/linter/lib/src/rules/avoid_private_typedef_functions.dart
@@ -31,10 +31,10 @@
 class AvoidPrivateTypedefFunctions extends LintRule {
   AvoidPrivateTypedefFunctions()
       : super(
-            name: 'avoid_private_typedef_functions',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_private_typedef_functions',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_private_typedef_functions;
diff --git a/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart b/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart
index 705205ec..1e7442f 100644
--- a/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart
+++ b/pkg/linter/lib/src/rules/avoid_redundant_argument_values.dart
@@ -57,10 +57,10 @@
 class AvoidRedundantArgumentValues extends LintRule {
   AvoidRedundantArgumentValues()
       : super(
-            name: 'avoid_redundant_argument_values',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'avoid_redundant_argument_values',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_redundant_argument_values;
diff --git a/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart b/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart
index e8171ba..244080e 100644
--- a/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart
+++ b/pkg/linter/lib/src/rules/avoid_relative_lib_imports.dart
@@ -44,10 +44,10 @@
 class AvoidRelativeLibImports extends LintRule {
   AvoidRelativeLibImports()
       : super(
-            name: 'avoid_relative_lib_imports',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'avoid_relative_lib_imports',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_relative_lib_imports;
diff --git a/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart b/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
index 66b060944..5f01aa9 100644
--- a/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_renaming_method_parameters.dart
@@ -50,10 +50,10 @@
 class AvoidRenamingMethodParameters extends LintRule {
   AvoidRenamingMethodParameters()
       : super(
-            name: 'avoid_renaming_method_parameters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.documentationCommentMaintenance});
+          name: 'avoid_renaming_method_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_renaming_method_parameters;
diff --git a/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart b/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart
index 1279a83..a9b63dd 100644
--- a/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart
+++ b/pkg/linter/lib/src/rules/avoid_return_types_on_setters.dart
@@ -30,10 +30,10 @@
 class AvoidReturnTypesOnSetters extends LintRule {
   AvoidReturnTypesOnSetters()
       : super(
-            name: 'avoid_return_types_on_setters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'avoid_return_types_on_setters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/avoid_returning_null.dart b/pkg/linter/lib/src/rules/avoid_returning_null.dart
index 2ca4578..404bceb 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_null.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_null.dart
@@ -40,11 +40,11 @@
 class AvoidReturningNull extends LintRule {
   AvoidReturningNull()
       : super(
-            name: 'avoid_returning_null',
-            description: _desc,
-            details: _details,
-            state: State.removed(since: dart3_3),
-            categories: {LintRuleCategory.style});
+          name: 'avoid_returning_null',
+          description: _desc,
+          details: _details,
+          state: State.removed(since: dart3_3),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart b/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart
index e2156e4..1078d7e 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_null_for_future.dart
@@ -22,8 +22,7 @@
             name: 'avoid_returning_null_for_future',
             description: _desc,
             details: _details,
-            state: State.removed(since: dart3_3),
-            categories: {LintRuleCategory.errors});
+            state: State.removed(since: dart3_3));
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart b/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart
index c83bf3a..eb97cdc 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_null_for_void.dart
@@ -45,10 +45,10 @@
 class AvoidReturningNullForVoid extends LintRule {
   AvoidReturningNullForVoid()
       : super(
-            name: 'avoid_returning_null_for_void',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_returning_null_for_void',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/avoid_returning_this.dart b/pkg/linter/lib/src/rules/avoid_returning_this.dart
index d06fa4c..3cbb5c0 100644
--- a/pkg/linter/lib/src/rules/avoid_returning_this.dart
+++ b/pkg/linter/lib/src/rules/avoid_returning_this.dart
@@ -51,13 +51,10 @@
 class AvoidReturningThis extends LintRule {
   AvoidReturningThis()
       : super(
-            name: 'avoid_returning_this',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'avoid_returning_this',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_returning_this;
diff --git a/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart b/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart
index 27e03f0..a619723 100644
--- a/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart
+++ b/pkg/linter/lib/src/rules/avoid_setters_without_getters.dart
@@ -47,10 +47,10 @@
 class AvoidSettersWithoutGetters extends LintRule {
   AvoidSettersWithoutGetters()
       : super(
-            name: 'avoid_setters_without_getters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_setters_without_getters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_setters_without_getters;
diff --git a/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart b/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart
index 17847e3..9d5b7bc 100644
--- a/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_shadowing_type_parameters.dart
@@ -34,10 +34,10 @@
 class AvoidShadowingTypeParameters extends LintRule {
   AvoidShadowingTypeParameters()
       : super(
-            name: 'avoid_shadowing_type_parameters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'avoid_shadowing_type_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_shadowing_type_parameters;
diff --git a/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart b/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart
index 0bdea8c..9dad069 100644
--- a/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart
+++ b/pkg/linter/lib/src/rules/avoid_single_cascade_in_expression_statements.dart
@@ -29,10 +29,10 @@
 class AvoidSingleCascadeInExpressionStatements extends LintRule {
   AvoidSingleCascadeInExpressionStatements()
       : super(
-            name: 'avoid_single_cascade_in_expression_statements',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'avoid_single_cascade_in_expression_statements',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/avoid_slow_async_io.dart b/pkg/linter/lib/src/rules/avoid_slow_async_io.dart
index 7635a7c..81e165e 100644
--- a/pkg/linter/lib/src/rules/avoid_slow_async_io.dart
+++ b/pkg/linter/lib/src/rules/avoid_slow_async_io.dart
@@ -72,10 +72,10 @@
 class AvoidSlowAsyncIo extends LintRule {
   AvoidSlowAsyncIo()
       : super(
-            name: 'avoid_slow_async_io',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.nonPerformant});
+          name: 'avoid_slow_async_io',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_slow_async_io;
diff --git a/pkg/linter/lib/src/rules/avoid_type_to_string.dart b/pkg/linter/lib/src/rules/avoid_type_to_string.dart
index a2b62e8..fa99c62 100644
--- a/pkg/linter/lib/src/rules/avoid_type_to_string.dart
+++ b/pkg/linter/lib/src/rules/avoid_type_to_string.dart
@@ -54,10 +54,10 @@
 class AvoidTypeToString extends LintRule {
   AvoidTypeToString()
       : super(
-            name: 'avoid_type_to_string',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unintentional});
+          name: 'avoid_type_to_string',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_type_to_string;
diff --git a/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart b/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart
index ad972e5..7b62d28 100644
--- a/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart
+++ b/pkg/linter/lib/src/rules/avoid_types_as_parameter_names.dart
@@ -33,10 +33,10 @@
 class AvoidTypesAsParameterNames extends LintRule {
   AvoidTypesAsParameterNames()
       : super(
-            name: 'avoid_types_as_parameter_names',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unintentional});
+          name: 'avoid_types_as_parameter_names',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_types_as_parameter_names;
diff --git a/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart b/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart
index d8bf8b2..6bc580a 100644
--- a/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_types_on_closure_parameters.dart
@@ -34,10 +34,10 @@
 class AvoidTypesOnClosureParameters extends LintRule {
   AvoidTypesOnClosureParameters()
       : super(
-            name: 'avoid_types_on_closure_parameters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_types_on_closure_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const ['always_specify_types'];
diff --git a/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart b/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart
index d07ddbc..43518cc 100644
--- a/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart
+++ b/pkg/linter/lib/src/rules/avoid_unnecessary_containers.dart
@@ -51,10 +51,10 @@
 class AvoidUnnecessaryContainers extends LintRule {
   AvoidUnnecessaryContainers()
       : super(
-            name: 'avoid_unnecessary_containers',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'avoid_unnecessary_containers',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_unnecessary_containers;
diff --git a/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart b/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart
index efd7b9e..88428e6 100644
--- a/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart
+++ b/pkg/linter/lib/src/rules/avoid_unstable_final_fields.dart
@@ -18,7 +18,6 @@
             name: 'avoid_unstable_final_fields',
             description: _desc,
             details: _details,
-            categories: {LintRuleCategory.errors},
             state: State.removed());
 
   @override
diff --git a/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart b/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart
index 031fba8..9557cb6 100644
--- a/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart
+++ b/pkg/linter/lib/src/rules/avoid_unused_constructor_parameters.dart
@@ -34,13 +34,12 @@
 ''';
 
 class AvoidUnusedConstructorParameters extends LintRule {
-  AvoidUnusedConstructorParameters() : super(
-            name: 'avoid_unused_constructor_parameters',
-            description: _desc,
-            details: _details,
-            // TODO(srawlins): This isn't even just about unintentional syntax;
-            // unused parameters can represent code bloat.
-            categories: {LintRuleCategory.unintentional});
+  AvoidUnusedConstructorParameters()
+      : super(
+          name: 'avoid_unused_constructor_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_unused_constructor_parameters;
diff --git a/pkg/linter/lib/src/rules/avoid_void_async.dart b/pkg/linter/lib/src/rules/avoid_void_async.dart
index b6604b0..ddde03b 100644
--- a/pkg/linter/lib/src/rules/avoid_void_async.dart
+++ b/pkg/linter/lib/src/rules/avoid_void_async.dart
@@ -49,10 +49,10 @@
 class AvoidVoidAsync extends LintRule {
   AvoidVoidAsync()
       : super(
-            name: 'avoid_void_async',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'avoid_void_async',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_void_async;
diff --git a/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart b/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart
index 6b27236..ed89569 100644
--- a/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart
+++ b/pkg/linter/lib/src/rules/avoid_web_libraries_in_flutter.dart
@@ -49,14 +49,10 @@
 
   AvoidWebLibrariesInFlutter()
       : super(
-            name: 'avoid_web_libraries_in_flutter',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.errorProne,
-              LintRuleCategory.flutter,
-              LintRuleCategory.web
-            });
+          name: 'avoid_web_libraries_in_flutter',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.avoid_web_libraries_in_flutter;
diff --git a/pkg/linter/lib/src/rules/await_only_futures.dart b/pkg/linter/lib/src/rules/await_only_futures.dart
index 3b029d1..e65d9f1 100644
--- a/pkg/linter/lib/src/rules/await_only_futures.dart
+++ b/pkg/linter/lib/src/rules/await_only_futures.dart
@@ -40,10 +40,10 @@
 class AwaitOnlyFutures extends LintRule {
   AwaitOnlyFutures()
       : super(
-            name: 'await_only_futures',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'await_only_futures',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.await_only_futures;
diff --git a/pkg/linter/lib/src/rules/camel_case_extensions.dart b/pkg/linter/lib/src/rules/camel_case_extensions.dart
index ca0909d..534f1ae 100644
--- a/pkg/linter/lib/src/rules/camel_case_extensions.dart
+++ b/pkg/linter/lib/src/rules/camel_case_extensions.dart
@@ -34,13 +34,10 @@
 class CamelCaseExtensions extends LintRule {
   CamelCaseExtensions()
       : super(
-            name: 'camel_case_extensions',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'camel_case_extensions',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.camel_case_extensions;
diff --git a/pkg/linter/lib/src/rules/camel_case_types.dart b/pkg/linter/lib/src/rules/camel_case_types.dart
index c74a6b5..3222987 100644
--- a/pkg/linter/lib/src/rules/camel_case_types.dart
+++ b/pkg/linter/lib/src/rules/camel_case_types.dart
@@ -39,13 +39,10 @@
 class CamelCaseTypes extends LintRule {
   CamelCaseTypes()
       : super(
-            name: 'camel_case_types',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'camel_case_types',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.camel_case_types;
diff --git a/pkg/linter/lib/src/rules/cancel_subscriptions.dart b/pkg/linter/lib/src/rules/cancel_subscriptions.dart
index 31f9236..523f46a 100644
--- a/pkg/linter/lib/src/rules/cancel_subscriptions.dart
+++ b/pkg/linter/lib/src/rules/cancel_subscriptions.dart
@@ -67,13 +67,10 @@
 class CancelSubscriptions extends LintRule {
   CancelSubscriptions()
       : super(
-            name: 'cancel_subscriptions',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.errorProne,
-              LintRuleCategory.memoryLeaks
-            });
+          name: 'cancel_subscriptions',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.cancel_subscriptions;
diff --git a/pkg/linter/lib/src/rules/cascade_invocations.dart b/pkg/linter/lib/src/rules/cascade_invocations.dart
index 9e8b1f4..110edf6 100644
--- a/pkg/linter/lib/src/rules/cascade_invocations.dart
+++ b/pkg/linter/lib/src/rules/cascade_invocations.dart
@@ -109,14 +109,10 @@
   /// Default constructor.
   CascadeInvocations()
       : super(
-            name: 'cascade_invocations',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.languageFeatureUsage,
-              LintRuleCategory.style
-            });
+          name: 'cascade_invocations',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.cascade_invocations;
diff --git a/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart b/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart
index 8b41a0b..8274440 100644
--- a/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart
+++ b/pkg/linter/lib/src/rules/cast_nullable_to_non_nullable.dart
@@ -43,7 +43,6 @@
           name: 'cast_nullable_to_non_nullable',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.errorProne},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/close_sinks.dart b/pkg/linter/lib/src/rules/close_sinks.dart
index df38bf0..11fc3d3 100644
--- a/pkg/linter/lib/src/rules/close_sinks.dart
+++ b/pkg/linter/lib/src/rules/close_sinks.dart
@@ -66,13 +66,10 @@
 class CloseSinks extends LintRule {
   CloseSinks()
       : super(
-            name: 'close_sinks',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.errorProne,
-              LintRuleCategory.memoryLeaks
-            });
+          name: 'close_sinks',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.close_sinks;
diff --git a/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart b/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart
index 26463f4..89e782d 100644
--- a/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart
+++ b/pkg/linter/lib/src/rules/collection_methods_unrelated_type.dart
@@ -72,10 +72,10 @@
 class CollectionMethodsUnrelatedType extends LintRule {
   CollectionMethodsUnrelatedType()
       : super(
-            name: 'collection_methods_unrelated_type',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unintentional});
+          name: 'collection_methods_unrelated_type',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.collection_methods_unrelated_type;
diff --git a/pkg/linter/lib/src/rules/combinators_ordering.dart b/pkg/linter/lib/src/rules/combinators_ordering.dart
index 0d426f7..95673ea 100644
--- a/pkg/linter/lib/src/rules/combinators_ordering.dart
+++ b/pkg/linter/lib/src/rules/combinators_ordering.dart
@@ -34,7 +34,6 @@
           name: 'combinators_ordering',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/comment_references.dart b/pkg/linter/lib/src/rules/comment_references.dart
index ecd21ce..d68eea8 100644
--- a/pkg/linter/lib/src/rules/comment_references.dart
+++ b/pkg/linter/lib/src/rules/comment_references.dart
@@ -69,10 +69,10 @@
 class CommentReferences extends LintRule {
   CommentReferences()
       : super(
-            name: 'comment_references',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.documentationCommentMaintenance});
+          name: 'comment_references',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.comment_references;
diff --git a/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart b/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart
index 8394834..4e7ae73 100644
--- a/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart
+++ b/pkg/linter/lib/src/rules/conditional_uri_does_not_exist.dart
@@ -34,10 +34,10 @@
 class ConditionalUriDoesNotExist extends LintRule {
   ConditionalUriDoesNotExist()
       : super(
-            name: 'conditional_uri_does_not_exist',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'conditional_uri_does_not_exist',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.conditional_uri_does_not_exist;
diff --git a/pkg/linter/lib/src/rules/constant_identifier_names.dart b/pkg/linter/lib/src/rules/constant_identifier_names.dart
index 4d1759d..312277c 100644
--- a/pkg/linter/lib/src/rules/constant_identifier_names.dart
+++ b/pkg/linter/lib/src/rules/constant_identifier_names.dart
@@ -48,10 +48,10 @@
 class ConstantIdentifierNames extends LintRule {
   ConstantIdentifierNames()
       : super(
-            name: 'constant_identifier_names',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'constant_identifier_names',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.constant_identifier_names;
diff --git a/pkg/linter/lib/src/rules/control_flow_in_finally.dart b/pkg/linter/lib/src/rules/control_flow_in_finally.dart
index cb76d2f..33bf125 100644
--- a/pkg/linter/lib/src/rules/control_flow_in_finally.dart
+++ b/pkg/linter/lib/src/rules/control_flow_in_finally.dart
@@ -87,10 +87,10 @@
 class ControlFlowInFinally extends LintRule {
   ControlFlowInFinally()
       : super(
-            name: 'control_flow_in_finally',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'control_flow_in_finally',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.control_flow_in_finally;
diff --git a/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart b/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart
index 1c3c863..8f23002 100644
--- a/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart
+++ b/pkg/linter/lib/src/rules/curly_braces_in_flow_control_structures.dart
@@ -54,10 +54,10 @@
 class CurlyBracesInFlowControlStructures extends LintRule {
   CurlyBracesInFlowControlStructures()
       : super(
-            name: 'curly_braces_in_flow_control_structures',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'curly_braces_in_flow_control_structures',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart b/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart
index e3c2d38..e2250da 100644
--- a/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart
+++ b/pkg/linter/lib/src/rules/dangling_library_doc_comments.dart
@@ -45,10 +45,10 @@
 class DanglingLibraryDocComments extends LintRule {
   DanglingLibraryDocComments()
       : super(
-            name: 'dangling_library_doc_comments',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.documentationCommentMaintenance});
+          name: 'dangling_library_doc_comments',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.dangling_library_doc_comments;
diff --git a/pkg/linter/lib/src/rules/deprecated_consistency.dart b/pkg/linter/lib/src/rules/deprecated_consistency.dart
index 7e774a2..0c015a6 100644
--- a/pkg/linter/lib/src/rules/deprecated_consistency.dart
+++ b/pkg/linter/lib/src/rules/deprecated_consistency.dart
@@ -60,7 +60,6 @@
           name: 'deprecated_consistency',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart b/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart
index e305f95..16afb6d 100644
--- a/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart
+++ b/pkg/linter/lib/src/rules/deprecated_member_use_from_same_package.dart
@@ -80,10 +80,10 @@
 class DeprecatedMemberUseFromSamePackage extends LintRule {
   DeprecatedMemberUseFromSamePackage()
       : super(
-            name: 'deprecated_member_use_from_same_package',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.languageFeatureUsage});
+          name: 'deprecated_member_use_from_same_package',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart b/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart
index 55f8ff5..22654f2 100644
--- a/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart
+++ b/pkg/linter/lib/src/rules/diagnostic_describe_all_properties.dart
@@ -72,7 +72,6 @@
           name: 'diagnostic_describe_all_properties',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.errorProne, LintRuleCategory.flutter},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/directives_ordering.dart b/pkg/linter/lib/src/rules/directives_ordering.dart
index 392276f..b87ecb6 100644
--- a/pkg/linter/lib/src/rules/directives_ordering.dart
+++ b/pkg/linter/lib/src/rules/directives_ordering.dart
@@ -166,10 +166,10 @@
 
   DirectivesOrdering()
       : super(
-            name: 'directives_ordering',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'directives_ordering',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => allCodes;
diff --git a/pkg/linter/lib/src/rules/discarded_futures.dart b/pkg/linter/lib/src/rules/discarded_futures.dart
index a21aceb..ec23040 100644
--- a/pkg/linter/lib/src/rules/discarded_futures.dart
+++ b/pkg/linter/lib/src/rules/discarded_futures.dart
@@ -47,10 +47,10 @@
 class DiscardedFutures extends LintRule {
   DiscardedFutures()
       : super(
-            name: 'discarded_futures',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'discarded_futures',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.discarded_futures;
diff --git a/pkg/linter/lib/src/rules/do_not_use_environment.dart b/pkg/linter/lib/src/rules/do_not_use_environment.dart
index 0742672..e32feb7 100644
--- a/pkg/linter/lib/src/rules/do_not_use_environment.dart
+++ b/pkg/linter/lib/src/rules/do_not_use_environment.dart
@@ -26,10 +26,10 @@
 class DoNotUseEnvironment extends LintRule {
   DoNotUseEnvironment()
       : super(
-            name: 'do_not_use_environment',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'do_not_use_environment',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.do_not_use_environment;
diff --git a/pkg/linter/lib/src/rules/document_ignores.dart b/pkg/linter/lib/src/rules/document_ignores.dart
index f321a48..1c989f1 100644
--- a/pkg/linter/lib/src/rules/document_ignores.dart
+++ b/pkg/linter/lib/src/rules/document_ignores.dart
@@ -35,10 +35,10 @@
 class DocumentIgnores extends LintRule {
   DocumentIgnores()
       : super(
-            name: 'document_ignores',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'document_ignores',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.document_ignores;
diff --git a/pkg/linter/lib/src/rules/empty_catches.dart b/pkg/linter/lib/src/rules/empty_catches.dart
index c062343..4ee4ea5 100644
--- a/pkg/linter/lib/src/rules/empty_catches.dart
+++ b/pkg/linter/lib/src/rules/empty_catches.dart
@@ -52,10 +52,10 @@
 class EmptyCatches extends LintRule {
   EmptyCatches()
       : super(
-            name: 'empty_catches',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'empty_catches',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.empty_catches;
diff --git a/pkg/linter/lib/src/rules/empty_constructor_bodies.dart b/pkg/linter/lib/src/rules/empty_constructor_bodies.dart
index ff9dacf..d731557 100644
--- a/pkg/linter/lib/src/rules/empty_constructor_bodies.dart
+++ b/pkg/linter/lib/src/rules/empty_constructor_bodies.dart
@@ -40,14 +40,10 @@
 class EmptyConstructorBodies extends LintRule {
   EmptyConstructorBodies()
       : super(
-            name: 'empty_constructor_bodies',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'empty_constructor_bodies',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.empty_constructor_bodies;
diff --git a/pkg/linter/lib/src/rules/empty_statements.dart b/pkg/linter/lib/src/rules/empty_statements.dart
index 91d543d..bc7296c 100644
--- a/pkg/linter/lib/src/rules/empty_statements.dart
+++ b/pkg/linter/lib/src/rules/empty_statements.dart
@@ -44,10 +44,10 @@
 class EmptyStatements extends LintRule {
   EmptyStatements()
       : super(
-            name: 'empty_statements',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'empty_statements',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.empty_statements;
diff --git a/pkg/linter/lib/src/rules/enable_null_safety.dart b/pkg/linter/lib/src/rules/enable_null_safety.dart
index d7fb7ea..953191f 100644
--- a/pkg/linter/lib/src/rules/enable_null_safety.dart
+++ b/pkg/linter/lib/src/rules/enable_null_safety.dart
@@ -30,11 +30,11 @@
 class EnableNullSafety extends LintRule {
   EnableNullSafety()
       : super(
-            name: 'enable_null_safety',
-            description: _desc,
-            details: _details,
-            state: State.removed(since: dart3),
-            categories: {LintRuleCategory.style});
+          name: 'enable_null_safety',
+          description: _desc,
+          details: _details,
+          state: State.removed(since: dart3),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/eol_at_end_of_file.dart b/pkg/linter/lib/src/rules/eol_at_end_of_file.dart
index 1941560..5adea41 100644
--- a/pkg/linter/lib/src/rules/eol_at_end_of_file.dart
+++ b/pkg/linter/lib/src/rules/eol_at_end_of_file.dart
@@ -30,10 +30,10 @@
 class EolAtEndOfFile extends LintRule {
   EolAtEndOfFile()
       : super(
-            name: 'eol_at_end_of_file',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'eol_at_end_of_file',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.eol_at_end_of_file;
diff --git a/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart b/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart
index bc6f9a98..d80694d 100644
--- a/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart
+++ b/pkg/linter/lib/src/rules/erase_dart_type_extension_types.dart
@@ -21,11 +21,11 @@
 class EraseDartTypeExtensionTypes extends LintRule {
   EraseDartTypeExtensionTypes()
       : super(
-            name: 'erase_dart_type_extension_types',
-            description: _desc,
-            details: _details,
-            state: State.internal(),
-            categories: {LintRuleCategory.errorProne});
+          name: 'erase_dart_type_extension_types',
+          description: _desc,
+          details: _details,
+          state: State.internal(),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.erase_dart_type_extension_types;
diff --git a/pkg/linter/lib/src/rules/exhaustive_cases.dart b/pkg/linter/lib/src/rules/exhaustive_cases.dart
index 6d99597..0201e9d 100644
--- a/pkg/linter/lib/src/rules/exhaustive_cases.dart
+++ b/pkg/linter/lib/src/rules/exhaustive_cases.dart
@@ -78,10 +78,10 @@
 class ExhaustiveCases extends LintRule {
   ExhaustiveCases()
       : super(
-            name: 'exhaustive_cases',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'exhaustive_cases',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.exhaustive_cases;
diff --git a/pkg/linter/lib/src/rules/file_names.dart b/pkg/linter/lib/src/rules/file_names.dart
index 174f48b..eaae269 100644
--- a/pkg/linter/lib/src/rules/file_names.dart
+++ b/pkg/linter/lib/src/rules/file_names.dart
@@ -46,10 +46,10 @@
 class FileNames extends LintRule {
   FileNames()
       : super(
-            name: 'file_names',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'file_names',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.file_names;
diff --git a/pkg/linter/lib/src/rules/flutter_style_todos.dart b/pkg/linter/lib/src/rules/flutter_style_todos.dart
index 0e1cc07..2bbacda 100644
--- a/pkg/linter/lib/src/rules/flutter_style_todos.dart
+++ b/pkg/linter/lib/src/rules/flutter_style_todos.dart
@@ -41,10 +41,10 @@
 
   FlutterStyleTodos()
       : super(
-            name: 'flutter_style_todos',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'flutter_style_todos',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.flutter_style_todos;
diff --git a/pkg/linter/lib/src/rules/hash_and_equals.dart b/pkg/linter/lib/src/rules/hash_and_equals.dart
index d94b335..a5c3da3 100644
--- a/pkg/linter/lib/src/rules/hash_and_equals.dart
+++ b/pkg/linter/lib/src/rules/hash_and_equals.dart
@@ -56,10 +56,10 @@
 class HashAndEquals extends LintRule {
   HashAndEquals()
       : super(
-            name: 'hash_and_equals',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'hash_and_equals',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.hash_and_equals;
diff --git a/pkg/linter/lib/src/rules/implementation_imports.dart b/pkg/linter/lib/src/rules/implementation_imports.dart
index 4d3a0e7..b774e77 100644
--- a/pkg/linter/lib/src/rules/implementation_imports.dart
+++ b/pkg/linter/lib/src/rules/implementation_imports.dart
@@ -62,10 +62,10 @@
 class ImplementationImports extends LintRule {
   ImplementationImports()
       : super(
-            name: 'implementation_imports',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'implementation_imports',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.implementation_imports;
diff --git a/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart b/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart
index 519e4a0..e656b19 100644
--- a/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart
+++ b/pkg/linter/lib/src/rules/implicit_call_tearoffs.dart
@@ -49,7 +49,6 @@
           name: 'implicit_call_tearoffs',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/implicit_reopen.dart b/pkg/linter/lib/src/rules/implicit_reopen.dart
index fe98965..20ed0cf 100644
--- a/pkg/linter/lib/src/rules/implicit_reopen.dart
+++ b/pkg/linter/lib/src/rules/implicit_reopen.dart
@@ -53,11 +53,11 @@
 class ImplicitReopen extends LintRule {
   ImplicitReopen()
       : super(
-            name: 'implicit_reopen',
-            description: _desc,
-            details: _details,
-            state: State.experimental(),
-            categories: {LintRuleCategory.errorProne});
+          name: 'implicit_reopen',
+          description: _desc,
+          details: _details,
+          state: State.experimental(),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.implicit_reopen;
diff --git a/pkg/linter/lib/src/rules/invalid_case_patterns.dart b/pkg/linter/lib/src/rules/invalid_case_patterns.dart
index 5307032..012b4aa 100644
--- a/pkg/linter/lib/src/rules/invalid_case_patterns.dart
+++ b/pkg/linter/lib/src/rules/invalid_case_patterns.dart
@@ -240,11 +240,11 @@
 class InvalidCasePatterns extends LintRule {
   InvalidCasePatterns()
       : super(
-            name: 'invalid_case_patterns',
-            description: _desc,
-            details: _details,
-            state: State.experimental(),
-            categories: {LintRuleCategory.languageFeatureUsage});
+          name: 'invalid_case_patterns',
+          description: _desc,
+          details: _details,
+          state: State.experimental(),
+        );
 
   // TODO(pq): update to add specific messages w/ specific corrections
   // https://github.com/dart-lang/linter/issues/4172
diff --git a/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart b/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart
index 88bca2f..1511f47 100644
--- a/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart
+++ b/pkg/linter/lib/src/rules/invalid_runtime_check_with_js_interop_types.dart
@@ -282,10 +282,10 @@
 class InvalidRuntimeCheckWithJSInteropTypes extends LintRule {
   InvalidRuntimeCheckWithJSInteropTypes()
       : super(
-            name: 'invalid_runtime_check_with_js_interop_types',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne, LintRuleCategory.web});
+          name: 'invalid_runtime_check_with_js_interop_types',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/invariant_booleans.dart b/pkg/linter/lib/src/rules/invariant_booleans.dart
index 4250d3a..2841010 100644
--- a/pkg/linter/lib/src/rules/invariant_booleans.dart
+++ b/pkg/linter/lib/src/rules/invariant_booleans.dart
@@ -95,11 +95,11 @@
 class InvariantBooleans extends LintRule {
   InvariantBooleans()
       : super(
-            name: 'invariant_booleans',
-            description: _desc,
-            details: _details,
-            state: State.removed(since: dart3),
-            categories: {LintRuleCategory.errors});
+          name: 'invariant_booleans',
+          description: _desc,
+          details: _details,
+          state: State.removed(since: dart3),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart b/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart
index ef162e4..287d9da 100644
--- a/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart
+++ b/pkg/linter/lib/src/rules/iterable_contains_unrelated_type.dart
@@ -125,7 +125,6 @@
           name: 'iterable_contains_unrelated_type',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.errors},
           state: State.removed(since: dart3_3),
         );
 
diff --git a/pkg/linter/lib/src/rules/join_return_with_assignment.dart b/pkg/linter/lib/src/rules/join_return_with_assignment.dart
index 72723a7..8b95d08 100644
--- a/pkg/linter/lib/src/rules/join_return_with_assignment.dart
+++ b/pkg/linter/lib/src/rules/join_return_with_assignment.dart
@@ -55,10 +55,10 @@
 class JoinReturnWithAssignment extends LintRule {
   JoinReturnWithAssignment()
       : super(
-            name: 'join_return_with_assignment',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'join_return_with_assignment',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.join_return_with_assignment;
diff --git a/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart b/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart
index 707c4ba..345ee2c 100644
--- a/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart
+++ b/pkg/linter/lib/src/rules/leading_newlines_in_multiline_strings.dart
@@ -38,10 +38,10 @@
 class LeadingNewlinesInMultilineStrings extends LintRule {
   LeadingNewlinesInMultilineStrings()
       : super(
-            name: 'leading_newlines_in_multiline_strings',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'leading_newlines_in_multiline_strings',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.leading_newlines_in_multiline_strings;
diff --git a/pkg/linter/lib/src/rules/library_annotations.dart b/pkg/linter/lib/src/rules/library_annotations.dart
index 1f4ae00..36e43b6 100644
--- a/pkg/linter/lib/src/rules/library_annotations.dart
+++ b/pkg/linter/lib/src/rules/library_annotations.dart
@@ -45,10 +45,10 @@
 class LibraryAnnotations extends LintRule {
   LibraryAnnotations()
       : super(
-            name: 'library_annotations',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'library_annotations',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.library_annotations;
diff --git a/pkg/linter/lib/src/rules/library_names.dart b/pkg/linter/lib/src/rules/library_names.dart
index c04093cb..a157178 100644
--- a/pkg/linter/lib/src/rules/library_names.dart
+++ b/pkg/linter/lib/src/rules/library_names.dart
@@ -38,10 +38,10 @@
 class LibraryNames extends LintRule {
   LibraryNames()
       : super(
-            name: 'library_names',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'library_names',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.library_names;
diff --git a/pkg/linter/lib/src/rules/library_prefixes.dart b/pkg/linter/lib/src/rules/library_prefixes.dart
index bd10dac..833d98a 100644
--- a/pkg/linter/lib/src/rules/library_prefixes.dart
+++ b/pkg/linter/lib/src/rules/library_prefixes.dart
@@ -38,10 +38,10 @@
 class LibraryPrefixes extends LintRule {
   LibraryPrefixes()
       : super(
-            name: 'library_prefixes',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'library_prefixes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.library_prefixes;
diff --git a/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart b/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart
index cf03bbd..7a47ec1 100644
--- a/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart
+++ b/pkg/linter/lib/src/rules/library_private_types_in_public_api.dart
@@ -45,10 +45,10 @@
 class LibraryPrivateTypesInPublicApi extends LintRule {
   LibraryPrivateTypesInPublicApi()
       : super(
-            name: 'library_private_types_in_public_api',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.publicInterface});
+          name: 'library_private_types_in_public_api',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.library_private_types_in_public_api;
diff --git a/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart b/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
index d3bb610..41db831 100644
--- a/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
+++ b/pkg/linter/lib/src/rules/lines_longer_than_80_chars.dart
@@ -45,10 +45,10 @@
 class LinesLongerThan80Chars extends LintRule {
   LinesLongerThan80Chars()
       : super(
-            name: 'lines_longer_than_80_chars',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'lines_longer_than_80_chars',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.lines_longer_than_80_chars;
diff --git a/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart b/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart
index 89ad142..d164ed9 100644
--- a/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart
+++ b/pkg/linter/lib/src/rules/list_remove_unrelated_type.dart
@@ -125,7 +125,6 @@
           name: 'list_remove_unrelated_type',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.errors},
           state: State.removed(since: dart3_3),
         );
 
diff --git a/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart b/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart
index 445fe2a..96f33c5 100644
--- a/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart
+++ b/pkg/linter/lib/src/rules/literal_only_boolean_expressions.dart
@@ -113,10 +113,10 @@
 class LiteralOnlyBooleanExpressions extends LintRule {
   LiteralOnlyBooleanExpressions()
       : super(
-            name: 'literal_only_boolean_expressions',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unusedCode});
+          name: 'literal_only_boolean_expressions',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.literal_only_boolean_expressions;
diff --git a/pkg/linter/lib/src/rules/matching_super_parameters.dart b/pkg/linter/lib/src/rules/matching_super_parameters.dart
index b951e3f..c366810 100644
--- a/pkg/linter/lib/src/rules/matching_super_parameters.dart
+++ b/pkg/linter/lib/src/rules/matching_super_parameters.dart
@@ -61,10 +61,10 @@
 class MatchingSuperParameters extends LintRule {
   MatchingSuperParameters()
       : super(
-            name: 'matching_super_parameters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'matching_super_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.matching_super_parameters;
diff --git a/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart b/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart
index f9e4b4e..ee9fb78 100644
--- a/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart
+++ b/pkg/linter/lib/src/rules/missing_code_block_language_in_doc_comment.dart
@@ -44,10 +44,10 @@
 class MissingCodeBlockLanguageInDocComment extends LintRule {
   MissingCodeBlockLanguageInDocComment()
       : super(
-            name: 'missing_code_block_language_in_doc_comment',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'missing_code_block_language_in_doc_comment',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart b/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart
index f65d0d7..0bd1cbd 100644
--- a/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart
+++ b/pkg/linter/lib/src/rules/missing_whitespace_between_adjacent_strings.dart
@@ -36,10 +36,10 @@
 class MissingWhitespaceBetweenAdjacentStrings extends LintRule {
   MissingWhitespaceBetweenAdjacentStrings()
       : super(
-            name: 'missing_whitespace_between_adjacent_strings',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'missing_whitespace_between_adjacent_strings',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart b/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart
index a4efc8d..e91ebaf 100644
--- a/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart
+++ b/pkg/linter/lib/src/rules/no_adjacent_strings_in_list.dart
@@ -38,10 +38,10 @@
 class NoAdjacentStringsInList extends LintRule {
   NoAdjacentStringsInList()
       : super(
-            name: 'no_adjacent_strings_in_list',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'no_adjacent_strings_in_list',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.no_adjacent_strings_in_list;
diff --git a/pkg/linter/lib/src/rules/no_default_cases.dart b/pkg/linter/lib/src/rules/no_default_cases.dart
index 6980137..ff34dda 100644
--- a/pkg/linter/lib/src/rules/no_default_cases.dart
+++ b/pkg/linter/lib/src/rules/no_default_cases.dart
@@ -55,7 +55,6 @@
           name: 'no_default_cases',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
           state: State.experimental(),
         );
 
diff --git a/pkg/linter/lib/src/rules/no_duplicate_case_values.dart b/pkg/linter/lib/src/rules/no_duplicate_case_values.dart
index ede175a..b970347 100644
--- a/pkg/linter/lib/src/rules/no_duplicate_case_values.dart
+++ b/pkg/linter/lib/src/rules/no_duplicate_case_values.dart
@@ -45,10 +45,10 @@
 class NoDuplicateCaseValues extends LintRule {
   NoDuplicateCaseValues()
       : super(
-            name: 'no_duplicate_case_values',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'no_duplicate_case_values',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.no_duplicate_case_values;
diff --git a/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart b/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart
index 5f02175..1588cfe 100644
--- a/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart
+++ b/pkg/linter/lib/src/rules/no_leading_underscores_for_library_prefixes.dart
@@ -33,10 +33,10 @@
 class NoLeadingUnderscoresForLibraryPrefixes extends LintRule {
   NoLeadingUnderscoresForLibraryPrefixes()
       : super(
-            name: 'no_leading_underscores_for_library_prefixes',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'no_leading_underscores_for_library_prefixes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart b/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart
index a3d766a..4c8358e 100644
--- a/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart
+++ b/pkg/linter/lib/src/rules/no_leading_underscores_for_local_identifiers.dart
@@ -53,10 +53,10 @@
 class NoLeadingUnderscoresForLocalIdentifiers extends LintRule {
   NoLeadingUnderscoresForLocalIdentifiers()
       : super(
-            name: 'no_leading_underscores_for_local_identifiers',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'no_leading_underscores_for_local_identifiers',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart b/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart
index 712f20f..0ed6717 100644
--- a/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart
+++ b/pkg/linter/lib/src/rules/no_literal_bool_comparisons.dart
@@ -46,7 +46,6 @@
           name: 'no_literal_bool_comparisons',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.effectiveDart, LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/no_logic_in_create_state.dart b/pkg/linter/lib/src/rules/no_logic_in_create_state.dart
index 4eb82a4..6fa7e62 100644
--- a/pkg/linter/lib/src/rules/no_logic_in_create_state.dart
+++ b/pkg/linter/lib/src/rules/no_logic_in_create_state.dart
@@ -62,10 +62,10 @@
 class NoLogicInCreateState extends LintRule {
   NoLogicInCreateState()
       : super(
-            name: 'no_logic_in_create_state',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errors, LintRuleCategory.flutter});
+          name: 'no_logic_in_create_state',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.no_logic_in_create_state;
diff --git a/pkg/linter/lib/src/rules/no_runtimeType_toString.dart b/pkg/linter/lib/src/rules/no_runtimeType_toString.dart
index 72a2f80..34e9f92 100644
--- a/pkg/linter/lib/src/rules/no_runtimeType_toString.dart
+++ b/pkg/linter/lib/src/rules/no_runtimeType_toString.dart
@@ -45,10 +45,10 @@
 class NoRuntimeTypeToString extends LintRule {
   NoRuntimeTypeToString()
       : super(
-            name: 'no_runtimeType_toString',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.nonPerformant});
+          name: 'no_runtimeType_toString',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.no_runtimeType_toString;
diff --git a/pkg/linter/lib/src/rules/no_self_assignments.dart b/pkg/linter/lib/src/rules/no_self_assignments.dart
index 194a050..6d494bf 100644
--- a/pkg/linter/lib/src/rules/no_self_assignments.dart
+++ b/pkg/linter/lib/src/rules/no_self_assignments.dart
@@ -116,10 +116,10 @@
 class NoSelfAssignments extends LintRule {
   NoSelfAssignments()
       : super(
-            name: 'no_self_assignments',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unintentional});
+          name: 'no_self_assignments',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.no_self_assignments;
diff --git a/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart b/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
index aa3b27d..c8c1802 100644
--- a/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
+++ b/pkg/linter/lib/src/rules/no_wildcard_variable_uses.dart
@@ -49,13 +49,10 @@
 class NoWildcardVariableUses extends LintRule {
   NoWildcardVariableUses()
       : super(
-            name: 'no_wildcard_variable_uses',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.languageFeatureUsage,
-              LintRuleCategory.unintentional
-            });
+          name: 'no_wildcard_variable_uses',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.no_wildcard_variable_uses;
diff --git a/pkg/linter/lib/src/rules/non_constant_identifier_names.dart b/pkg/linter/lib/src/rules/non_constant_identifier_names.dart
index 00700f6..9ad2ae2 100644
--- a/pkg/linter/lib/src/rules/non_constant_identifier_names.dart
+++ b/pkg/linter/lib/src/rules/non_constant_identifier_names.dart
@@ -39,10 +39,10 @@
 class NonConstantIdentifierNames extends LintRule {
   NonConstantIdentifierNames()
       : super(
-            name: 'non_constant_identifier_names',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'non_constant_identifier_names',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.non_constant_identifier_names;
diff --git a/pkg/linter/lib/src/rules/noop_primitive_operations.dart b/pkg/linter/lib/src/rules/noop_primitive_operations.dart
index ef6eb7f..da8cdde 100644
--- a/pkg/linter/lib/src/rules/noop_primitive_operations.dart
+++ b/pkg/linter/lib/src/rules/noop_primitive_operations.dart
@@ -56,7 +56,6 @@
           name: 'noop_primitive_operations',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart b/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart
index 5bd0abd..2726fa7 100644
--- a/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart
+++ b/pkg/linter/lib/src/rules/null_check_on_nullable_type_parameter.dart
@@ -50,7 +50,6 @@
           name: 'null_check_on_nullable_type_parameter',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/null_closures.dart b/pkg/linter/lib/src/rules/null_closures.dart
index bb07d53..314fae2 100644
--- a/pkg/linter/lib/src/rules/null_closures.dart
+++ b/pkg/linter/lib/src/rules/null_closures.dart
@@ -208,10 +208,10 @@
 class NullClosures extends LintRule {
   NullClosures()
       : super(
-            name: 'null_closures',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'null_closures',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.null_closures;
diff --git a/pkg/linter/lib/src/rules/omit_local_variable_types.dart b/pkg/linter/lib/src/rules/omit_local_variable_types.dart
index 0aaefdc..9bebf8f 100644
--- a/pkg/linter/lib/src/rules/omit_local_variable_types.dart
+++ b/pkg/linter/lib/src/rules/omit_local_variable_types.dart
@@ -67,10 +67,10 @@
 class OmitLocalVariableTypes extends LintRule {
   OmitLocalVariableTypes()
       : super(
-            name: 'omit_local_variable_types',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'omit_local_variable_types',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const [
diff --git a/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart b/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart
index 39e31fd..0f2ed0c 100644
--- a/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart
+++ b/pkg/linter/lib/src/rules/omit_obvious_local_variable_types.dart
@@ -81,11 +81,11 @@
 class OmitObviousLocalVariableTypes extends LintRule {
   OmitObviousLocalVariableTypes()
       : super(
-            name: 'omit_obvious_local_variable_types',
-            description: _desc,
-            details: _details,
-            state: State.experimental(),
-            categories: {LintRuleCategory.style});
+          name: 'omit_obvious_local_variable_types',
+          description: _desc,
+          details: _details,
+          state: State.experimental(),
+        );
 
   @override
   List<String> get incompatibleRules => const ['always_specify_types'];
diff --git a/pkg/linter/lib/src/rules/one_member_abstracts.dart b/pkg/linter/lib/src/rules/one_member_abstracts.dart
index 7862554..0f07f81 100644
--- a/pkg/linter/lib/src/rules/one_member_abstracts.dart
+++ b/pkg/linter/lib/src/rules/one_member_abstracts.dart
@@ -40,14 +40,10 @@
 class OneMemberAbstracts extends LintRule {
   OneMemberAbstracts()
       : super(
-            name: 'one_member_abstracts',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.languageFeatureUsage,
-              LintRuleCategory.style,
-            });
+          name: 'one_member_abstracts',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.one_member_abstracts;
diff --git a/pkg/linter/lib/src/rules/only_throw_errors.dart b/pkg/linter/lib/src/rules/only_throw_errors.dart
index b2852dc..facd2b9 100644
--- a/pkg/linter/lib/src/rules/only_throw_errors.dart
+++ b/pkg/linter/lib/src/rules/only_throw_errors.dart
@@ -64,10 +64,10 @@
 class OnlyThrowErrors extends LintRule {
   OnlyThrowErrors()
       : super(
-            name: 'only_throw_errors',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'only_throw_errors',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.only_throw_errors;
diff --git a/pkg/linter/lib/src/rules/overridden_fields.dart b/pkg/linter/lib/src/rules/overridden_fields.dart
index 0c14cea..a76a224 100644
--- a/pkg/linter/lib/src/rules/overridden_fields.dart
+++ b/pkg/linter/lib/src/rules/overridden_fields.dart
@@ -101,10 +101,10 @@
 class OverriddenFields extends LintRule {
   OverriddenFields()
       : super(
-            name: 'overridden_fields',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'overridden_fields',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.overridden_fields;
diff --git a/pkg/linter/lib/src/rules/package_api_docs.dart b/pkg/linter/lib/src/rules/package_api_docs.dart
index d47518e..8f6d1b7 100644
--- a/pkg/linter/lib/src/rules/package_api_docs.dart
+++ b/pkg/linter/lib/src/rules/package_api_docs.dart
@@ -61,13 +61,10 @@
 class PackageApiDocs extends LintRule {
   PackageApiDocs()
       : super(
-            name: 'package_api_docs',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.publicInterface
-            });
+          name: 'package_api_docs',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.package_api_docs;
diff --git a/pkg/linter/lib/src/rules/package_prefixed_library_names.dart b/pkg/linter/lib/src/rules/package_prefixed_library_names.dart
index 69c6900..5e1dae8 100644
--- a/pkg/linter/lib/src/rules/package_prefixed_library_names.dart
+++ b/pkg/linter/lib/src/rules/package_prefixed_library_names.dart
@@ -54,10 +54,10 @@
 class PackagePrefixedLibraryNames extends LintRule {
   PackagePrefixedLibraryNames()
       : super(
-            name: 'package_prefixed_library_names',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'package_prefixed_library_names',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.package_prefixed_library_names;
diff --git a/pkg/linter/lib/src/rules/parameter_assignments.dart b/pkg/linter/lib/src/rules/parameter_assignments.dart
index d92a220..aa34f57 100644
--- a/pkg/linter/lib/src/rules/parameter_assignments.dart
+++ b/pkg/linter/lib/src/rules/parameter_assignments.dart
@@ -94,10 +94,10 @@
 class ParameterAssignments extends LintRule {
   ParameterAssignments()
       : super(
-            name: 'parameter_assignments',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'parameter_assignments',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.parameter_assignments;
diff --git a/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart b/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart
index 3da829c..4f30645 100644
--- a/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart
+++ b/pkg/linter/lib/src/rules/prefer_adjacent_string_concatenation.dart
@@ -32,10 +32,10 @@
 class PreferAdjacentStringConcatenation extends LintRule {
   PreferAdjacentStringConcatenation()
       : super(
-            name: 'prefer_adjacent_string_concatenation',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_adjacent_string_concatenation',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_adjacent_string_concatenation;
diff --git a/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart b/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart
index c1e812b..a73907d 100644
--- a/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart
+++ b/pkg/linter/lib/src/rules/prefer_asserts_in_initializer_lists.dart
@@ -36,10 +36,10 @@
 class PreferAssertsInInitializerLists extends LintRule {
   PreferAssertsInInitializerLists()
       : super(
-            name: 'prefer_asserts_in_initializer_lists',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_asserts_in_initializer_lists',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_asserts_in_initializer_lists;
diff --git a/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart b/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart
index 8f4b086..4fdad59 100644
--- a/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart
+++ b/pkg/linter/lib/src/rules/prefer_asserts_with_message.dart
@@ -41,10 +41,10 @@
 class PreferAssertsWithMessage extends LintRule {
   PreferAssertsWithMessage()
       : super(
-            name: 'prefer_asserts_with_message',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_asserts_with_message',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_asserts_with_message;
diff --git a/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart b/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart
index 40df60c..a927e33 100644
--- a/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart
+++ b/pkg/linter/lib/src/rules/prefer_bool_in_asserts.dart
@@ -36,11 +36,11 @@
 class PreferBoolInAsserts extends LintRule {
   PreferBoolInAsserts()
       : super(
-            name: 'prefer_bool_in_asserts',
-            description: _desc,
-            details: _details,
-            state: State.removed(since: dart3),
-            categories: {LintRuleCategory.style});
+          name: 'prefer_bool_in_asserts',
+          description: _desc,
+          details: _details,
+          state: State.removed(since: dart3),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/prefer_collection_literals.dart b/pkg/linter/lib/src/rules/prefer_collection_literals.dart
index 5cc4485..52e73c9 100644
--- a/pkg/linter/lib/src/rules/prefer_collection_literals.dart
+++ b/pkg/linter/lib/src/rules/prefer_collection_literals.dart
@@ -60,10 +60,10 @@
 class PreferCollectionLiterals extends LintRule {
   PreferCollectionLiterals()
       : super(
-            name: 'prefer_collection_literals',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_collection_literals',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_collection_literals;
diff --git a/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart b/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart
index 5aece0b..822abd9 100644
--- a/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart
+++ b/pkg/linter/lib/src/rules/prefer_conditional_assignment.dart
@@ -70,10 +70,10 @@
 class PreferConditionalAssignment extends LintRule {
   PreferConditionalAssignment()
       : super(
-            name: 'prefer_conditional_assignment',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_conditional_assignment',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_conditional_assignment;
diff --git a/pkg/linter/lib/src/rules/prefer_const_constructors.dart b/pkg/linter/lib/src/rules/prefer_const_constructors.dart
index 873e8e4..06c4826 100644
--- a/pkg/linter/lib/src/rules/prefer_const_constructors.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_constructors.dart
@@ -58,10 +58,10 @@
 class PreferConstConstructors extends LintRule {
   PreferConstConstructors()
       : super(
-            name: 'prefer_const_constructors',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_const_constructors',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_const_constructors;
diff --git a/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart b/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart
index 52b1a3c..c57109b 100644
--- a/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_constructors_in_immutables.dart
@@ -43,10 +43,10 @@
 class PreferConstConstructorsInImmutables extends LintRule {
   PreferConstConstructorsInImmutables()
       : super(
-            name: 'prefer_const_constructors_in_immutables',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_const_constructors_in_immutables',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/prefer_const_declarations.dart b/pkg/linter/lib/src/rules/prefer_const_declarations.dart
index 1c2699a..3134ba8 100644
--- a/pkg/linter/lib/src/rules/prefer_const_declarations.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_declarations.dart
@@ -41,10 +41,10 @@
 class PreferConstDeclarations extends LintRule {
   PreferConstDeclarations()
       : super(
-            name: 'prefer_const_declarations',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_const_declarations',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_const_declarations;
diff --git a/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart b/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart
index 124efd3..5befefd 100644
--- a/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart
+++ b/pkg/linter/lib/src/rules/prefer_const_literals_to_create_immutables.dart
@@ -40,10 +40,10 @@
 class PreferConstLiteralsToCreateImmutables extends LintRule {
   PreferConstLiteralsToCreateImmutables()
       : super(
-            name: 'prefer_const_literals_to_create_immutables',
-            description: desc,
-            details: details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_const_literals_to_create_immutables',
+          description: desc,
+          details: details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart b/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart
index 25af945c..c72c37b 100644
--- a/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart
+++ b/pkg/linter/lib/src/rules/prefer_constructors_over_static_methods.dart
@@ -49,10 +49,10 @@
 class PreferConstructorsOverStaticMethods extends LintRule {
   PreferConstructorsOverStaticMethods()
       : super(
-            name: 'prefer_constructors_over_static_methods',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_constructors_over_static_methods',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/prefer_contains.dart b/pkg/linter/lib/src/rules/prefer_contains.dart
index a2019cc..c23944a 100644
--- a/pkg/linter/lib/src/rules/prefer_contains.dart
+++ b/pkg/linter/lib/src/rules/prefer_contains.dart
@@ -36,10 +36,10 @@
 class PreferContains extends LintRule {
   PreferContains()
       : super(
-            name: 'prefer_contains',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_contains',
+          description: _desc,
+          details: _details,
+        );
 
   // TODO(brianwilkerson): Both `alwaysFalse` and `alwaysTrue` should be warnings
   //  rather than lints because they represent a bug rather than a style
diff --git a/pkg/linter/lib/src/rules/prefer_double_quotes.dart b/pkg/linter/lib/src/rules/prefer_double_quotes.dart
index baca059..70ed6dfb7 100644
--- a/pkg/linter/lib/src/rules/prefer_double_quotes.dart
+++ b/pkg/linter/lib/src/rules/prefer_double_quotes.dart
@@ -45,10 +45,10 @@
 class PreferDoubleQuotes extends LintRule {
   PreferDoubleQuotes()
       : super(
-            name: 'prefer_double_quotes',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_double_quotes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const ['prefer_single_quotes'];
diff --git a/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart b/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart
index 80e5cf2..7664800 100644
--- a/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart
+++ b/pkg/linter/lib/src/rules/prefer_equal_for_default_values.dart
@@ -27,11 +27,11 @@
 class PreferEqualForDefaultValues extends LintRule {
   PreferEqualForDefaultValues()
       : super(
-            name: 'prefer_equal_for_default_values',
-            description: _desc,
-            details: _details,
-            state: State.removed(since: dart3),
-            categories: {LintRuleCategory.style});
+          name: 'prefer_equal_for_default_values',
+          description: _desc,
+          details: _details,
+          state: State.removed(since: dart3),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart b/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart
index fb33908..5a1a0f3 100644
--- a/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart
+++ b/pkg/linter/lib/src/rules/prefer_expression_function_bodies.dart
@@ -55,10 +55,10 @@
 class PreferExpressionFunctionBodies extends LintRule {
   PreferExpressionFunctionBodies()
       : super(
-            name: 'prefer_expression_function_bodies',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_expression_function_bodies',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_expression_function_bodies;
diff --git a/pkg/linter/lib/src/rules/prefer_final_fields.dart b/pkg/linter/lib/src/rules/prefer_final_fields.dart
index a967af8..b79de18 100644
--- a/pkg/linter/lib/src/rules/prefer_final_fields.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_fields.dart
@@ -87,13 +87,10 @@
 class PreferFinalFields extends LintRule {
   PreferFinalFields()
       : super(
-            name: 'prefer_final_fields',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'prefer_final_fields',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_final_fields;
diff --git a/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart b/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart
index 74ce1bf..0e494f7 100644
--- a/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_in_for_each.dart
@@ -47,10 +47,10 @@
 class PreferFinalInForEach extends LintRule {
   PreferFinalInForEach()
       : super(
-            name: 'prefer_final_in_for_each',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_final_in_for_each',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/prefer_final_locals.dart b/pkg/linter/lib/src/rules/prefer_final_locals.dart
index 99ec197..d45052c 100644
--- a/pkg/linter/lib/src/rules/prefer_final_locals.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_locals.dart
@@ -52,10 +52,10 @@
 class PreferFinalLocals extends LintRule {
   PreferFinalLocals()
       : super(
-            name: 'prefer_final_locals',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_final_locals',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const ['unnecessary_final'];
diff --git a/pkg/linter/lib/src/rules/prefer_final_parameters.dart b/pkg/linter/lib/src/rules/prefer_final_parameters.dart
index 51ca8b0..371ba35 100644
--- a/pkg/linter/lib/src/rules/prefer_final_parameters.dart
+++ b/pkg/linter/lib/src/rules/prefer_final_parameters.dart
@@ -67,10 +67,10 @@
 class PreferFinalParameters extends LintRule {
   PreferFinalParameters()
       : super(
-            name: 'prefer_final_parameters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_final_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules =>
diff --git a/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart b/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart
index 3def94e..dbef7ff 100644
--- a/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart
+++ b/pkg/linter/lib/src/rules/prefer_for_elements_to_map_fromIterable.dart
@@ -55,10 +55,10 @@
 class PreferForElementsToMapFromIterable extends LintRule {
   PreferForElementsToMapFromIterable()
       : super(
-            name: 'prefer_for_elements_to_map_fromIterable',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_for_elements_to_map_fromIterable',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/prefer_foreach.dart b/pkg/linter/lib/src/rules/prefer_foreach.dart
index f7618d2..a627527 100644
--- a/pkg/linter/lib/src/rules/prefer_foreach.dart
+++ b/pkg/linter/lib/src/rules/prefer_foreach.dart
@@ -47,10 +47,10 @@
 class PreferForeach extends LintRule {
   PreferForeach()
       : super(
-            name: 'prefer_foreach',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_foreach',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_foreach;
diff --git a/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart b/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart
index 34e44ff..47a59db 100644
--- a/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart
+++ b/pkg/linter/lib/src/rules/prefer_function_declarations_over_variables.dart
@@ -41,13 +41,10 @@
 class PreferFunctionDeclarationsOverVariables extends LintRule {
   PreferFunctionDeclarationsOverVariables()
       : super(
-            name: 'prefer_function_declarations_over_variables',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'prefer_function_declarations_over_variables',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart b/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart
index 35ebbf4..4c052d0 100644
--- a/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart
+++ b/pkg/linter/lib/src/rules/prefer_generic_function_type_aliases.dart
@@ -36,10 +36,10 @@
 class PreferGenericFunctionTypeAliases extends LintRule {
   PreferGenericFunctionTypeAliases()
       : super(
-            name: 'prefer_generic_function_type_aliases',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_generic_function_type_aliases',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart b/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart
index 83dd83d0..5844b25 100644
--- a/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart
+++ b/pkg/linter/lib/src/rules/prefer_if_elements_to_conditional_expressions.dart
@@ -28,10 +28,10 @@
 class PreferIfElementsToConditionalExpressions extends LintRule {
   PreferIfElementsToConditionalExpressions()
       : super(
-            name: 'prefer_if_elements_to_conditional_expressions',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_if_elements_to_conditional_expressions',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/prefer_if_null_operators.dart b/pkg/linter/lib/src/rules/prefer_if_null_operators.dart
index a70e85c..99e4a52 100644
--- a/pkg/linter/lib/src/rules/prefer_if_null_operators.dart
+++ b/pkg/linter/lib/src/rules/prefer_if_null_operators.dart
@@ -30,10 +30,10 @@
 class PreferIfNullOperators extends LintRule {
   PreferIfNullOperators()
       : super(
-            name: 'prefer_if_null_operators',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_if_null_operators',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_if_null_operators;
diff --git a/pkg/linter/lib/src/rules/prefer_initializing_formals.dart b/pkg/linter/lib/src/rules/prefer_initializing_formals.dart
index 2e42c88..c9cebe3 100644
--- a/pkg/linter/lib/src/rules/prefer_initializing_formals.dart
+++ b/pkg/linter/lib/src/rules/prefer_initializing_formals.dart
@@ -119,10 +119,10 @@
 class PreferInitializingFormals extends LintRule {
   PreferInitializingFormals()
       : super(
-            name: 'prefer_initializing_formals',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_initializing_formals',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_initializing_formals;
diff --git a/pkg/linter/lib/src/rules/prefer_inlined_adds.dart b/pkg/linter/lib/src/rules/prefer_inlined_adds.dart
index c5ac68e..53d8f6e 100644
--- a/pkg/linter/lib/src/rules/prefer_inlined_adds.dart
+++ b/pkg/linter/lib/src/rules/prefer_inlined_adds.dart
@@ -31,10 +31,10 @@
 class PreferInlinedAdds extends LintRule {
   PreferInlinedAdds()
       : super(
-            name: 'prefer_inlined_adds',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_inlined_adds',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/prefer_int_literals.dart b/pkg/linter/lib/src/rules/prefer_int_literals.dart
index dbb0a79..5bb66de 100644
--- a/pkg/linter/lib/src/rules/prefer_int_literals.dart
+++ b/pkg/linter/lib/src/rules/prefer_int_literals.dart
@@ -37,10 +37,10 @@
 class PreferIntLiterals extends LintRule {
   PreferIntLiterals()
       : super(
-            name: 'prefer_int_literals',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_int_literals',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_int_literals;
diff --git a/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart b/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart
index 0fb67c5..236a18c 100644
--- a/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart
+++ b/pkg/linter/lib/src/rules/prefer_interpolation_to_compose_strings.dart
@@ -33,10 +33,10 @@
 class PreferInterpolationToComposeStrings extends LintRule {
   PreferInterpolationToComposeStrings()
       : super(
-            name: 'prefer_interpolation_to_compose_strings',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_interpolation_to_compose_strings',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/prefer_is_empty.dart b/pkg/linter/lib/src/rules/prefer_is_empty.dart
index e96bbfe..db31b47 100644
--- a/pkg/linter/lib/src/rules/prefer_is_empty.dart
+++ b/pkg/linter/lib/src/rules/prefer_is_empty.dart
@@ -40,10 +40,10 @@
 class PreferIsEmpty extends LintRule {
   PreferIsEmpty()
       : super(
-            name: 'prefer_is_empty',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_is_empty',
+          description: _desc,
+          details: _details,
+        );
 
   // TODO(brianwilkerson): Both `alwaysFalse` and `alwaysTrue` should be warnings
   //  rather than lints because they represent a bug rather than a style
diff --git a/pkg/linter/lib/src/rules/prefer_is_not_empty.dart b/pkg/linter/lib/src/rules/prefer_is_not_empty.dart
index 71dd0eb..5e5d0a8 100644
--- a/pkg/linter/lib/src/rules/prefer_is_not_empty.dart
+++ b/pkg/linter/lib/src/rules/prefer_is_not_empty.dart
@@ -38,10 +38,10 @@
 class PreferIsNotEmpty extends LintRule {
   PreferIsNotEmpty()
       : super(
-            name: 'prefer_is_not_empty',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_is_not_empty',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_is_not_empty;
diff --git a/pkg/linter/lib/src/rules/prefer_is_not_operator.dart b/pkg/linter/lib/src/rules/prefer_is_not_operator.dart
index 3e9f463..3876d5e 100644
--- a/pkg/linter/lib/src/rules/prefer_is_not_operator.dart
+++ b/pkg/linter/lib/src/rules/prefer_is_not_operator.dart
@@ -33,10 +33,10 @@
 class PreferIsNotOperator extends LintRule {
   PreferIsNotOperator()
       : super(
-            name: 'prefer_is_not_operator',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_is_not_operator',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_is_not_operator;
diff --git a/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart b/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart
index f342347..9a2f0f1 100644
--- a/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart
+++ b/pkg/linter/lib/src/rules/prefer_iterable_whereType.dart
@@ -30,10 +30,10 @@
 class PreferIterableWhereType extends LintRule {
   PreferIterableWhereType()
       : super(
-            name: 'prefer_iterable_whereType',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_iterable_whereType',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_iterable_whereType;
diff --git a/pkg/linter/lib/src/rules/prefer_mixin.dart b/pkg/linter/lib/src/rules/prefer_mixin.dart
index 3f1112b..79204f7 100644
--- a/pkg/linter/lib/src/rules/prefer_mixin.dart
+++ b/pkg/linter/lib/src/rules/prefer_mixin.dart
@@ -35,13 +35,10 @@
 class PreferMixin extends LintRule {
   PreferMixin()
       : super(
-            name: 'prefer_mixin',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.languageFeatureUsage,
-              LintRuleCategory.style
-            });
+          name: 'prefer_mixin',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_mixin;
diff --git a/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart b/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart
index 807239c..f761bcd 100644
--- a/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart
+++ b/pkg/linter/lib/src/rules/prefer_null_aware_method_calls.dart
@@ -33,7 +33,6 @@
           name: 'prefer_null_aware_method_calls',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.brevity, LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart b/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart
index a147c2f..c901e9e 100644
--- a/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart
+++ b/pkg/linter/lib/src/rules/prefer_null_aware_operators.dart
@@ -30,10 +30,10 @@
 class PreferNullAwareOperators extends LintRule {
   PreferNullAwareOperators()
       : super(
-            name: 'prefer_null_aware_operators',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_null_aware_operators',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_null_aware_operators;
diff --git a/pkg/linter/lib/src/rules/prefer_relative_imports.dart b/pkg/linter/lib/src/rules/prefer_relative_imports.dart
index 0321a89..3647f8a 100644
--- a/pkg/linter/lib/src/rules/prefer_relative_imports.dart
+++ b/pkg/linter/lib/src/rules/prefer_relative_imports.dart
@@ -36,10 +36,10 @@
 class PreferRelativeImports extends LintRule {
   PreferRelativeImports()
       : super(
-            name: 'prefer_relative_imports',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'prefer_relative_imports',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const ['always_use_package_imports'];
diff --git a/pkg/linter/lib/src/rules/prefer_single_quotes.dart b/pkg/linter/lib/src/rules/prefer_single_quotes.dart
index c4bad1e3..ef9f381 100644
--- a/pkg/linter/lib/src/rules/prefer_single_quotes.dart
+++ b/pkg/linter/lib/src/rules/prefer_single_quotes.dart
@@ -46,10 +46,10 @@
 class PreferSingleQuotes extends LintRule {
   PreferSingleQuotes()
       : super(
-            name: 'prefer_single_quotes',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'prefer_single_quotes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules => const ['prefer_double_quotes'];
diff --git a/pkg/linter/lib/src/rules/prefer_spread_collections.dart b/pkg/linter/lib/src/rules/prefer_spread_collections.dart
index 35cec05..d806cef 100644
--- a/pkg/linter/lib/src/rules/prefer_spread_collections.dart
+++ b/pkg/linter/lib/src/rules/prefer_spread_collections.dart
@@ -71,10 +71,10 @@
 class PreferSpreadCollections extends LintRule {
   PreferSpreadCollections()
       : super(
-            name: 'prefer_spread_collections',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'prefer_spread_collections',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_spread_collections;
diff --git a/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart b/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart
index 5f736bd..5d1ea6ab 100644
--- a/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart
+++ b/pkg/linter/lib/src/rules/prefer_typing_uninitialized_variables.dart
@@ -60,13 +60,10 @@
 class PreferTypingUninitializedVariables extends LintRule {
   PreferTypingUninitializedVariables()
       : super(
-            name: 'prefer_typing_uninitialized_variables',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.errorProne,
-              LintRuleCategory.unintentional
-            });
+          name: 'prefer_typing_uninitialized_variables',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/prefer_void_to_null.dart b/pkg/linter/lib/src/rules/prefer_void_to_null.dart
index c9628b2..db9e2e7 100644
--- a/pkg/linter/lib/src/rules/prefer_void_to_null.dart
+++ b/pkg/linter/lib/src/rules/prefer_void_to_null.dart
@@ -50,10 +50,10 @@
 class PreferVoidToNull extends LintRule {
   PreferVoidToNull()
       : super(
-            name: 'prefer_void_to_null',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'prefer_void_to_null',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.prefer_void_to_null;
diff --git a/pkg/linter/lib/src/rules/provide_deprecation_message.dart b/pkg/linter/lib/src/rules/provide_deprecation_message.dart
index b7fbbfa..b24720e 100644
--- a/pkg/linter/lib/src/rules/provide_deprecation_message.dart
+++ b/pkg/linter/lib/src/rules/provide_deprecation_message.dart
@@ -35,10 +35,10 @@
 class ProvideDeprecationMessage extends LintRule {
   ProvideDeprecationMessage()
       : super(
-            name: 'provide_deprecation_message',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.publicInterface});
+          name: 'provide_deprecation_message',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.provide_deprecation_message;
diff --git a/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart b/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart
index 1566c14..60cbf3a 100644
--- a/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart
+++ b/pkg/linter/lib/src/rules/pub/depend_on_referenced_packages.dart
@@ -48,10 +48,10 @@
 class DependOnReferencedPackages extends LintRule {
   DependOnReferencedPackages()
       : super(
-            name: 'depend_on_referenced_packages',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.pub});
+          name: 'depend_on_referenced_packages',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.depend_on_referenced_packages;
diff --git a/pkg/linter/lib/src/rules/pub/package_names.dart b/pkg/linter/lib/src/rules/pub/package_names.dart
index 39c2348..6cd9be4 100644
--- a/pkg/linter/lib/src/rules/pub/package_names.dart
+++ b/pkg/linter/lib/src/rules/pub/package_names.dart
@@ -23,10 +23,10 @@
 class PackageNames extends LintRule {
   PackageNames()
       : super(
-            name: 'package_names',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'package_names',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.package_names;
diff --git a/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart b/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart
index 2d91e11..03dbfb3 100644
--- a/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart
+++ b/pkg/linter/lib/src/rules/pub/secure_pubspec_urls.dart
@@ -34,10 +34,10 @@
 class SecurePubspecUrls extends LintRule {
   SecurePubspecUrls()
       : super(
-            name: 'secure_pubspec_urls',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.pub});
+          name: 'secure_pubspec_urls',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.secure_pubspec_urls;
diff --git a/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart b/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart
index 244e1eb..6a25c66 100644
--- a/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart
+++ b/pkg/linter/lib/src/rules/pub/sort_pub_dependencies.dart
@@ -19,10 +19,10 @@
 class SortPubDependencies extends LintRule {
   SortPubDependencies()
       : super(
-            name: 'sort_pub_dependencies',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.pub});
+          name: 'sort_pub_dependencies',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.sort_pub_dependencies;
diff --git a/pkg/linter/lib/src/rules/public_member_api_docs.dart b/pkg/linter/lib/src/rules/public_member_api_docs.dart
index 28cb86f..c40619e 100644
--- a/pkg/linter/lib/src/rules/public_member_api_docs.dart
+++ b/pkg/linter/lib/src/rules/public_member_api_docs.dart
@@ -69,13 +69,10 @@
 class PublicMemberApiDocs extends LintRule {
   PublicMemberApiDocs()
       : super(
-            name: 'public_member_api_docs',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.publicInterface,
-              LintRuleCategory.style
-            });
+          name: 'public_member_api_docs',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.public_member_api_docs;
diff --git a/pkg/linter/lib/src/rules/recursive_getters.dart b/pkg/linter/lib/src/rules/recursive_getters.dart
index 8ff5b91..f649d53 100644
--- a/pkg/linter/lib/src/rules/recursive_getters.dart
+++ b/pkg/linter/lib/src/rules/recursive_getters.dart
@@ -39,13 +39,10 @@
 class RecursiveGetters extends LintRule {
   RecursiveGetters()
       : super(
-            name: 'recursive_getters',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.errorProne,
-              LintRuleCategory.unintentional
-            });
+          name: 'recursive_getters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.recursive_getters;
diff --git a/pkg/linter/lib/src/rules/require_trailing_commas.dart b/pkg/linter/lib/src/rules/require_trailing_commas.dart
index 48b094c..5215cf6 100644
--- a/pkg/linter/lib/src/rules/require_trailing_commas.dart
+++ b/pkg/linter/lib/src/rules/require_trailing_commas.dart
@@ -52,7 +52,6 @@
           name: 'require_trailing_commas',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart b/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart
index 905d577..822e847 100644
--- a/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart
+++ b/pkg/linter/lib/src/rules/sized_box_for_whitespace.dart
@@ -51,10 +51,10 @@
 class SizedBoxForWhitespace extends LintRule {
   SizedBoxForWhitespace()
       : super(
-            name: 'sized_box_for_whitespace',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'sized_box_for_whitespace',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.sized_box_for_whitespace;
diff --git a/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart b/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart
index 2ff0555..bea0b12 100644
--- a/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart
+++ b/pkg/linter/lib/src/rules/sized_box_shrink_expand.dart
@@ -61,10 +61,10 @@
 class SizedBoxShrinkExpand extends LintRule {
   SizedBoxShrinkExpand()
       : super(
-            name: 'sized_box_shrink_expand',
-            description: 'Use SizedBox shrink and expand named constructors.',
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'sized_box_shrink_expand',
+          description: 'Use SizedBox shrink and expand named constructors.',
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.sized_box_shrink_expand;
diff --git a/pkg/linter/lib/src/rules/slash_for_doc_comments.dart b/pkg/linter/lib/src/rules/slash_for_doc_comments.dart
index 5652bcc..0ba1dda 100644
--- a/pkg/linter/lib/src/rules/slash_for_doc_comments.dart
+++ b/pkg/linter/lib/src/rules/slash_for_doc_comments.dart
@@ -46,13 +46,10 @@
 class SlashForDocComments extends LintRule {
   SlashForDocComments()
       : super(
-            name: 'slash_for_doc_comments',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'slash_for_doc_comments',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/sort_child_properties_last.dart b/pkg/linter/lib/src/rules/sort_child_properties_last.dart
index 84278ad..0bd93e6 100644
--- a/pkg/linter/lib/src/rules/sort_child_properties_last.dart
+++ b/pkg/linter/lib/src/rules/sort_child_properties_last.dart
@@ -84,10 +84,10 @@
 class SortChildPropertiesLast extends LintRule {
   SortChildPropertiesLast()
       : super(
-            name: 'sort_child_properties_last',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'sort_child_properties_last',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.sort_child_properties_last;
diff --git a/pkg/linter/lib/src/rules/sort_constructors_first.dart b/pkg/linter/lib/src/rules/sort_constructors_first.dart
index 639c18c..333a145 100644
--- a/pkg/linter/lib/src/rules/sort_constructors_first.dart
+++ b/pkg/linter/lib/src/rules/sort_constructors_first.dart
@@ -36,10 +36,10 @@
 class SortConstructorsFirst extends LintRule {
   SortConstructorsFirst()
       : super(
-            name: 'sort_constructors_first',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'sort_constructors_first',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.sort_constructors_first;
diff --git a/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart b/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart
index 3bbfcea..f94a463 100644
--- a/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart
+++ b/pkg/linter/lib/src/rules/sort_unnamed_constructors_first.dart
@@ -36,10 +36,10 @@
 class SortUnnamedConstructorsFirst extends LintRule {
   SortUnnamedConstructorsFirst()
       : super(
-            name: 'sort_unnamed_constructors_first',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'sort_unnamed_constructors_first',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.sort_unnamed_constructors_first;
diff --git a/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart b/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart
index bb7549b..847be7c 100644
--- a/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart
+++ b/pkg/linter/lib/src/rules/specify_nonobvious_local_variable_types.dart
@@ -92,11 +92,11 @@
 class SpecifyNonObviousLocalVariableTypes extends LintRule {
   SpecifyNonObviousLocalVariableTypes()
       : super(
-            name: 'specify_nonobvious_local_variable_types',
-            description: _desc,
-            details: _details,
-            state: State.experimental(),
-            categories: {LintRuleCategory.style});
+          name: 'specify_nonobvious_local_variable_types',
+          description: _desc,
+          details: _details,
+          state: State.experimental(),
+        );
 
   @override
   List<String> get incompatibleRules => const ['omit_local_variable_types'];
diff --git a/pkg/linter/lib/src/rules/super_goes_last.dart b/pkg/linter/lib/src/rules/super_goes_last.dart
index fa6898b..895a3e2 100644
--- a/pkg/linter/lib/src/rules/super_goes_last.dart
+++ b/pkg/linter/lib/src/rules/super_goes_last.dart
@@ -46,11 +46,11 @@
 class SuperGoesLast extends LintRule {
   SuperGoesLast()
       : super(
-            name: 'super_goes_last',
-            description: _desc,
-            details: _details,
-            state: State.removed(since: dart3),
-            categories: {LintRuleCategory.style});
+          name: 'super_goes_last',
+          description: _desc,
+          details: _details,
+          state: State.removed(since: dart3),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.removed_lint;
diff --git a/pkg/linter/lib/src/rules/test_types_in_equals.dart b/pkg/linter/lib/src/rules/test_types_in_equals.dart
index 6022a78..365023a 100644
--- a/pkg/linter/lib/src/rules/test_types_in_equals.dart
+++ b/pkg/linter/lib/src/rules/test_types_in_equals.dart
@@ -71,10 +71,10 @@
 class TestTypesInEquals extends LintRule {
   TestTypesInEquals()
       : super(
-            name: 'test_types_in_equals',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'test_types_in_equals',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.test_types_in_equals;
diff --git a/pkg/linter/lib/src/rules/throw_in_finally.dart b/pkg/linter/lib/src/rules/throw_in_finally.dart
index 6559524..0486411 100644
--- a/pkg/linter/lib/src/rules/throw_in_finally.dart
+++ b/pkg/linter/lib/src/rules/throw_in_finally.dart
@@ -52,10 +52,10 @@
 class ThrowInFinally extends LintRule {
   ThrowInFinally()
       : super(
-            name: 'throw_in_finally',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'throw_in_finally',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.throw_in_finally;
diff --git a/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart b/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart
index c814181..b702ff9 100644
--- a/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart
+++ b/pkg/linter/lib/src/rules/tighten_type_of_initializing_formals.dart
@@ -51,7 +51,6 @@
           name: 'tighten_type_of_initializing_formals',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/type_annotate_public_apis.dart b/pkg/linter/lib/src/rules/type_annotate_public_apis.dart
index 5ddf8ab..b21519d 100644
--- a/pkg/linter/lib/src/rules/type_annotate_public_apis.dart
+++ b/pkg/linter/lib/src/rules/type_annotate_public_apis.dart
@@ -53,13 +53,10 @@
 class TypeAnnotatePublicApis extends LintRule {
   TypeAnnotatePublicApis()
       : super(
-            name: 'type_annotate_public_apis',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.publicInterface
-            });
+          name: 'type_annotate_public_apis',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.type_annotate_public_apis;
diff --git a/pkg/linter/lib/src/rules/type_init_formals.dart b/pkg/linter/lib/src/rules/type_init_formals.dart
index 4dc1dc3..8046e4a 100644
--- a/pkg/linter/lib/src/rules/type_init_formals.dart
+++ b/pkg/linter/lib/src/rules/type_init_formals.dart
@@ -70,13 +70,10 @@
 class TypeInitFormals extends LintRule {
   TypeInitFormals()
       : super(
-            name: 'type_init_formals',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'type_init_formals',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.type_init_formals;
diff --git a/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart b/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart
index 0618a81..71a3361 100644
--- a/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart
+++ b/pkg/linter/lib/src/rules/type_literal_in_constant_pattern.dart
@@ -60,7 +60,6 @@
           name: 'type_literal_in_constant_pattern',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/unawaited_futures.dart b/pkg/linter/lib/src/rules/unawaited_futures.dart
index e399333..7fec825 100644
--- a/pkg/linter/lib/src/rules/unawaited_futures.dart
+++ b/pkg/linter/lib/src/rules/unawaited_futures.dart
@@ -46,10 +46,10 @@
 class UnawaitedFutures extends LintRule {
   UnawaitedFutures()
       : super(
-            name: 'unawaited_futures',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'unawaited_futures',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unawaited_futures;
diff --git a/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart b/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart
index 7b5fda3..4af7240 100644
--- a/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart
+++ b/pkg/linter/lib/src/rules/unintended_html_in_doc_comment.dart
@@ -183,10 +183,10 @@
 class UnintendedHtmlInDocComment extends LintRule {
   UnintendedHtmlInDocComment()
       : super(
-            name: 'unintended_html_in_doc_comment',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errorProne});
+          name: 'unintended_html_in_doc_comment',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unintended_html_in_doc_comment;
diff --git a/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart b/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart
index d28cfe3..107e1de 100644
--- a/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_await_in_return.dart
@@ -39,10 +39,10 @@
 class UnnecessaryAwaitInReturn extends LintRule {
   UnnecessaryAwaitInReturn()
       : super(
-            name: 'unnecessary_await_in_return',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'unnecessary_await_in_return',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_await_in_return;
diff --git a/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart b/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart
index a3bf485..076a529 100644
--- a/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_brace_in_string_interps.dart
@@ -37,10 +37,10 @@
 class UnnecessaryBraceInStringInterps extends LintRule {
   UnnecessaryBraceInStringInterps()
       : super(
-            name: 'unnecessary_brace_in_string_interps',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_brace_in_string_interps',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_brace_in_string_interps;
diff --git a/pkg/linter/lib/src/rules/unnecessary_breaks.dart b/pkg/linter/lib/src/rules/unnecessary_breaks.dart
index bf716ac..a0d16eb 100644
--- a/pkg/linter/lib/src/rules/unnecessary_breaks.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_breaks.dart
@@ -64,10 +64,10 @@
 class UnnecessaryBreaks extends LintRule {
   UnnecessaryBreaks()
       : super(
-            name: 'unnecessary_breaks',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_breaks',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_breaks;
diff --git a/pkg/linter/lib/src/rules/unnecessary_const.dart b/pkg/linter/lib/src/rules/unnecessary_const.dart
index a8da99b..72100fa 100644
--- a/pkg/linter/lib/src/rules/unnecessary_const.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_const.dart
@@ -37,10 +37,10 @@
 class UnnecessaryConst extends LintRule {
   UnnecessaryConst()
       : super(
-            name: 'unnecessary_const',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_const',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart b/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart
index fcc349c..5a12504 100644
--- a/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_constructor_name.dart
@@ -43,10 +43,10 @@
 class UnnecessaryConstructorName extends LintRule {
   UnnecessaryConstructorName()
       : super(
-            name: 'unnecessary_constructor_name',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_constructor_name',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_constructor_name;
diff --git a/pkg/linter/lib/src/rules/unnecessary_final.dart b/pkg/linter/lib/src/rules/unnecessary_final.dart
index 7616129..966ff11 100644
--- a/pkg/linter/lib/src/rules/unnecessary_final.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_final.dart
@@ -46,13 +46,10 @@
 class UnnecessaryFinal extends LintRule {
   UnnecessaryFinal()
       : super(
-            name: 'unnecessary_final',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'unnecessary_final',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<String> get incompatibleRules =>
diff --git a/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart b/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart
index 2f951f2..256cb88 100644
--- a/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_getters_setters.dart
@@ -52,13 +52,10 @@
 class UnnecessaryGettersSetters extends LintRule {
   UnnecessaryGettersSetters()
       : super(
-            name: 'unnecessary_getters_setters',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'unnecessary_getters_setters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_getters_setters;
diff --git a/pkg/linter/lib/src/rules/unnecessary_lambdas.dart b/pkg/linter/lib/src/rules/unnecessary_lambdas.dart
index dc5224d..9a2445b 100644
--- a/pkg/linter/lib/src/rules/unnecessary_lambdas.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_lambdas.dart
@@ -37,10 +37,10 @@
 class UnnecessaryLambdas extends LintRule {
   UnnecessaryLambdas()
       : super(
-            name: 'unnecessary_lambdas',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'unnecessary_lambdas',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_lambdas;
diff --git a/pkg/linter/lib/src/rules/unnecessary_late.dart b/pkg/linter/lib/src/rules/unnecessary_late.dart
index d92f974..484ebec2f2 100644
--- a/pkg/linter/lib/src/rules/unnecessary_late.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_late.dart
@@ -45,10 +45,10 @@
 class UnnecessaryLate extends LintRule {
   UnnecessaryLate()
       : super(
-            name: 'unnecessary_late',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'unnecessary_late',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_late;
diff --git a/pkg/linter/lib/src/rules/unnecessary_library_directive.dart b/pkg/linter/lib/src/rules/unnecessary_library_directive.dart
index 2262938..2debc2a 100644
--- a/pkg/linter/lib/src/rules/unnecessary_library_directive.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_library_directive.dart
@@ -44,7 +44,6 @@
           name: _name,
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.brevity},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/unnecessary_library_name.dart b/pkg/linter/lib/src/rules/unnecessary_library_name.dart
index d06492b..574394c 100644
--- a/pkg/linter/lib/src/rules/unnecessary_library_name.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_library_name.dart
@@ -52,14 +52,10 @@
 class UnnecessaryLibraryName extends LintRule {
   UnnecessaryLibraryName()
       : super(
-            name: 'unnecessary_library_name',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.languageFeatureUsage,
-              LintRuleCategory.style,
-            });
+          name: 'unnecessary_library_name',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_library_name;
diff --git a/pkg/linter/lib/src/rules/unnecessary_new.dart b/pkg/linter/lib/src/rules/unnecessary_new.dart
index 93b086e..9b3dfe6 100644
--- a/pkg/linter/lib/src/rules/unnecessary_new.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_new.dart
@@ -35,14 +35,10 @@
 class UnnecessaryNew extends LintRule {
   UnnecessaryNew()
       : super(
-            name: 'unnecessary_new',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.languageFeatureUsage,
-              LintRuleCategory.style
-            });
+          name: 'unnecessary_new',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart b/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart
index e5c23d7..3bd5e21 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_aware_assignments.dart
@@ -36,14 +36,10 @@
 class UnnecessaryNullAwareAssignments extends LintRule {
   UnnecessaryNullAwareAssignments()
       : super(
-            name: 'unnecessary_null_aware_assignments',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style,
-            });
+          name: 'unnecessary_null_aware_assignments',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_null_aware_assignments;
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart b/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart
index 216c9b2..8e2b3d3 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_aware_operator_on_extension_on_nullable.dart
@@ -42,7 +42,6 @@
           name: 'unnecessary_null_aware_operator_on_extension_on_nullable',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_checks.dart b/pkg/linter/lib/src/rules/unnecessary_null_checks.dart
index 6f57814..535ea0e 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_checks.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_checks.dart
@@ -159,11 +159,11 @@
 class UnnecessaryNullChecks extends LintRule {
   UnnecessaryNullChecks()
       : super(
-            name: 'unnecessary_null_checks',
-            description: _desc,
-            details: _details,
-            state: State.experimental(),
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_null_checks',
+          description: _desc,
+          details: _details,
+          state: State.experimental(),
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_null_checks;
diff --git a/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart b/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart
index 4447350..79c3c2d 100644
--- a/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_null_in_if_null_operators.dart
@@ -34,10 +34,10 @@
 class UnnecessaryNullInIfNullOperators extends LintRule {
   UnnecessaryNullInIfNullOperators()
       : super(
-            name: 'unnecessary_null_in_if_null_operators',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'unnecessary_null_in_if_null_operators',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_null_in_if_null_operators;
diff --git a/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart b/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart
index 37f1869..d56d244 100644
--- a/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_nullable_for_final_variable_declarations.dart
@@ -32,10 +32,10 @@
 class UnnecessaryNullableForFinalVariableDeclarations extends LintRule {
   UnnecessaryNullableForFinalVariableDeclarations()
       : super(
-            name: 'unnecessary_nullable_for_final_variable_declarations',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'unnecessary_nullable_for_final_variable_declarations',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/unnecessary_overrides.dart b/pkg/linter/lib/src/rules/unnecessary_overrides.dart
index 579a625..c80b212 100644
--- a/pkg/linter/lib/src/rules/unnecessary_overrides.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_overrides.dart
@@ -54,10 +54,10 @@
 class UnnecessaryOverrides extends LintRule {
   UnnecessaryOverrides()
       : super(
-            name: 'unnecessary_overrides',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'unnecessary_overrides',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_overrides;
diff --git a/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart b/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart
index 9fd065c..c6e15f0 100644
--- a/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_parenthesis.dart
@@ -47,10 +47,10 @@
 class UnnecessaryParenthesis extends LintRule {
   UnnecessaryParenthesis()
       : super(
-            name: 'unnecessary_parenthesis',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_parenthesis',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_parenthesis;
diff --git a/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart b/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart
index 48c3d70..0d8ae76 100644
--- a/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_raw_strings.dart
@@ -30,10 +30,10 @@
 class UnnecessaryRawStrings extends LintRule {
   UnnecessaryRawStrings()
       : super(
-            name: 'unnecessary_raw_strings',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_raw_strings',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_raw_strings;
diff --git a/pkg/linter/lib/src/rules/unnecessary_statements.dart b/pkg/linter/lib/src/rules/unnecessary_statements.dart
index 86433b3..0dbba9f 100644
--- a/pkg/linter/lib/src/rules/unnecessary_statements.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_statements.dart
@@ -49,13 +49,10 @@
 class UnnecessaryStatements extends LintRule {
   UnnecessaryStatements()
       : super(
-            name: 'unnecessary_statements',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.unintentional
-            });
+          name: 'unnecessary_statements',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_statements;
diff --git a/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart b/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
index 3b4f0fa..d387548 100644
--- a/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_string_escapes.dart
@@ -31,10 +31,10 @@
 class UnnecessaryStringEscapes extends LintRule {
   UnnecessaryStringEscapes()
       : super(
-            name: 'unnecessary_string_escapes',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_string_escapes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart b/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart
index bfb2369..ac223f8 100644
--- a/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_string_interpolations.dart
@@ -31,10 +31,10 @@
 class UnnecessaryStringInterpolations extends LintRule {
   UnnecessaryStringInterpolations()
       : super(
-            name: 'unnecessary_string_interpolations',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.brevity, LintRuleCategory.style});
+          name: 'unnecessary_string_interpolations',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_string_interpolations;
diff --git a/pkg/linter/lib/src/rules/unnecessary_this.dart b/pkg/linter/lib/src/rules/unnecessary_this.dart
index ae6935f..052c933 100644
--- a/pkg/linter/lib/src/rules/unnecessary_this.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_this.dart
@@ -53,14 +53,10 @@
 class UnnecessaryThis extends LintRule {
   UnnecessaryThis()
       : super(
-            name: 'unnecessary_this',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style,
-            });
+          name: 'unnecessary_this',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.unnecessary_this;
diff --git a/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart b/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart
index 7cf3e6d..7ee1e5d 100644
--- a/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart
+++ b/pkg/linter/lib/src/rules/unnecessary_to_list_in_spreads.dart
@@ -36,7 +36,6 @@
           name: 'unnecessary_to_list_in_spreads',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.brevity},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/unreachable_from_main.dart b/pkg/linter/lib/src/rules/unreachable_from_main.dart
index 927e213..22bc7c8 100644
--- a/pkg/linter/lib/src/rules/unreachable_from_main.dart
+++ b/pkg/linter/lib/src/rules/unreachable_from_main.dart
@@ -50,7 +50,6 @@
           name: 'unreachable_from_main',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.unusedCode},
           state: State.stable(since: Version(3, 1, 0)),
         );
 
diff --git a/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart b/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart
index 62e0938..eb728ad 100644
--- a/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart
+++ b/pkg/linter/lib/src/rules/unrelated_type_equality_checks.dart
@@ -133,10 +133,10 @@
 class UnrelatedTypeEqualityChecks extends LintRule {
   UnrelatedTypeEqualityChecks()
       : super(
-            name: 'unrelated_type_equality_checks',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unintentional});
+          name: 'unrelated_type_equality_checks',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/unsafe_html.dart b/pkg/linter/lib/src/rules/unsafe_html.dart
index ab95e01..8ea2b61 100644
--- a/pkg/linter/lib/src/rules/unsafe_html.dart
+++ b/pkg/linter/lib/src/rules/unsafe_html.dart
@@ -36,10 +36,10 @@
 class UnsafeHtml extends LintRule {
   UnsafeHtml()
       : super(
-            name: 'unsafe_html',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errors});
+          name: 'unsafe_html',
+          description: _desc,
+          details: _details,
+        );
 
   // TODO(brianwilkerson): This lint is not yet using the generated LintCodes.
   //   We would like to use the codes in the future, but doing
diff --git a/pkg/linter/lib/src/rules/use_build_context_synchronously.dart b/pkg/linter/lib/src/rules/use_build_context_synchronously.dart
index d174aa0..1650086 100644
--- a/pkg/linter/lib/src/rules/use_build_context_synchronously.dart
+++ b/pkg/linter/lib/src/rules/use_build_context_synchronously.dart
@@ -959,7 +959,6 @@
           name: 'use_build_context_synchronously',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.errorProne, LintRuleCategory.flutter},
           state: State.stable(since: Version(3, 2, 0)),
         );
 
diff --git a/pkg/linter/lib/src/rules/use_colored_box.dart b/pkg/linter/lib/src/rules/use_colored_box.dart
index 69595b1..d31f254 100644
--- a/pkg/linter/lib/src/rules/use_colored_box.dart
+++ b/pkg/linter/lib/src/rules/use_colored_box.dart
@@ -42,10 +42,10 @@
 class UseColoredBox extends LintRule {
   UseColoredBox()
       : super(
-            name: 'use_colored_box',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'use_colored_box',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_colored_box;
diff --git a/pkg/linter/lib/src/rules/use_decorated_box.dart b/pkg/linter/lib/src/rules/use_decorated_box.dart
index a7f4032..6287852 100644
--- a/pkg/linter/lib/src/rules/use_decorated_box.dart
+++ b/pkg/linter/lib/src/rules/use_decorated_box.dart
@@ -51,10 +51,10 @@
 class UseDecoratedBox extends LintRule {
   UseDecoratedBox()
       : super(
-            name: 'use_decorated_box',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'use_decorated_box',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_decorated_box;
diff --git a/pkg/linter/lib/src/rules/use_enums.dart b/pkg/linter/lib/src/rules/use_enums.dart
index 8d275bc..d16d6e2 100644
--- a/pkg/linter/lib/src/rules/use_enums.dart
+++ b/pkg/linter/lib/src/rules/use_enums.dart
@@ -65,10 +65,10 @@
 class UseEnums extends LintRule {
   UseEnums()
       : super(
-            name: 'use_enums',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'use_enums',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_enums;
diff --git a/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart b/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
index e403ffe..7db39bd 100644
--- a/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
+++ b/pkg/linter/lib/src/rules/use_full_hex_values_for_flutter_colors.dart
@@ -34,10 +34,10 @@
 class UseFullHexValuesForFlutterColors extends LintRule {
   UseFullHexValuesForFlutterColors()
       : super(
-            name: 'use_full_hex_values_for_flutter_colors',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'use_full_hex_values_for_flutter_colors',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode =>
diff --git a/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart b/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart
index 68ffaf0..a29bb8e 100644
--- a/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart
+++ b/pkg/linter/lib/src/rules/use_function_type_syntax_for_parameters.dart
@@ -28,10 +28,10 @@
 class UseFunctionTypeSyntaxForParameters extends LintRule {
   UseFunctionTypeSyntaxForParameters()
       : super(
-            name: 'use_function_type_syntax_for_parameters',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'use_function_type_syntax_for_parameters',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   bool get canUseParsedResult => true;
diff --git a/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart b/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart
index c01b21a..33b9d88 100644
--- a/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart
+++ b/pkg/linter/lib/src/rules/use_if_null_to_convert_nulls_to_bools.dart
@@ -41,7 +41,6 @@
           name: 'use_if_null_to_convert_nulls_to_bools',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.effectiveDart, LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart b/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart
index a632952..11f1cd0 100644
--- a/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart
+++ b/pkg/linter/lib/src/rules/use_is_even_rather_than_modulo.dart
@@ -32,10 +32,10 @@
 class UseIsEvenRatherThanModulo extends LintRule {
   UseIsEvenRatherThanModulo()
       : super(
-            name: 'use_is_even_rather_than_modulo',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'use_is_even_rather_than_modulo',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_is_even_rather_than_modulo;
diff --git a/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart b/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart
index d37191f..7f48e26 100644
--- a/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart
+++ b/pkg/linter/lib/src/rules/use_key_in_widget_constructors.dart
@@ -37,10 +37,10 @@
 class UseKeyInWidgetConstructors extends LintRule {
   UseKeyInWidgetConstructors()
       : super(
-            name: 'use_key_in_widget_constructors',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.flutter, LintRuleCategory.style});
+          name: 'use_key_in_widget_constructors',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_key_in_widget_constructors;
diff --git a/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart b/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart
index a02d387..9cf8ad4 100644
--- a/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart
+++ b/pkg/linter/lib/src/rules/use_late_for_private_fields_and_variables.dart
@@ -61,7 +61,6 @@
           description: _desc,
           details: _details,
           state: State.experimental(),
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/use_named_constants.dart b/pkg/linter/lib/src/rules/use_named_constants.dart
index effbd36..e3ebffc 100644
--- a/pkg/linter/lib/src/rules/use_named_constants.dart
+++ b/pkg/linter/lib/src/rules/use_named_constants.dart
@@ -35,7 +35,6 @@
           name: lintName,
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/use_raw_strings.dart b/pkg/linter/lib/src/rules/use_raw_strings.dart
index bebcb3c..b370bf2 100644
--- a/pkg/linter/lib/src/rules/use_raw_strings.dart
+++ b/pkg/linter/lib/src/rules/use_raw_strings.dart
@@ -28,10 +28,10 @@
 class UseRawStrings extends LintRule {
   UseRawStrings()
       : super(
-            name: 'use_raw_strings',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'use_raw_strings',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_raw_strings;
diff --git a/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart b/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart
index e38b939..50b7f54 100644
--- a/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart
+++ b/pkg/linter/lib/src/rules/use_rethrow_when_possible.dart
@@ -44,13 +44,10 @@
 class UseRethrowWhenPossible extends LintRule {
   UseRethrowWhenPossible()
       : super(
-            name: 'use_rethrow_when_possible',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.brevity,
-              LintRuleCategory.effectiveDart
-            });
+          name: 'use_rethrow_when_possible',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_rethrow_when_possible;
diff --git a/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart b/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart
index 0b5dea3..3300bd1 100644
--- a/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart
+++ b/pkg/linter/lib/src/rules/use_setters_to_change_properties.dart
@@ -35,10 +35,10 @@
 class UseSettersToChangeProperties extends LintRule {
   UseSettersToChangeProperties()
       : super(
-            name: 'use_setters_to_change_properties',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'use_setters_to_change_properties',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_setters_to_change_properties;
diff --git a/pkg/linter/lib/src/rules/use_string_buffers.dart b/pkg/linter/lib/src/rules/use_string_buffers.dart
index 08195f1..2494503 100644
--- a/pkg/linter/lib/src/rules/use_string_buffers.dart
+++ b/pkg/linter/lib/src/rules/use_string_buffers.dart
@@ -56,10 +56,10 @@
 class UseStringBuffers extends LintRule {
   UseStringBuffers()
       : super(
-            name: 'use_string_buffers',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.nonPerformant});
+          name: 'use_string_buffers',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_string_buffers;
diff --git a/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart b/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart
index fbb47cd..52111ba 100644
--- a/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart
+++ b/pkg/linter/lib/src/rules/use_string_in_part_of_directives.dart
@@ -37,7 +37,6 @@
           name: 'use_string_in_part_of_directives',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.effectiveDart, LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/use_super_parameters.dart b/pkg/linter/lib/src/rules/use_super_parameters.dart
index a9355fd..66cf665 100644
--- a/pkg/linter/lib/src/rules/use_super_parameters.dart
+++ b/pkg/linter/lib/src/rules/use_super_parameters.dart
@@ -55,11 +55,11 @@
 class UseSuperParameters extends LintRule {
   UseSuperParameters()
       : super(
-            name: 'use_super_parameters',
-            description: _desc,
-            details: _details,
-            state: State.experimental(),
-            categories: {LintRuleCategory.brevity});
+          name: 'use_super_parameters',
+          description: _desc,
+          details: _details,
+          state: State.experimental(),
+        );
 
   @override
   List<LintCode> get lintCodes => [
diff --git a/pkg/linter/lib/src/rules/use_test_throws_matchers.dart b/pkg/linter/lib/src/rules/use_test_throws_matchers.dart
index 3d77a9d..5e42134 100644
--- a/pkg/linter/lib/src/rules/use_test_throws_matchers.dart
+++ b/pkg/linter/lib/src/rules/use_test_throws_matchers.dart
@@ -57,7 +57,6 @@
           name: 'use_test_throws_matchers',
           description: _desc,
           details: _details,
-          categories: {LintRuleCategory.style},
         );
 
   @override
diff --git a/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart b/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart
index 680b532..d5d8219 100644
--- a/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart
+++ b/pkg/linter/lib/src/rules/use_to_and_as_if_applicable.dart
@@ -62,13 +62,10 @@
 class UseToAndAsIfApplicable extends LintRule {
   UseToAndAsIfApplicable()
       : super(
-            name: 'use_to_and_as_if_applicable',
-            description: _desc,
-            details: _details,
-            categories: {
-              LintRuleCategory.effectiveDart,
-              LintRuleCategory.style
-            });
+          name: 'use_to_and_as_if_applicable',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_to_and_as_if_applicable;
diff --git a/pkg/linter/lib/src/rules/use_truncating_division.dart b/pkg/linter/lib/src/rules/use_truncating_division.dart
index cd932d1..bb04df2 100644
--- a/pkg/linter/lib/src/rules/use_truncating_division.dart
+++ b/pkg/linter/lib/src/rules/use_truncating_division.dart
@@ -34,10 +34,10 @@
 class UseTruncatingDivision extends LintRule {
   UseTruncatingDivision()
       : super(
-            name: 'use_truncating_division',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.languageFeatureUsage});
+          name: 'use_truncating_division',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.use_truncating_division;
diff --git a/pkg/linter/lib/src/rules/valid_regexps.dart b/pkg/linter/lib/src/rules/valid_regexps.dart
index 1b6d494..2a2ddbd 100644
--- a/pkg/linter/lib/src/rules/valid_regexps.dart
+++ b/pkg/linter/lib/src/rules/valid_regexps.dart
@@ -32,10 +32,10 @@
 class ValidRegexps extends LintRule {
   ValidRegexps()
       : super(
-            name: 'valid_regexps',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.unintentional});
+          name: 'valid_regexps',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.valid_regexps;
diff --git a/pkg/linter/lib/src/rules/void_checks.dart b/pkg/linter/lib/src/rules/void_checks.dart
index cd3112c..1133849 100644
--- a/pkg/linter/lib/src/rules/void_checks.dart
+++ b/pkg/linter/lib/src/rules/void_checks.dart
@@ -33,10 +33,10 @@
 class VoidChecks extends LintRule {
   VoidChecks()
       : super(
-            name: 'void_checks',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.style});
+          name: 'void_checks',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => LinterLintCode.void_checks;
diff --git a/pkg/linter/messages.yaml b/pkg/linter/messages.yaml
index ce3b3fd..500414d 100644
--- a/pkg/linter/messages.yaml
+++ b/pkg/linter/messages.yaml
@@ -2,11 +2,32 @@
 # 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.
 
+# There is a fixed set of categories:
+#
+# * binarySize - rules that help to minimize binary size.
+# * breity - rules that encourage brevity in the source code.
+# * documentationCommentMaintenance - rules that help to maintain documentation
+#   comments.
+# * effectiveDart - rules that align with the Effective Dart style guide.
+# * errorProne - rules that protect against error-prone code.
+# * flutter - rules that help to write Flutter code.
+# * languageFeatureUsage - rules that promote language feature usage.
+# * memoryLeaks - rules that protect against possibly memory-leaking code.
+# * nonPerformant - rules that protect against non-performant code.
+# * pub - pub-related rules.
+# * publicInterface - rules that promote a healthy public interface.
+# * style - matters of style, largely derived from Effective Dart.
+# * unintentional - rules that protect against code that probably doesn't do
+#   what you think it does, or that shouldn't be used as it is.
+# * unusedCode - rules that protect against unused code.
+# * web - rules that help to write code deployed to the web.
+
 LintCode:
   always_declare_return_types_of_functions:
     sharedName: always_declare_return_types
     problemMessage: "The function '{0}' should have a return type but doesn't."
     correctionMessage: "Try adding a return type to the function."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -38,6 +59,7 @@
   always_put_control_body_on_new_line:
     problemMessage: "Statement should be on a separate line."
     correctionMessage: "Try moving the statement to a new line."
+    categories: [errorProne, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -71,6 +93,7 @@
   always_put_required_named_parameters_first:
     problemMessage: "Required named parameters should be before optional named parameters."
     correctionMessage: "Try moving the required named parameter to be before any optional named parameters."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -101,6 +124,7 @@
     sharedName: always_specify_types
     problemMessage: "Missing type annotation."
     correctionMessage: "Try adding a type annotation."
+    categories: [style]
     hasPublishedDocs: false
   always_specify_types_replace_keyword:
     sharedName: always_specify_types
@@ -120,6 +144,7 @@
   always_use_package_imports:
     problemMessage: "Use 'package:' imports for files in the 'lib' directory."
     correctionMessage: "Try converting the URI to a 'package:' URI."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -148,6 +173,7 @@
   annotate_overrides:
     problemMessage: "The member '{0}' overrides an inherited member but isn't annotated with '@override'."
     correctionMessage: "Try adding the '@override' annotation."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -202,25 +228,30 @@
   annotate_redeclares:
     problemMessage: "The member '{0}' is redeclaring but isn't annotated with '@redeclare'."
     correctionMessage: "Try adding the '@redeclare' annotation."
+    categories: [style]
     hasPublishedDocs: false
   avoid_annotating_with_dynamic:
     problemMessage: "Unnecessary 'dynamic' type annotation."
     correctionMessage: "Try removing the type 'dynamic'."
+    categories: [brevity, style]
     hasPublishedDocs: false
   avoid_as:
     removedIn: "3.0"
   avoid_bool_literals_in_conditional_expressions:
     problemMessage: "Conditional expressions with a 'bool' literal can be simplified."
     correctionMessage: "Try rewriting the expression to use either '&&' or '||'."
+    categories: [brevity]
     hasPublishedDocs: false
   avoid_catches_without_on_clauses:
     problemMessage: "Catch clause should use 'on' to specify the type of exception being caught."
     correctionMessage: "Try adding an 'on' clause before the 'catch'."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
   avoid_catching_errors_class:
     sharedName: avoid_catching_errors
     problemMessage: "The type 'Error' should not be caught."
     correctionMessage: "Try removing the catch or catching an 'Exception' instead."
+    categories: [style]
     hasPublishedDocs: false
   avoid_catching_errors_subclass:
     sharedName: avoid_catching_errors
@@ -230,18 +261,22 @@
   avoid_classes_with_only_static_members:
     problemMessage: "Classes should define instance members."
     correctionMessage: "Try adding instance behavior or moving the members out of the class."
+    categories: [effectiveDart, languageFeatureUsage, style]
     hasPublishedDocs: false
   avoid_double_and_int_checks:
     problemMessage: "Explicit check for double or int."
     correctionMessage: "Try removing the check."
+    categories: [errorProne, web]
     hasPublishedDocs: false
   avoid_dynamic_calls:
     problemMessage: "Method invocation or property access on a 'dynamic' target."
     correctionMessage: "Try giving the target a type."
+    categories: [binarySize, errorProne]
     hasPublishedDocs: false
   avoid_empty_else:
     problemMessage: "Empty statements are not allowed in an 'else' clause."
     correctionMessage: "Try removing the empty statement or removing the else clause."
+    categories: [brevity, errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -293,22 +328,29 @@
   avoid_equals_and_hash_code_on_mutable_classes:
     problemMessage: "The method '{0}' should not be overridden in classes not annotated with '@immutable'."
     correctionMessage: "Try removing the override or annotating the class with '@immutable'."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
   avoid_escaping_inner_quotes:
     problemMessage: "Unnecessary escape of '{0}'."
     correctionMessage: "Try changing the outer quotes to '{1}'."
+    categories: [style]
     hasPublishedDocs: false
   avoid_field_initializers_in_const_classes:
     problemMessage: "Fields in 'const' classes should not have initializers."
     correctionMessage: "Try converting the field to a getter or initialize the field in the constructors."
+    # TODO(srawlins): This rule has nothing to do with style. It is to reduce
+    # runtime memory usage. But we don't have a Category for that yet.
+    categories: [style]
     hasPublishedDocs: false
   avoid_final_parameters:
     problemMessage: "Parameters should not be marked as 'final'."
     correctionMessage: "Try removing the keyword 'final'."
+    categories: [style]
     hasPublishedDocs: false
   avoid_function_literals_in_foreach_calls:
     problemMessage: "Function literals shouldn't be passed to 'forEach'."
     correctionMessage: "Try using a 'for' loop."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -350,10 +392,12 @@
   avoid_implementing_value_types:
     problemMessage: "Classes that override '==' should not be implemented."
     correctionMessage: "Try removing the class from the 'implements' clause."
+    categories: [style]
     hasPublishedDocs: false
   avoid_init_to_null:
     problemMessage: "Redundant initialization to 'null'."
     correctionMessage: "Try removing the initializer."
+    categories: [brevity, effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -401,22 +445,27 @@
   avoid_js_rounded_ints:
     problemMessage: "Integer literal can't be represented exactly when compiled to JavaScript."
     correctionMessage: "Try using a 'BigInt' to represent the value."
+    categories: [errorProne, web]
     hasPublishedDocs: false
   avoid_multiple_declarations_per_line:
     problemMessage: "Multiple variables declared on a single line."
     correctionMessage: "Try splitting the variable declarations into multiple lines."
+    categories: [style]
     hasPublishedDocs: false
   avoid_null_checks_in_equality_operators:
     problemMessage: "Unnecessary null comparison in implementation of '=='."
     correctionMessage: "Try removing the comparison."
+    categories: [style]
     hasPublishedDocs: false
   avoid_positional_boolean_parameters:
     problemMessage: "'bool' parameters should be named parameters."
     correctionMessage: "Try converting the parameter to a named parameter."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
   avoid_print:
     problemMessage: "Don't invoke 'print' in production code."
     correctionMessage: "Try using a logging framework."
+    categories: [unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -457,14 +506,17 @@
   avoid_private_typedef_functions:
     problemMessage: "The typedef is unnecessary because it is only used in one place."
     correctionMessage: "Try inlining the type or using it in other places."
+    categories: [style]
     hasPublishedDocs: false
   avoid_redundant_argument_values:
     problemMessage: "The value of the argument is redundant because it matches the default value."
     correctionMessage: "Try removing the argument."
+    categories: [brevity, style]
     hasPublishedDocs: false
   avoid_relative_lib_imports:
     problemMessage: "Can't use a relative path to import a library in 'lib'."
     correctionMessage: "Try fixing the relative path or changing the import to a 'package:' import."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -498,6 +550,7 @@
   avoid_renaming_method_parameters:
     problemMessage: "The parameter name '{0}' doesn't match the name '{1}' in the overridden method."
     correctionMessage: "Try changing the name to '{1}'."
+    categories: [documentationCommentMaintenance]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -539,6 +592,7 @@
   avoid_return_types_on_setters:
     problemMessage: "Unnecessary return type on a setter."
     correctionMessage: "Try removing the return type."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -573,6 +627,7 @@
     sharedName: avoid_returning_null_for_void
     problemMessage: "Don't return 'null' from a function with a return type of 'void'."
     correctionMessage: "Try removing the 'null'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -608,14 +663,17 @@
   avoid_returning_this:
     problemMessage: "Don't return 'this' from a method."
     correctionMessage: "Try changing the return type to 'void' and removing the return."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
   avoid_setters_without_getters:
     problemMessage: "Setter has no corresponding getter."
     correctionMessage: "Try adding a corresponding getter or removing the setter."
+    categories: [style]
     hasPublishedDocs: false
   avoid_shadowing_type_parameters:
     problemMessage: "The type parameter '{0}' shadows a type parameter from the enclosing {1}."
     correctionMessage: "Try renaming one of the type parameters."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -650,6 +708,7 @@
   avoid_single_cascade_in_expression_statements:
     problemMessage: "Unnecessary cascade expression."
     correctionMessage: "Try using the operator '{0}'."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -681,6 +740,7 @@
   avoid_slow_async_io:
     problemMessage: "Use of an async 'dart:io' method."
     correctionMessage: "Try using the synchronous version of the method."
+    categories: [nonPerformant]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -727,6 +787,7 @@
   avoid_type_to_string:
     problemMessage: "Using 'toString' on a 'Type' is not safe in production code."
     correctionMessage: "Try a normal type check or compare the 'runtimeType' directly."
+    categories: [unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -767,6 +828,7 @@
   avoid_types_as_parameter_names:
     problemMessage: "The parameter name '{0}' matches a visible type name."
     correctionMessage: "Try adding a name for the parameter or changing the parameter name to not match an existing type."
+    categories: [unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -808,10 +870,12 @@
   avoid_types_on_closure_parameters:
     problemMessage: "Unnecessary type annotation on a function expression parameter."
     correctionMessage: "Try removing the type annotation."
+    categories: [style]
     hasPublishedDocs: false
   avoid_unnecessary_containers:
     problemMessage: "Unnecessary instance of 'Container'."
     correctionMessage: "Try removing the 'Container' (but not its children) from the widget tree."
+    categories: [flutter, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -880,14 +944,19 @@
   avoid_unused_constructor_parameters:
     problemMessage: "The parameter '{0}' is not used in the constructor."
     correctionMessage: "Try using the parameter or removing it."
+    # TODO(srawlins): This isn't even just about unintentional syntax; unused
+    # parameters can represent code bloat.
+    categories: [unintentional]
     hasPublishedDocs: false
   avoid_void_async:
     problemMessage: "An 'async' function should have a 'Future' return type when it doesn't return a value."
     correctionMessage: "Try changing the return type."
+    categories: [style]
     hasPublishedDocs: false
   avoid_web_libraries_in_flutter:
     problemMessage: "Don't use web-only libraries outside Flutter web plugins."
     correctionMessage: "Try finding a different library for your needs."
+    categories: [errorProne, flutter, web]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -942,6 +1011,7 @@
   await_only_futures:
     problemMessage: "Uses 'await' on an instance of '{0}', which is not a subtype of 'Future'."
     correctionMessage: "Try removing the 'await' or changing the expression."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -979,6 +1049,7 @@
   camel_case_extensions:
     problemMessage: "The extension name '{0}' isn't an UpperCamelCase identifier."
     correctionMessage: "Try changing the name to follow the UpperCamelCase style."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1013,6 +1084,7 @@
   camel_case_types:
     problemMessage: "The type name '{0}' isn't an UpperCamelCase identifier."
     correctionMessage: "Try changing the name to follow the UpperCamelCase style."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1040,6 +1112,7 @@
   cancel_subscriptions:
     problemMessage: "Uncancelled instance of 'StreamSubscription'."
     correctionMessage: "Try invoking 'cancel' in the function in which the 'StreamSubscription' was created."
+    categories: [errorProne, memoryLeaks]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1076,14 +1149,17 @@
   cascade_invocations:
     problemMessage: "Unnecessary duplication of receiver."
     correctionMessage: "Try using a cascade to avoid the duplication."
+    categories: [brevity, languageFeatureUsage, style]
     hasPublishedDocs: false
   cast_nullable_to_non_nullable:
     problemMessage: "Don't cast a nullable value to a non-nullable type."
     correctionMessage: "Try adding a not-null assertion ('!') to make the type non-nullable."
+    categories: [errorProne]
     hasPublishedDocs: false
   close_sinks:
     problemMessage: "Unclosed instance of 'Sink'."
     correctionMessage: "Try invoking 'close' in the function in which the 'Sink' was created."
+    categories: [errorProne, memoryLeaks]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1121,6 +1197,7 @@
   collection_methods_unrelated_type:
     problemMessage: "The argument type '{0}' isn't related to '{1}'."
     correctionMessage: "Try changing the argument or element type to match."
+    categories: [unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1168,18 +1245,22 @@
   combinators_ordering:
     problemMessage: "Sort combinator names alphabetically."
     correctionMessage: "Try sorting the combinator names alphabetically."
+    categories: [style]
     hasPublishedDocs: false
   comment_references:
     problemMessage: "The referenced name isn't visible in scope."
     correctionMessage: "Try adding an import for the referenced name."
+    categories: [documentationCommentMaintenance]
     hasPublishedDocs: false
   conditional_uri_does_not_exist:
     problemMessage: "The target of the conditional URI '{0}' doesn't exist."
     correctionMessage: "Try creating the file referenced by the URI, or try using a URI for a file that does exist."
+    categories: [errorProne]
     hasPublishedDocs: false
   constant_identifier_names:
     problemMessage: "The constant name '{0}' isn't a lowerCamelCase identifier."
     correctionMessage: "Try changing the name to follow the lowerCamelCase style."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1206,6 +1287,7 @@
   control_flow_in_finally:
     problemMessage: "Use of '{0}' in a 'finally' clause."
     correctionMessage: "Try restructuring the code."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1261,6 +1343,7 @@
   curly_braces_in_flow_control_structures:
     problemMessage: "Statements in {0} should be enclosed in a block."
     correctionMessage: "Try wrapping the statement in a block."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1296,6 +1379,7 @@
   dangling_library_doc_comments:
     problemMessage: "Dangling library doc comment."
     correctionMessage: "Add a 'library' directive after the library comment."
+    categories: [documentationCommentMaintenance]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1349,6 +1433,7 @@
   depend_on_referenced_packages:
     problemMessage: "The imported package '{0}' isn't a dependency of the importing package."
     correctionMessage: "Try adding a dependency for '{0}' in the 'pubspec.yaml' file."
+    categories: [pub]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1407,21 +1492,23 @@
     sharedName: deprecated_consistency
     problemMessage: "Constructors in a deprecated class should be deprecated."
     correctionMessage: "Try marking the constructor as deprecated."
-    hasPublishedDocs: false
-  deprecated_consistency_parameter:
-    sharedName: deprecated_consistency
-    problemMessage: "Parameters that initialize a deprecated field should be deprecated."
-    correctionMessage: "Try marking the parameter as deprecated."
+    categories: [style]
     hasPublishedDocs: false
   deprecated_consistency_field:
     sharedName: deprecated_consistency
     problemMessage: "Fields that are initialized by a deprecated parameter should be deprecated."
     correctionMessage: "Try marking the field as deprecated."
     hasPublishedDocs: false
+  deprecated_consistency_parameter:
+    sharedName: deprecated_consistency
+    problemMessage: "Parameters that initialize a deprecated field should be deprecated."
+    correctionMessage: "Try marking the parameter as deprecated."
+    hasPublishedDocs: false
   deprecated_member_use_from_same_package_with_message:
     sharedName: deprecated_member_use_from_same_package
     problemMessage: "'{0}' is deprecated and shouldn't be used. {1}"
     correctionMessage: "Try replacing the use of the deprecated member with the replacement, if a replacement is specified."
+    categories: [languageFeatureUsage]
     hasPublishedDocs: false
   deprecated_member_use_from_same_package_without_message:
     sharedName: deprecated_member_use_from_same_package
@@ -1431,11 +1518,13 @@
   diagnostic_describe_all_properties:
     problemMessage: "The public property isn't described by either 'debugFillProperties' or 'debugDescribeChildren'."
     correctionMessage: "Try describing the property."
+    categories: [errorProne, flutter]
     hasPublishedDocs: false
   directives_ordering_alphabetical:
     sharedName: directives_ordering
     problemMessage: "Sort directive sections alphabetically."
     correctionMessage: "Try sorting the directives."
+    categories: [style]
     hasPublishedDocs: false
   directives_ordering_dart:
     sharedName: directives_ordering
@@ -1455,18 +1544,22 @@
   discarded_futures:
     problemMessage: "Asynchronous function invoked in a non-'async' function."
     correctionMessage: "Try converting the enclosing function to be 'async' and then 'await' the future."
+    categories: [errorProne]
     hasPublishedDocs: false
   do_not_use_environment:
     problemMessage: "Invalid use of an environment declaration."
     correctionMessage: "Try removing the environment declaration usage."
+    categories: [errorProne]
     hasPublishedDocs: false
   document_ignores:
     problemMessage: "Missing documentation explaining why the diagnostic is ignored."
     correctionMessage: "Try adding a comment immediately above the ignore comment."
+    categories: [style]
     hasPublishedDocs: false
   empty_catches:
     problemMessage: "Empty catch block."
     correctionMessage: "Try adding statements to the block, adding a comment to the block, or removing the 'catch' clause."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1528,6 +1621,7 @@
   empty_constructor_bodies:
     problemMessage: "Empty constructor bodies should be written using a ';' rather than '{}'."
     correctionMessage: "Try replacing the constructor body with ';'."
+    categories: [brevity, effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1558,6 +1652,7 @@
   empty_statements:
     problemMessage: "Unnecessary empty statement."
     correctionMessage: "Try removing the empty statement or restructuring the code."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1624,20 +1719,24 @@
   eol_at_end_of_file:
     problemMessage: "Missing a newline at the end of the file."
     correctionMessage: "Try adding a newline at the end of the file."
+    categories: [style]
     hasPublishedDocs: false
   erase_dart_type_extension_types:
     problemMessage: "Unsafe use of 'DartType' in an 'is' check."
     correctionMessage: "Ensure DartType extension types are erased by using a helper method."
+    categories: [errorProne]
     hasPublishedDocs: false
     todo: |-
       TODO(nshahan): Update.
   exhaustive_cases:
     problemMessage: "Missing case clauses for some constants in '{0}'."
     correctionMessage: "Try adding case clauses for the missing constants."
+    categories: [errorProne]
     hasPublishedDocs: false
   file_names:
     problemMessage: "The file name '{0}' isn't a lower_case_with_underscores identifier."
     correctionMessage: "Try changing the name to follow the lower_case_with_underscores style."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1657,10 +1756,12 @@
   flutter_style_todos:
     problemMessage: "To-do comment doesn't follow the Flutter style."
     correctionMessage: "Try following the Flutter style for to-do comments."
+    categories: [style]
     hasPublishedDocs: false
   hash_and_equals:
     problemMessage: "Missing a corresponding override of '{0}'."
     correctionMessage: "Try overriding '{0}' or removing '{1}'."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1728,6 +1829,7 @@
   implementation_imports:
     problemMessage: "Import of a library in the 'lib/src' directory of another package."
     correctionMessage: "Try importing a public library that exports this library, or removing the import."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1763,6 +1865,7 @@
   implicit_call_tearoffs:
     problemMessage: "Implicit tear-off of the 'call' method."
     correctionMessage: "Try explicitly tearing off the 'call' method."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1810,15 +1913,18 @@
   implicit_reopen:
     problemMessage: "The {0} '{1}' reopens '{2}' because it is not marked '{3}'."
     correctionMessage: "Try marking '{1}' '{3}' or annotating it with '@reopen'."
+    categories: [errorProne]
     hasPublishedDocs: false
   invalid_case_patterns:
     problemMessage: "This expression is not valid in a 'case' clause in Dart 3.0."
     correctionMessage: "Try refactoring the expression to be valid in 3.0."
+    categories: [languageFeatureUsage]
     hasPublishedDocs: false
   invalid_runtime_check_with_js_interop_types_dart_as_js:
     sharedName: invalid_runtime_check_with_js_interop_types
     problemMessage: "Cast from '{0}' to '{1}' casts a Dart value to a JS interop type, which might not be platform-consistent."
     correctionMessage: "Try using conversion methods from 'dart:js_interop' to convert between Dart types and JS interop types."
+    categories: [errorProne, web]
     hasPublishedDocs: false
   invalid_runtime_check_with_js_interop_types_dart_is_js:
     sharedName: invalid_runtime_check_with_js_interop_types
@@ -1854,18 +1960,22 @@
   join_return_with_assignment:
     problemMessage: "Assignment could be inlined in 'return' statement."
     correctionMessage: "Try inlining the assigned value in the 'return' statement."
+    categories: [brevity, style]
     hasPublishedDocs: false
   leading_newlines_in_multiline_strings:
     problemMessage: "Missing a newline at the beginning of a multiline string."
     correctionMessage: "Try adding a newline at the beginning of the string."
+    categories: [style]
     hasPublishedDocs: false
   library_annotations:
     problemMessage: "This annotation should be attached to a library directive."
     correctionMessage: "Try attaching the annotation to a library directive."
+    categories: [style]
     hasPublishedDocs: false
   library_names:
     problemMessage: "The library name '{0}' isn't a lower_case_with_underscores identifier."
     correctionMessage: "Try changing the name to follow the lower_case_with_underscores style."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1899,6 +2009,7 @@
   library_prefixes:
     problemMessage: "The prefix '{0}' isn't a lower_case_with_underscores identifier."
     correctionMessage: "Try changing the prefix to follow the lower_case_with_underscores style."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1926,6 +2037,7 @@
   library_private_types_in_public_api:
     problemMessage: "Invalid use of a private type in a public API."
     correctionMessage: "Try making the private type public, or making the API that uses the private type also be private."
+    categories: [publicInterface]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -1969,12 +2081,14 @@
   lines_longer_than_80_chars:
     problemMessage: "The line length exceeds the 80-character limit."
     correctionMessage: "Try breaking the line across multiple lines."
+    categories: [style]
     hasPublishedDocs: false
   list_remove_unrelated_type:
     removedIn: "3.3"
   literal_only_boolean_expressions:
     problemMessage: "The Boolean expression has a constant value."
     correctionMessage: "Try changing the expression."
+    categories: [unusedCode]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2033,18 +2147,22 @@
   matching_super_parameters:
     problemMessage: "The super parameter named '{0}'' does not share the same name as the corresponding parameter in the super constructor, '{1}'."
     correctionMessage: "Try using the name of the corresponding parameter in the super constructor."
+    categories: [style]
     hasPublishedDocs: false
   missing_code_block_language_in_doc_comment:
     problemMessage: "The code block is missing a specified language."
     correctionMessage: "Try adding a language to the code block."
+    categories: [errorProne]
     hasPublishedDocs: false
   missing_whitespace_between_adjacent_strings:
     problemMessage: "Missing whitespace between adjacent strings."
     correctionMessage: "Try adding whitespace between the strings."
+    categories: [errorProne]
     hasPublishedDocs: false
   no_adjacent_strings_in_list:
     problemMessage: "Don't use adjacent strings in a list literal."
     correctionMessage: "Try adding a comma between the strings."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2087,10 +2205,12 @@
   no_default_cases:
     problemMessage: "Invalid use of 'default' member in a switch."
     correctionMessage: "Try enumerating all the possible values of the switch expression."
+    categories: [style]
     hasPublishedDocs: false
   no_duplicate_case_values:
     problemMessage: "The value of the case clause ('{0}') is equal to the value of an earlier case clause ('{1}')."
     correctionMessage: "Try removing or changing the value."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2150,6 +2270,7 @@
   no_leading_underscores_for_library_prefixes:
     problemMessage: "The library prefix '{0}' starts with an underscore."
     correctionMessage: "Try renaming the prefix to not start with an underscore."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2179,6 +2300,7 @@
   no_leading_underscores_for_local_identifiers:
     problemMessage: "The local variable '{0}' starts with an underscore."
     correctionMessage: "Try renaming the variable to not start with an underscore."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2208,10 +2330,12 @@
   no_literal_bool_comparisons:
     problemMessage: "Unnecessary comparison to a boolean literal."
     correctionMessage: "Remove the comparison and use the negate `!` operator if necessary."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
   no_logic_in_create_state:
     problemMessage: "Don't put any logic in 'createState'."
     correctionMessage: "Try moving the logic out of 'createState'."
+    categories: [errorProne, flutter]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2261,14 +2385,17 @@
   no_runtimeType_toString:
     problemMessage: "Using 'toString' on a 'Type' is not safe in production code."
     correctionMessage: "Try removing the usage of 'toString' or restructuring the code."
+    categories: [nonPerformant]
     hasPublishedDocs: false
   no_self_assignments:
     problemMessage: "The variable or property is being assigned to itself."
     correctionMessage: "Try removing the assignment that has no direct effect."
+    categories: [unintentional]
     hasPublishedDocs: false
   no_wildcard_variable_uses:
     problemMessage: "The referenced identifier is a wildcard."
     correctionMessage: "Use an identifier name that is not a wildcard."
+    categories: [languageFeatureUsage, unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2321,6 +2448,7 @@
   non_constant_identifier_names:
     problemMessage: "The variable name '{0}' isn't a lowerCamelCase identifier."
     correctionMessage: "Try changing the name to follow the lowerCamelCase style."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2350,10 +2478,12 @@
   noop_primitive_operations:
     problemMessage: "The expression has no effect and can be removed."
     correctionMessage: "Try removing the expression."
+    categories: [style]
     hasPublishedDocs: false
   null_check_on_nullable_type_parameter:
     problemMessage: "The null check operator shouldn't be used on a variable whose type is a potentially nullable type parameter."
     correctionMessage: "Try explicitly testing for 'null'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2391,26 +2521,32 @@
   null_closures:
     problemMessage: "Closure can't be 'null' because it might be invoked."
     correctionMessage: "Try providing a non-null closure."
+    categories: [errorProne]
     hasPublishedDocs: false
   omit_local_variable_types:
     problemMessage: "Unnecessary type annotation on a local variable."
     correctionMessage: "Try removing the type annotation."
+    categories: [style]
     hasPublishedDocs: false
   omit_obvious_local_variable_types:
     problemMessage: "Omit the type annotation on a local variable when the type is obvious."
     correctionMessage: "Try removing the type annotation."
+    categories: [style]
     hasPublishedDocs: false
   one_member_abstracts:
     problemMessage: "Unnecessary use of an abstract class."
     correctionMessage: "Try making '{0}' a top-level function and removing the class."
+    categories: [effectiveDart, languageFeatureUsage, style]
     hasPublishedDocs: false
   only_throw_errors:
     problemMessage: "Don't throw instances of classes that don't extend either 'Exception' or 'Error'."
     correctionMessage: "Try throwing a different class of object."
+    categories: [style]
     hasPublishedDocs: false
   overridden_fields:
     problemMessage: "Field overrides a field inherited from '{0}'."
     correctionMessage: "Try removing the field, overriding the getter and setter if necessary."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2470,10 +2606,12 @@
   package_api_docs:
     problemMessage: "Missing documentation for public API."
     correctionMessage: "Try adding a documentation comment."
+    categories: [effectiveDart, publicInterface]
     hasPublishedDocs: false
   package_names:
     problemMessage: "The package name '{0}' isn't a lower_case_with_underscores identifier."
     correctionMessage: "Try changing the name to follow the lower_case_with_underscores style."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2501,6 +2639,7 @@
   package_prefixed_library_names:
     problemMessage: "The library name is not a dot-separated path prefixed by the package name."
     correctionMessage: "Try changing the name to '{0}'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2552,10 +2691,12 @@
   parameter_assignments:
     problemMessage: "Invalid assignment to the parameter '{0}'."
     correctionMessage: "Try using a local variable in place of the parameter."
+    categories: [style]
     hasPublishedDocs: false
   prefer_adjacent_string_concatenation:
     problemMessage: "String literals shouldn't be concatenated by the '+' operator."
     correctionMessage: "Try removing the operator to use adjacent strings."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2582,16 +2723,19 @@
   prefer_asserts_in_initializer_lists:
     problemMessage: "Assert should be in the initializer list."
     correctionMessage: "Try moving the assert to the initializer list."
+    categories: [style]
     hasPublishedDocs: false
   prefer_asserts_with_message:
     problemMessage: "Missing a message in an assert."
     correctionMessage: "Try adding a message to the assert."
+    categories: [style]
     hasPublishedDocs: false
   prefer_bool_in_asserts:
     removedIn: "3.0"
   prefer_collection_literals:
     problemMessage: "Unnecessary constructor invocation."
     correctionMessage: "Try using a collection literal."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2619,6 +2763,7 @@
   prefer_conditional_assignment:
     problemMessage: "The 'if' statement could be replaced by a null-aware assignment."
     correctionMessage: "Try using the '??=' operator to conditionally assign a value."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2655,6 +2800,7 @@
   prefer_const_constructors:
     problemMessage: "Use 'const' with the constructor to improve performance."
     correctionMessage: "Try adding the 'const' keyword to the constructor invocation."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2701,6 +2847,7 @@
   prefer_const_constructors_in_immutables:
     problemMessage: "Constructors in '@immutable' classes should be declared as 'const'."
     correctionMessage: "Try adding 'const' to the constructor declaration."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2752,6 +2899,7 @@
   prefer_const_declarations:
     problemMessage: "Use 'const' for final variables initialized to a constant value."
     correctionMessage: "Try replacing 'final' with 'const'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2801,6 +2949,7 @@
   prefer_const_literals_to_create_immutables:
     problemMessage: "Use 'const' literals as arguments to constructors of '@immutable' classes."
     correctionMessage: "Try adding 'const' before the literal."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -2881,10 +3030,12 @@
   prefer_constructors_over_static_methods:
     problemMessage: "Static method should be a constructor."
     correctionMessage: "Try converting the method into a constructor."
+    categories: [style]
     hasPublishedDocs: false
   prefer_contains_always_false:
     sharedName: prefer_contains
     problemMessage: "Always 'false' because 'indexOf' is always greater than or equal to -1."
+    categories: [style]
     hasPublishedDocs: false
     todo: |-
       TODO(brianwilkerson): Should be warning rather than lint,
@@ -2935,6 +3086,7 @@
   prefer_double_quotes:
     problemMessage: "Unnecessary use of single quotes."
     correctionMessage: "Try using double quotes unless the string contains double quotes."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -2968,10 +3120,12 @@
   prefer_expression_function_bodies:
     problemMessage: "Unnecessary use of a block function body."
     correctionMessage: "Try using an expression function body."
+    categories: [brevity, style]
     hasPublishedDocs: false
   prefer_final_fields:
     problemMessage: "The private field {0} could be 'final'."
     correctionMessage: "Try making the field 'final'."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3008,6 +3162,7 @@
     sharedName: prefer_final_in_for_each
     problemMessage: "The pattern should be final."
     correctionMessage: "Try making the pattern final."
+    categories: [style]
     hasPublishedDocs: false
   prefer_final_in_for_each_variable:
     sharedName: prefer_final_in_for_each
@@ -3017,14 +3172,17 @@
   prefer_final_locals:
     problemMessage: "Local variables should be final."
     correctionMessage: "Try making the variable final."
+    categories: [style]
     hasPublishedDocs: false
   prefer_final_parameters:
     problemMessage: "The parameter '{0}' should be final."
     correctionMessage: "Try making the parameter final."
+    categories: [style]
     hasPublishedDocs: false
   prefer_for_elements_to_map_fromIterable:
     problemMessage: "Use 'for' elements when building maps from iterables."
     correctionMessage: "Try using a collection literal with a 'for' element."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3062,10 +3220,12 @@
   prefer_foreach:
     problemMessage: "Use 'forEach' rather than a 'for' loop to apply a function to every element."
     correctionMessage: "Try using 'forEach' rather than a 'for' loop."
+    categories: [style]
     hasPublishedDocs: false
   prefer_function_declarations_over_variables:
     problemMessage: "Use a function declaration rather than a variable assignment to bind a function to a name."
     correctionMessage: "Try rewriting the closure assignment as a function declaration."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3098,6 +3258,7 @@
   prefer_generic_function_type_aliases:
     problemMessage: "Use the generic function type syntax in 'typedef's."
     correctionMessage: "Try using the generic function type syntax ('{0}')."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3125,10 +3286,12 @@
   prefer_if_elements_to_conditional_expressions:
     problemMessage: "Use an 'if' element to conditionally add elements."
     correctionMessage: "Try using an 'if' element rather than a conditional expression."
+    categories: [brevity, style]
     hasPublishedDocs: false
   prefer_if_null_operators:
     problemMessage: "Use the '??' operator rather than '?:' when testing for 'null'."
     correctionMessage: "Try rewriting the code to use '??'."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3157,6 +3320,7 @@
   prefer_initializing_formals:
     problemMessage: "Use an initializing formal to assign a parameter to a field."
     correctionMessage: "Try using an initialing formal ('this.{0}') to initialize the field."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3188,6 +3352,12 @@
         C(this.c);
       }
       ```
+  prefer_inlined_adds_multiple:
+    sharedName: prefer_inlined_adds
+    problemMessage: "The addition of multiple list items could be inlined."
+    correctionMessage: "Try adding the items to the list literal directly."
+    categories: [brevity, style]
+    hasPublishedDocs: true
   prefer_inlined_adds_single:
     sharedName: prefer_inlined_adds
     problemMessage: "The addition of a list item could be inlined."
@@ -3241,18 +3411,15 @@
         return [a, ...b];
       }
       ```
-  prefer_inlined_adds_multiple:
-    sharedName: prefer_inlined_adds
-    problemMessage: "The addition of multiple list items could be inlined."
-    correctionMessage: "Try adding the items to the list literal directly."
-    hasPublishedDocs: true
   prefer_int_literals:
     problemMessage: "Unnecessary use of a 'double' literal."
     correctionMessage: "Try using an 'int' literal."
+    categories: [style]
     hasPublishedDocs: false
   prefer_interpolation_to_compose_strings:
     problemMessage: "Use interpolation to compose strings and values."
     correctionMessage: "Try using string interpolation to build the composite string."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3284,6 +3451,7 @@
   prefer_is_empty_always_false:
     sharedName: prefer_is_empty
     problemMessage: "The comparison is always 'false' because the length is always greater than or equal to 0."
+    categories: [errorProne]
     hasPublishedDocs: false
     todo: |-
       TODO(brianwilkerson): Should be warning rather than lint,
@@ -3332,6 +3500,7 @@
   prefer_is_not_empty:
     problemMessage: "Use 'isNotEmpty' rather than negating the result of 'isEmpty'."
     correctionMessage: "Try rewriting the expression to use 'isNotEmpty'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3358,6 +3527,7 @@
   prefer_is_not_operator:
     problemMessage: "Use the 'is!' operator rather than negating the value of the 'is' operator."
     correctionMessage: "Try rewriting the condition to use the 'is!' operator."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3394,6 +3564,7 @@
   prefer_iterable_whereType:
     problemMessage: "Use 'whereType' to select elements of a given type."
     correctionMessage: "Try rewriting the expression to use 'whereType'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3423,14 +3594,17 @@
   prefer_mixin:
     problemMessage: "Only mixins should be mixed in."
     correctionMessage: "Try converting '{0}' to a mixin."
+    categories: [languageFeatureUsage, style]
     hasPublishedDocs: false
   prefer_null_aware_method_calls:
     problemMessage: "Use a null-aware invocation of the 'call' method rather than explicitly testing for 'null'."
     correctionMessage: "Try using '?.call()' to invoke the function."
+    categories: [brevity, style]
     hasPublishedDocs: false
   prefer_null_aware_operators:
     problemMessage: "Use the null-aware operator '?.' rather than an explicit 'null' comparison."
     correctionMessage: "Try using '?.'."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3463,6 +3637,7 @@
   prefer_relative_imports:
     problemMessage: "Use relative imports for files in the 'lib' directory."
     correctionMessage: "Try converting the URI to a relative URI."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3490,6 +3665,7 @@
   prefer_single_quotes:
     problemMessage: "Unnecessary use of double quotes."
     correctionMessage: "Try using single quotes unless the string contains single quotes."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -3521,11 +3697,13 @@
   prefer_spread_collections:
     problemMessage: "The addition of multiple elements could be inlined."
     correctionMessage: "Try using the spread operator ('...') to inline the addition."
+    categories: [brevity, style]
     hasPublishedDocs: false
   prefer_typing_uninitialized_variables_for_field:
     sharedName: prefer_typing_uninitialized_variables
     problemMessage: "An uninitialized field should have an explicit type annotation."
     correctionMessage: "Try adding a type annotation."
+    categories: [errorProne, unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3579,6 +3757,7 @@
   prefer_void_to_null:
     problemMessage: "Unnecessary use of the type 'Null'."
     correctionMessage: "Try using 'void' instead."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3605,6 +3784,7 @@
   provide_deprecation_message:
     problemMessage: "Missing a deprecation message."
     correctionMessage: "Try using the constructor to provide a message ('@Deprecated(\"message\")')."
+    categories: [publicInterface]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3633,10 +3813,12 @@
   public_member_api_docs:
     problemMessage: "Missing documentation for a public member."
     correctionMessage: "Try adding documentation for the member."
+    categories: [publicInterface, style]
     hasPublishedDocs: false
   recursive_getters:
     problemMessage: "The getter '{0}' recursively returns itself."
     correctionMessage: "Try changing the value being returned."
+    categories: [errorProne, unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3671,10 +3853,12 @@
   require_trailing_commas:
     problemMessage: "Missing a required trailing comma."
     correctionMessage: "Try adding a trailing comma."
+    categories: [style]
     hasPublishedDocs: false
   secure_pubspec_urls:
     problemMessage: "The '{0}' protocol shouldn't be used because it isn't secure."
     correctionMessage: "Try using a secure protocol, such as 'https'."
+    categories: [pub]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3705,6 +3889,7 @@
   sized_box_for_whitespace:
     problemMessage: "Use a 'SizedBox' to add whitespace to a layout."
     correctionMessage: "Try using a 'SizedBox' rather than a 'Container'."
+    categories: [flutter, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3761,6 +3946,7 @@
   sized_box_shrink_expand:
     problemMessage: "Use 'SizedBox.{0}' to avoid needing to specify the 'height' and 'width'."
     correctionMessage: "Try using 'SizedBox.{0}' and removing the 'height' and 'width' arguments."
+    categories: [flutter, style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -3829,6 +4015,7 @@
   slash_for_doc_comments:
     problemMessage: "Use the end-of-line form ('///') for doc comments."
     correctionMessage: "Try rewriting the comment to use '///'."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3859,6 +4046,7 @@
   sort_child_properties_last:
     problemMessage: "The '{0}' argument should be last in widget constructor invocations."
     correctionMessage: "Try moving the argument to the end of the argument list."
+    categories: [flutter, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3901,6 +4089,7 @@
   sort_constructors_first:
     problemMessage: "Constructor declarations should be before non-constructor declarations."
     correctionMessage: "Try moving the constructor declaration before all other members."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -3935,6 +4124,7 @@
   sort_pub_dependencies:
     problemMessage: "Dependencies not sorted alphabetically."
     correctionMessage: "Try sorting the dependencies alphabetically (A to Z)."
+    categories: [pub]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -3967,6 +4157,7 @@
   sort_unnamed_constructors_first:
     problemMessage: "Invalid location for the unnamed constructor."
     correctionMessage: "Try moving the unnamed constructor before all other constructors."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -4001,11 +4192,13 @@
   specify_nonobvious_local_variable_types:
     problemMessage: "Specify the type of a local variable when the type is non-obvious."
     correctionMessage: "Try adding a type annotation."
+    categories: [style]
   super_goes_last:
     removedIn: "3.0"
   test_types_in_equals:
     problemMessage: "Missing type test for '{0}' in '=='."
     correctionMessage: "Try testing the type of '{0}'."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4050,6 +4243,7 @@
   throw_in_finally:
     problemMessage: "Use of '{0}' in 'finally' block."
     correctionMessage: "Try moving the '{0}' outside the 'finally' block."
+    categories: [errorProne]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4092,14 +4286,17 @@
   tighten_type_of_initializing_formals:
     problemMessage: "Use a type annotation rather than 'assert' to enforce non-nullability."
     correctionMessage: "Try adding a type annotation and removing the 'assert'."
+    categories: [style]
     hasPublishedDocs: false
   type_annotate_public_apis:
     problemMessage: "Missing type annotation on a public API."
     correctionMessage: "Try adding a type annotation."
+    categories: [effectiveDart, publicInterface]
     hasPublishedDocs: false
   type_init_formals:
     problemMessage: "Don't needlessly type annotate initializing formals."
     correctionMessage: "Try removing the type."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4155,6 +4352,7 @@
   type_literal_in_constant_pattern:
     problemMessage: "Use 'TypeName _' instead of a type literal."
     correctionMessage: "Replace with 'TypeName _'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4211,6 +4409,7 @@
   unawaited_futures:
     problemMessage: "Missing an 'await' for the 'Future' computed by this expression."
     correctionMessage: "Try adding an 'await' or wrapping the expression with 'unawaited'."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -4262,14 +4461,17 @@
   unintended_html_in_doc_comment:
     problemMessage: "Angle brackets will be interpreted as HTML."
     correctionMessage: "Try using backticks around the content with angle brackets, or try replacing `<` with `&lt;` and `>` with `&gt;`."
+    categories: [errorProne]
     hasPublishedDocs: false
   unnecessary_await_in_return:
     problemMessage: "Unnecessary 'await'."
     correctionMessage: "Try removing the 'await'."
+    categories: [style]
     hasPublishedDocs: false
   unnecessary_brace_in_string_interps:
     problemMessage: "Unnecessary braces in a string interpolation."
     correctionMessage: "Try removing the braces."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4301,10 +4503,12 @@
   unnecessary_breaks:
     problemMessage: "Unnecessary 'break' statement."
     correctionMessage: "Try removing the 'break'."
+    categories: [brevity, style]
     hasPublishedDocs: false
   unnecessary_const:
     problemMessage: "Unnecessary 'const' keyword."
     correctionMessage: "Try removing the keyword."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4334,6 +4538,7 @@
   unnecessary_constructor_name:
     problemMessage: "Unnecessary '.new' constructor name."
     correctionMessage: "Try removing the '.new'."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4362,6 +4567,7 @@
     sharedName: unnecessary_final
     problemMessage: "Local variables should not be marked as 'final'."
     correctionMessage: "Remove the 'final'."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -4410,6 +4616,7 @@
   unnecessary_getters_setters:
     problemMessage: "Unnecessary use of getter and setter to wrap a field."
     correctionMessage: "Try removing the getter and setter and renaming the field."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4444,6 +4651,7 @@
   unnecessary_lambdas:
     problemMessage: "Closure should be a tearoff."
     correctionMessage: "Try using a tearoff rather than a closure."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -4478,6 +4686,7 @@
   unnecessary_late:
     problemMessage: "Unnecessary 'late' modifier."
     correctionMessage: "Try removing the 'late'."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4510,14 +4719,17 @@
   unnecessary_library_directive:
     problemMessage: "Library directives without comments or annotations should be avoided."
     correctionMessage: "Try deleting the library directive."
+    categories: [brevity]
     hasPublishedDocs: false
   unnecessary_library_name:
     problemMessage: "Library names are not necessary."
     correctionMessage: "Remove the library name."
+    categories: [brevity, languageFeatureUsage, style]
     hasPublishedDocs: false
   unnecessary_new:
     problemMessage: "Unnecessary 'new' keyword."
     correctionMessage: "Try removing the 'new' keyword."
+    categories: [brevity, languageFeatureUsage, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4544,6 +4756,7 @@
   unnecessary_null_aware_assignments:
     problemMessage: "Unnecessary assignment of 'null'."
     correctionMessage: "Try removing the assignment."
+    categories: [brevity, effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4583,14 +4796,17 @@
   unnecessary_null_aware_operator_on_extension_on_nullable:
     problemMessage: "Unnecessary use of a null-aware operator to invoke an extension method on a nullable type."
     correctionMessage: "Try removing the '?'."
+    categories: [style]
     hasPublishedDocs: false
   unnecessary_null_checks:
     problemMessage: "Unnecessary use of a null check ('!')."
     correctionMessage: "Try removing the null check."
+    categories: [brevity, style]
     hasPublishedDocs: false
   unnecessary_null_in_if_null_operators:
     problemMessage: "Unnecessary use of '??' with 'null'."
     correctionMessage: "Try removing the '??' operator and the 'null' operand."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4625,6 +4841,7 @@
   unnecessary_nullable_for_final_variable_declarations:
     problemMessage: "Type could be non-nullable."
     correctionMessage: "Try changing the type to be non-nullable."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4651,6 +4868,7 @@
   unnecessary_overrides:
     problemMessage: "Unnecessary override."
     correctionMessage: "Try adding behavior in the overriding member or removing the override."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4723,6 +4941,7 @@
   unnecessary_parenthesis:
     problemMessage: "Unnecessary use of parentheses."
     correctionMessage: "Try removing the parentheses."
+    categories: [brevity, style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -4749,6 +4968,7 @@
   unnecessary_raw_strings:
     problemMessage: "Unnecessary use of a raw string."
     correctionMessage: "Try using a normal string."
+    categories: [brevity, style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -4776,6 +4996,7 @@
   unnecessary_statements:
     problemMessage: "Unnecessary statement."
     correctionMessage: "Try completing the statement or breaking it up."
+    categories: [brevity, unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4824,6 +5045,7 @@
   unnecessary_string_escapes:
     problemMessage: "Unnecessary escape in string literal."
     correctionMessage: "Remove the '\\' escape."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4850,6 +5072,7 @@
   unnecessary_string_interpolations:
     problemMessage: "Unnecessary use of string interpolation."
     correctionMessage: "Try replacing the string literal with the variable name."
+    categories: [brevity, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4878,6 +5101,7 @@
   unnecessary_this:
     problemMessage: "Unnecessary 'this.' qualifier."
     correctionMessage: "Try removing 'this.'."
+    categories: [brevity, effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4912,6 +5136,7 @@
   unnecessary_to_list_in_spreads:
     problemMessage: "Unnecessary use of 'toList' in a spread."
     correctionMessage: "Try removing the invocation of 'toList'."
+    categories: [brevity]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -4949,11 +5174,13 @@
   unreachable_from_main:
     problemMessage: "Unreachable member '{0}' in an executable library."
     correctionMessage: "Try referencing the member or removing it."
+    categories: [unusedCode]
     hasPublishedDocs: false
   unrelated_type_equality_checks_in_expression:
     sharedName: unrelated_type_equality_checks
     problemMessage: "The type of the right operand ('{0}') isn't a subtype or a supertype of the left operand ('{1}')."
     correctionMessage: "Try changing one or both of the operands."
+    categories: [unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5005,21 +5232,23 @@
     sharedName: unsafe_html
     problemMessage: "Assigning to the attribute '{0}' is unsafe."
     correctionMessage: "Try finding a different way to implement the page."
-    hasPublishedDocs: false
-  unsafe_html_method:
-    sharedName: unsafe_html
-    problemMessage: "Invoking the method '{0}' is unsafe."
-    correctionMessage: "Try finding a different way to implement the page."
+    categories: [errorProne]
     hasPublishedDocs: false
   unsafe_html_constructor:
     sharedName: unsafe_html
     problemMessage: "Invoking the constructor '{0}' is unsafe."
     correctionMessage: "Try finding a different way to implement the page."
     hasPublishedDocs: false
+  unsafe_html_method:
+    sharedName: unsafe_html
+    problemMessage: "Invoking the method '{0}' is unsafe."
+    correctionMessage: "Try finding a different way to implement the page."
+    hasPublishedDocs: false
   use_build_context_synchronously_async_use:
     sharedName: use_build_context_synchronously
     problemMessage: "Don't use 'BuildContext's across async gaps."
     correctionMessage: "Try rewriting the code to not use the 'BuildContext', or guard the use with a 'mounted' check."
+    categories: [errorProne, flutter]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5077,9 +5306,15 @@
         }
       }
       ```
+  use_build_context_synchronously_wrong_mounted:
+    sharedName: use_build_context_synchronously
+    problemMessage: "Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check."
+    correctionMessage: "Guard a 'State.context' use with a 'mounted' check on the State, and other BuildContext use with a 'mounted' check on the BuildContext."
+    hasPublishedDocs: true
   use_colored_box:
     problemMessage: "Use a 'ColoredBox' rather than a 'Container' with only a 'Color'."
     correctionMessage: "Try replacing the 'Container' with a 'ColoredBox'."
+    categories: [flutter, style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5120,6 +5355,7 @@
   use_decorated_box:
     problemMessage: "Use 'DecoratedBox' rather than a 'Container' with only a 'Decoration'."
     correctionMessage: "Try replacing the 'Container' with a 'DecoratedBox'."
+    categories: [flutter, style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5167,18 +5403,14 @@
         );
       }
       ```
-  use_build_context_synchronously_wrong_mounted:
-    sharedName: use_build_context_synchronously
-    problemMessage: "Don't use 'BuildContext's across async gaps, guarded by an unrelated 'mounted' check."
-    correctionMessage: "Guard a 'State.context' use with a 'mounted' check on the State, and other BuildContext use with a 'mounted' check on the BuildContext."
-    hasPublishedDocs: true
   use_enums:
     problemMessage: "Class should be an enum."
     correctionMessage: "Try using an enum rather than a class."
+    categories: [style]
     hasPublishedDocs: false
   use_full_hex_values_for_flutter_colors:
     problemMessage: "Instances of 'Color' should be created using an 8-digit hexadecimal integer (such as '0xFFFFFFFF')."
-    correctionMessage: "Try using an 8-digit hexadecimal integer to create the 'Color'."
+    categories: [flutter, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5210,6 +5442,7 @@
   use_function_type_syntax_for_parameters:
     problemMessage: "Use the generic function type syntax to declare the parameter '{0}'."
     correctionMessage: "Try using the generic function type syntax."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5236,6 +5469,7 @@
   use_if_null_to_convert_nulls_to_bools:
     problemMessage: "Use an if-null operator to convert a 'null' to a 'bool'."
     correctionMessage: "Try using an if-null operator."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5270,10 +5504,12 @@
   use_is_even_rather_than_modulo:
     problemMessage: "Use '{0}' rather than '% 2'."
     correctionMessage: "Try using '{0}'."
+    categories: [style]
     hasPublishedDocs: false
   use_key_in_widget_constructors:
     problemMessage: "Constructors for public widgets should have a named 'key' parameter."
     correctionMessage: "Try adding a named parameter to the constructor."
+    categories: [flutter, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5319,6 +5555,7 @@
   use_late_for_private_fields_and_variables:
     problemMessage: "Use 'late' for private members with a non-nullable type."
     correctionMessage: "Try making adding the modifier 'late'."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5356,6 +5593,7 @@
   use_named_constants:
     problemMessage: "Use the constant '{0}' rather than a constructor returning the same object."
     correctionMessage: "Try using '{0}'."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5384,6 +5622,7 @@
   use_raw_strings:
     problemMessage: "Use a raw string to avoid using escapes."
     correctionMessage: "Try making the string a raw string and removing the escapes."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5412,6 +5651,7 @@
   use_rethrow_when_possible:
     problemMessage: "Use 'rethrow' to rethrow a caught exception."
     correctionMessage: "Try replacing the 'throw' with a 'rethrow'."
+    categories: [brevity, effectiveDart]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5450,6 +5690,7 @@
   use_setters_to_change_properties:
     problemMessage: "The method is used to change a property."
     correctionMessage: "Try converting the method to a setter."
+    categories: [style]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5485,6 +5726,7 @@
   use_string_buffers:
     problemMessage: "Use a string buffer rather than '+' to compose strings."
     correctionMessage: "Try writing the parts of a string to a string buffer."
+    categories: [nonPerformant]
     hasPublishedDocs: false
     documentation: |-
       #### Description
@@ -5524,6 +5766,7 @@
   use_string_in_part_of_directives:
     problemMessage: "The part-of directive uses a library name."
     correctionMessage: "Try converting the directive to use the URI of the library."
+    categories: [effectiveDart, style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5561,6 +5804,7 @@
     sharedName: use_super_parameters
     problemMessage: "Parameters '{0}' could be super parameters."
     correctionMessage: "Trying converting '{0}' to super parameters."
+    categories: [brevity]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5603,18 +5847,22 @@
   use_test_throws_matchers:
     problemMessage: "Use the 'throwsA' matcher instead of using 'fail' when there is no exception thrown."
     correctionMessage: "Try removing the try-catch and using 'throwsA' to expect an exception."
+    categories: [style]
     hasPublishedDocs: false
   use_to_and_as_if_applicable:
     problemMessage: "Start the name of the method with 'to' or 'as'."
     correctionMessage: "Try renaming the method to use either 'to' or 'as'."
+    categories: [effectiveDart, style]
     hasPublishedDocs: false
   use_truncating_division:
     problemMessage: "Use truncating division."
     correctionMessage: "Try using truncating division, '~/', instead of regular division ('/') followed by 'toInt()'."
+    categories: [languageFeatureUsage]
     hasPublishedDocs: false
   valid_regexps:
     problemMessage: "Invalid regular expression syntax."
     correctionMessage: "Try correcting the regular expression."
+    categories: [unintentional]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5645,6 +5893,7 @@
   void_checks:
     problemMessage: "Assignment to a variable of type 'void'."
     correctionMessage: "Try removing the assignment or changing the type of the variable."
+    categories: [style]
     hasPublishedDocs: true
     documentation: |-
       #### Description
@@ -5708,3 +5957,4 @@
 
       void f(A<void> a) {}
       ```
+
diff --git a/pkg/linter/test/engine_test.dart b/pkg/linter/test/engine_test.dart
index 51a3e7d..4bb3886 100644
--- a/pkg/linter/test/engine_test.dart
+++ b/pkg/linter/test/engine_test.dart
@@ -64,11 +64,7 @@
 class MockLintRule extends LintRule {
   final NodeVisitor nodeVisitor;
   MockLintRule(this.nodeVisitor)
-      : super(
-            name: 'MockLint',
-            categories: {LintRuleCategory.style},
-            description: 'Desc',
-            details: 'And so on...');
+      : super(name: 'MockLint', description: 'Desc', details: 'And so on...');
 
   @override
   PubspecVisitor getPubspecVisitor() => MockPubspecVisitor(nodeVisitor);
diff --git a/pkg/linter/test/integration_test.dart b/pkg/linter/test/integration_test.dart
index baae251..34c8661 100644
--- a/pkg/linter/test/integration_test.dart
+++ b/pkg/linter/test/integration_test.dart
@@ -8,6 +8,7 @@
 import 'package:test/test.dart';
 
 import '../tool/checks/check_all_yaml.dart';
+import '../tool/checks/check_messages_yaml.dart';
 import 'mocks.dart';
 
 void main() {
@@ -34,5 +35,12 @@
         }
       });
     });
+
+    test('messages.yaml', () {
+      var errors = checkMessagesYaml();
+      if (errors != null) {
+        fail(errors);
+      }
+    });
   });
 }
diff --git a/pkg/linter/tool/checks/check_messages_yaml.dart b/pkg/linter/tool/checks/check_messages_yaml.dart
new file mode 100644
index 0000000..e6bd5ef
--- /dev/null
+++ b/pkg/linter/tool/checks/check_messages_yaml.dart
@@ -0,0 +1,121 @@
+// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+import 'dart:io';
+
+import 'package:analyzer/src/lint/state.dart';
+import 'package:linter/src/analyzer.dart';
+import 'package:linter/src/rules.dart';
+
+import '../messages_data.dart';
+
+/// Checks the 'messages.yaml' file for correctness.
+///
+/// Prints any errors.
+void main() {
+  var errors = checkMessagesYaml();
+  if (errors != null) {
+    // ignore: avoid_print
+    print(errors);
+    exitCode = 1;
+  }
+}
+
+/// Checks the 'messages.yaml' file for correctness, returning a String if
+/// there are errors, and `null` otherwise.
+String? checkMessagesYaml() {
+  var lintCodeSection = messagesYaml.lintCodes;
+
+  var codeNames = [
+    for (var codeName in lintCodeSection.keys) codeName as String,
+  ];
+
+  var sortedRules = codeNames.toList()..sort();
+
+  for (var i = 0; i < codeNames.length; i++) {
+    if (codeNames[i] != sortedRules[i]) {
+      return "Error: Rules in 'messages.yaml' are not sorted alphabetically, "
+          "starting at '${codeNames[i]}'.";
+    }
+  }
+
+  registerLintRules();
+
+  var registeredRules = Analyzer.facade.registeredRules.where((r) =>
+      !r.state.isDeprecated && !r.state.isInternal && !r.state.isRemoved);
+
+  var sharedCodeNames = <String>{};
+  var extraRuleNames = <String>[];
+  var missingRules = <String>[];
+
+  lintCodeSection.forEach((codeName, data) {
+    var name = codeName as String;
+    data as Map;
+    if (data.containsKey('sharedName')) {
+      name = data['sharedName'] as String;
+    }
+    sharedCodeNames.add(name);
+    if (data.containsKey('removedIn')) return;
+
+    const knownUnregisteredRules = {'erase_dart_type_extension_types'};
+    if (knownUnregisteredRules.contains(name)) return;
+
+    if (!registeredRules.any((r) => r.name == name)) {
+      extraRuleNames.add(codeName);
+    }
+  });
+  for (var rule in registeredRules) {
+    if (!sharedCodeNames.contains(rule.name)) {
+      missingRules.add(rule.name);
+    }
+  }
+
+  if (extraRuleNames.isEmpty && missingRules.isEmpty) {
+    return null;
+  }
+
+  var errors = StringBuffer();
+  if (extraRuleNames.isNotEmpty) {
+    errors.writeln('Found unknown (or deprecated/removed) rules:');
+    for (var rule in extraRuleNames) {
+      errors.writeln('- $rule');
+    }
+  }
+  if (missingRules.isNotEmpty) {
+    errors.writeln('Missing rules:');
+    for (var rule in missingRules) {
+      errors.writeln('- $rule');
+    }
+  }
+
+  const categoryNames = {
+    'binarySize',
+    'brevity',
+    'documentationCommentMaintenance',
+    'effectiveDart',
+    'errorProne',
+    'flutter',
+    'languageFeatureUsage',
+    'memoryLeaks',
+    'nonPerformant',
+    'pub',
+    'publicInterface',
+    'style',
+    'unintentional',
+    'unusedCode',
+    'web',
+  };
+  messagesYaml.categoryMappings.forEach((codeName, categories) {
+    if (categories.isEmpty) {
+      errors.writeln("Missing 'categories' list for '$codeName'");
+    }
+    for (var category in categories) {
+      if (!categoryNames.contains(category)) {
+        errors.writeln("Invalid category for '$codeName': $category");
+      }
+    }
+  });
+
+  return errors.toString();
+}
diff --git a/pkg/linter/tool/checks/rules/no_solo_tests.dart b/pkg/linter/tool/checks/rules/no_solo_tests.dart
index 0b9ddc2..ab3fd87 100644
--- a/pkg/linter/tool/checks/rules/no_solo_tests.dart
+++ b/pkg/linter/tool/checks/rules/no_solo_tests.dart
@@ -36,10 +36,10 @@
 
   NoSoloTests()
       : super(
-            name: 'no_solo_tests',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errors});
+          name: 'no_solo_tests',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => code;
diff --git a/pkg/linter/tool/checks/rules/visit_registered_nodes.dart b/pkg/linter/tool/checks/rules/visit_registered_nodes.dart
index ec244ff..28af008 100644
--- a/pkg/linter/tool/checks/rules/visit_registered_nodes.dart
+++ b/pkg/linter/tool/checks/rules/visit_registered_nodes.dart
@@ -71,10 +71,10 @@
 
   VisitRegisteredNodes()
       : super(
-            name: 'visit_registered_nodes',
-            description: _desc,
-            details: _details,
-            categories: {LintRuleCategory.errors});
+          name: 'visit_registered_nodes',
+          description: _desc,
+          details: _details,
+        );
 
   @override
   LintCode get lintCode => code;
diff --git a/pkg/linter/tool/machine.dart b/pkg/linter/tool/machine.dart
index 8f99359..d855445 100644
--- a/pkg/linter/tool/machine.dart
+++ b/pkg/linter/tool/machine.dart
@@ -14,6 +14,7 @@
 import 'package:yaml/yaml.dart';
 
 import '../tool/util/path_utils.dart';
+import 'messages_data.dart';
 import 'since.dart';
 import 'util/score_utils.dart' as score_utils;
 
@@ -68,12 +69,13 @@
     flutterRules: flutterRules
   ) = await _fetchSetRules(fetch: includeSetInfo);
 
+  var categories = messagesYaml.categoryMappings;
   var json = encoder.convert([
     for (var rule in rules.where((rule) => !rule.state.isInternal))
       {
         'name': rule.name,
         'description': rule.description,
-        'categories': rule.categories.toList(),
+        'categories': categories[rule.name]?.toList(),
         'state': rule.state.label,
         'incompatible': rule.incompatibleRules,
         'sets': [
diff --git a/pkg/linter/tool/messages_data.dart b/pkg/linter/tool/messages_data.dart
new file mode 100644
index 0000000..6602852
--- /dev/null
+++ b/pkg/linter/tool/messages_data.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2024, the Dart project authors. Please see the AUTHORS file
+// 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.
+
+import 'package:analyzer/src/lint/io.dart';
+import 'package:yaml/yaml.dart';
+
+import 'util/path_utils.dart';
+
+MessagesData messagesYaml = () {
+  var doc = loadYamlNode(readFile(_messagesYamlPath));
+  if (doc is! YamlMap) throw StateError('messages.yaml is not a map');
+  return MessagesData(doc);
+}();
+
+var _messagesYamlPath = pathRelativeToPackageRoot(['messages.yaml']);
+
+extension type MessagesData(YamlMap _map) {
+  Map<String, Set<String>> get categoryMappings {
+    var result = <String, Set<String>>{};
+
+    for (var code in lintCodes.keys) {
+      var data = lintCodes[code] as YamlMap;
+      if (data.containsKey('removedIn')) {
+        continue;
+      }
+      var name = code as String;
+      if (data.containsKey('sharedName')) {
+        name = data['sharedName'] as String;
+      }
+      var categoriesData = data['categories'] as List?;
+      var categories = (categoriesData ?? []).toSet().cast<String>();
+      result.putIfAbsent(name, () => categories);
+    }
+
+    return result;
+  }
+
+  YamlMap get lintCodes {
+    var lintRuleSection = _map['LintCode'] as YamlMap?;
+    if (lintRuleSection == null) {
+      throw StateError(
+          "Error: '$_messagesYamlPath' does not have a 'LintCode' section.");
+    }
+    return lintRuleSection;
+  }
+}
diff --git a/pkg/linter/tool/rule.dart b/pkg/linter/tool/rule.dart
index 5230b6a..16f1dd3 100644
--- a/pkg/linter/tool/rule.dart
+++ b/pkg/linter/tool/rule.dart
@@ -7,13 +7,13 @@
 import 'package:analyzer/src/lint/registry.dart';
 import 'package:analyzer/src/lint/state.dart';
 import 'package:args/args.dart';
-import 'package:linter/src/analyzer.dart';
 import 'package:linter/src/rules.dart';
 import 'package:linter/src/utils.dart';
 import 'package:path/path.dart' as path;
 
 import '../test/test_constants.dart';
 import 'changelog.dart';
+import 'messages_data.dart';
 import 'since.dart';
 
 /// Generates rule and rule test stub files (into `src/rules` and `test/rules`
@@ -258,13 +258,13 @@
   names.add(libName);
   names.sort();
 
+  var categories = messagesYaml.categoryMappings;
   var imports = <String>[];
   for (var name in names) {
     var rule = Registry.ruleRegistry.getRule(name);
-    var pathPrefix =
-        rule != null && rule.categories.contains(LintRuleCategory.pub)
-            ? path.join('rules', 'pub')
-            : 'rules';
+    var pathPrefix = rule != null && categories[rule.name]!.contains('pub')
+        ? path.join('rules', 'pub')
+        : 'rules';
     imports.add("import '$pathPrefix/$name.dart';");
   }