use super::{
    RuleConfigurability, RuleDefaultSeverity, RuleDefinition, RuleLanguage, RuleStatus, bindings,
};

pub(crate) const RULE_DEFINITIONS: &[RuleDefinition] = &[
    RuleDefinition {
        id: "dbg_macro_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "dbg!() left in non-test Rust code.",
        binding_location: bindings::RUST_ANALYSIS_EVALUATE,
    },
    RuleDefinition {
        id: "expect_in_non_test_code",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "expect() used in non-test Rust code.",
        binding_location: bindings::RUST_ANALYSIS_EVALUATE,
    },
    RuleDefinition {
        id: "fixme_doc_comment_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Info,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Rust doc comments that still contain a FIXME marker in non-test code.",
        binding_location: bindings::RUST_ANALYSIS_FINDINGS,
    },
    RuleDefinition {
        id: "hack_doc_comment_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Info,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Rust doc comments that still contain a HACK marker in non-test code.",
        binding_location: bindings::RUST_ANALYSIS_FINDINGS,
    },
    RuleDefinition {
        id: "panic_macro_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "panic macro left in non-test Rust code.",
        binding_location: bindings::RUST_ANALYSIS_EVALUATE,
    },
    RuleDefinition {
        id: "todo_doc_comment_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Info,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "Rust doc comments that still contain a TODO marker in non-test code.",
        binding_location: bindings::RUST_ANALYSIS_FINDINGS,
    },
    RuleDefinition {
        id: "todo_macro_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "todo!() left in non-test Rust code.",
        binding_location: bindings::RUST_ANALYSIS_EVALUATE,
    },
    RuleDefinition {
        id: "unimplemented_macro_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "unimplemented!() left in non-test Rust code.",
        binding_location: bindings::RUST_ANALYSIS_EVALUATE,
    },
    RuleDefinition {
        id: "unreachable_macro_leftover",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "unreachable!() left in non-test Rust code.",
        binding_location: bindings::RUST_ANALYSIS_EVALUATE,
    },
    RuleDefinition {
        id: "unsafe_without_safety_comment",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "unsafe fn or unsafe block without a nearby SAFETY: comment within the previous two lines.",
        binding_location: bindings::RUST_ANALYSIS_FINDINGS,
    },
    RuleDefinition {
        id: "unwrap_in_non_test_code",
        language: RuleLanguage::Rust,
        family: "hygiene",
        default_severity: RuleDefaultSeverity::Warning,
        status: RuleStatus::Stable,
        configurability: &[
            RuleConfigurability::Disable,
            RuleConfigurability::Ignore,
            RuleConfigurability::SeverityOverride,
        ],
        description: "unwrap() used in non-test Rust code.",
        binding_location: bindings::RUST_ANALYSIS_EVALUATE,
    },
];
