{
  "id": "D001",
  "name": "Recommended Lint Rules Should Be Enabled",
  "description": "Ensure recommended lint rules from flutter_lints or very_good_analysis are enabled in analysis_options.yaml with appropriate severity",
  "severity": "warning",
  "category": "dart",
  "languages": ["dart"],
  "tags": ["lint", "best-practices", "flutter", "code-quality"],
  "analysisMethod": "dart-only",
  "dartAnalyzer": {
    "class": "D001RecommendedLintRulesAnalyzer",
    "file": "D001_recommended_lint_rules.dart"
  },
  "detection": {
    "targetFiles": ["analysis_options.yaml", "analysis_options.yml"],
    "requiredPackages": [
      "flutter_lints",
      "very_good_analysis",
      "lints"
    ],
    "recommendedRules": {
      "errors": [
        "avoid_empty_else",
        "avoid_print",
        "avoid_relative_lib_imports",
        "avoid_returning_null_for_future",
        "avoid_slow_async_io",
        "avoid_type_to_string",
        "avoid_types_as_parameter_names",
        "avoid_web_libraries_in_flutter",
        "cancel_subscriptions",
        "close_sinks",
        "empty_statements",
        "hash_and_equals",
        "no_adjacent_strings_in_list",
        "no_duplicate_case_values",
        "prefer_void_to_null",
        "throw_in_finally",
        "unnecessary_statements",
        "unrelated_type_equality_checks",
        "valid_regexps"
      ],
      "warnings": [
        "always_declare_return_types",
        "always_require_non_null_named_parameters",
        "annotate_overrides",
        "avoid_init_to_null",
        "avoid_null_checks_in_equality_operators",
        "avoid_renaming_method_parameters",
        "avoid_return_types_on_setters",
        "avoid_shadowing_type_parameters",
        "avoid_single_cascade_in_expression_statements",
        "await_only_futures",
        "camel_case_extensions",
        "camel_case_types",
        "constant_identifier_names",
        "curly_braces_in_flow_control_structures",
        "empty_catches",
        "empty_constructor_bodies",
        "exhaustive_cases",
        "file_names",
        "implementation_imports",
        "library_names",
        "library_prefixes",
        "no_leading_underscores_for_library_prefixes",
        "no_leading_underscores_for_local_identifiers",
        "null_check_on_nullable_type_parameter",
        "null_closures",
        "overridden_fields",
        "prefer_adjacent_string_concatenation",
        "prefer_collection_literals",
        "prefer_conditional_assignment",
        "prefer_contains",
        "prefer_final_fields",
        "prefer_for_elements_to_map_fromIterable",
        "prefer_function_declarations_over_variables",
        "prefer_generic_function_type_aliases",
        "prefer_if_null_operators",
        "prefer_initializing_formals",
        "prefer_inlined_adds",
        "prefer_interpolation_to_compose_strings",
        "prefer_is_empty",
        "prefer_is_not_empty",
        "prefer_is_not_operator",
        "prefer_iterable_whereType",
        "prefer_null_aware_operators",
        "prefer_spread_collections",
        "prefer_typing_uninitialized_variables",
        "provide_deprecation_message",
        "recursive_getters",
        "slash_for_doc_comments",
        "type_init_formals",
        "unnecessary_brace_in_string_interps",
        "unnecessary_const",
        "unnecessary_constructor_name",
        "unnecessary_getters_setters",
        "unnecessary_late",
        "unnecessary_new",
        "unnecessary_null_aware_assignments",
        "unnecessary_null_in_if_null_operators",
        "unnecessary_nullable_for_final_variable_declarations",
        "unnecessary_overrides",
        "unnecessary_string_escapes",
        "unnecessary_string_interpolations",
        "unnecessary_this",
        "use_function_type_syntax_for_parameters",
        "use_rethrow_when_possible"
      ]
    },
    "minimumSeverity": "warning"
  },
  "examples": {
    "violations": [
      {
        "description": "analysis_options.yaml without recommended lint package",
        "code": "# analysis_options.yaml\nanalyzer:\n  strong-mode:\n    implicit-casts: false"
      },
      {
        "description": "Lint rules disabled without justification",
        "code": "# analysis_options.yaml\nlinter:\n  rules:\n    avoid_print: false\n    cancel_subscriptions: false"
      }
    ],
    "clean": [
      {
        "description": "Using flutter_lints with proper configuration",
        "code": "# analysis_options.yaml\ninclude: package:flutter_lints/flutter.yaml\n\nlinter:\n  rules:\n    avoid_print: error"
      },
      {
        "description": "Using very_good_analysis",
        "code": "# analysis_options.yaml\ninclude: package:very_good_analysis/analysis_options.yaml"
      }
    ]
  }
}
