You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: use_key_with_click_events.rs
    path of file: ./repos/tools/crates/rome_js_analyze/src/analyzers/a11y
    
    the code of the file until where you have to start completion: use rome_analyze::{context::RuleContext, declare_rule, Ast, Rule, RuleDiagnostic};
use rome_console::markup;
use rome_js_syntax::{jsx_ext::AnyJsxElement, AnyJsxAttribute, AnyJsxElementName};
use rome_rowan::AstNode;

declare_rule! {
    /// Enforce onClick is accompanied by at least one of the following: `onKeyUp`, `onKeyDown`, `onKeyPress`.
    ///
    /// Coding for the keyboard is important for users with physical disabilities who cannot use a mouse, AT compatibility, and screenreader users.
    /// This does not apply for interactive or hidden elements.
    ///
    /// ## Examples
    ///
    /// ### Invalid
    ///
    /// ```jsx,expect_diagnostic
    /// <div onClick={() => {}} />
    /// 
    
    fn run(ctx: &RuleContext<Self>) -> Self::Signals {
        let element = ctx.query();

        match element.name() {
            Ok(AnyJsxElementName::JsxName(name)) => {
                let element_name = name.value_token().ok()?.text_trimmed().to_lowercase();

                // Don't handle interactive roles
                // TODO Support aria roles https://github.com/rome/tools/issues/3640
                if matches!(
                    element_name.as_str(),
                    "button" | "checkbox" | "combobox" | "a" | "input"
                ) {
                    return None;
                }
            }
            _ => {
                return None;
            }
        }

        let attributes = element.attributes();
        let on_click_attribute = attributes.find_by_name("onClick").ok()?;

        #[allow(clippy::question_mark)]
        if on_click_attribute.is_none() {
            return None;
        }

        for attribute in attributes {
            match attribute {
                AnyJsxAttribute::JsxAttribute(attribute) => {
                    let attribute_name = attribute.name().ok()?;
                    let name = attribute_name.as_jsx_name()?;
                    let name_token = name.value_token().ok()?;

                    if matches!(
                        name_token.text_trimmed(),
                        "onKeyDown" | "onKeyUp" | "onKeyPress"
                    ) {
                        return None;
                    }
                }
                AnyJsxAttribute::JsxSpreadAttribute(_) => {
                    return None;
                }
            }
        }

        Some(())
    }