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: no_redeclare.rs
    path of file: ./repos/tools/crates/rome_js_analyze/src/semantic_analyzers/suspicious
    
    the code of the file until where you have to start completion: use crate::semantic_services::SemanticServices;
use rome_analyze::declare_rule;
use rome_analyze::{context::RuleContext, Rule, RuleDiagnostic};
use rome_console::markup;
use rome_js_semantic::Scope;
use rome_js_syntax::binding_ext::AnyJsBindingDeclaration;
use rome_js_syntax::{
    AnyTsType, TextRange, TsIndexSignatureParam
    
fn check_redeclarations_in_single_scope(scope: &Scope, redeclarations: &mut Vec<Redeclaration>) {
    let mut declarations = HashMap::<String, (TextRange, AnyJsBindingDeclaration)>::default();
    for binding in scope.bindings() {
        let id_binding = binding.tree();

        // We consider only binding of a declaration
        // This allows to skip function parameters, methods, ...
        if let Some(decl) = id_binding.declaration() {
            let name = id_binding.text();
            if let Some((first_text_range, first_decl)) = declarations.get(&name) {
                // Do not report:
                // - mergeable declarations.
                //   e.g. a `function` and a `namespace`
                // - when both are parameter-like.
                //   A parameter can override a previous parameter.
                // - when index signature parameters have the different type annotation or are not in the same type member

                if !(first_decl.is_mergeable(&decl)
                    || first_decl.is_parameter_like() && decl.is_parameter_like())
                {
                    match (first_decl, &decl) {
                        (
                            AnyJsBindingDeclaration::TsIndexSignatureParameter(first),
                            AnyJsBindingDeclaration::TsIndexSignatureParameter(second),
                        ) => {
                            if are_index_signature_params_same_type_and_member(first, second) {
                                redeclarations.push(Redeclaration {
                                    name,
                                    declaration: *first_text_range,
                                    redeclaration: id_binding.syntax().text_trimmed_range(),
                                })
                            }
                        }
                        _ => redeclarations.push(Redeclaration {
                            name,
                            declaration: *first_text_range,
                            redeclaration: id_binding.syntax().text_trimmed_range(),
                        }),
                    }
                }
            } else {
                declarations.insert(name, (id_binding.syntax().text_trimmed_range(), decl));
            }
        }
    }
}