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: lints_def.rs
    path of file: ./repos/kcl/kclvm/sema/src/lint
    
    the code of the file until where you have to start completion: use crate::lint::lint::{Lint, LintArray, LintContext};
use crate::lint::lintpass::LintPass;
use crate::resolver::scope::Scope;
use crate::{declare_lint_pass, resolver::scope::ScopeObjectKind};
use indexmap::IndexSet;
use kclvm_ast::ast;
use kclvm_ast::pos::GetPos;
use kclvm_error::{Handler, Level, Message, Style, WarningKind};

/// The 'import_position' lint detects import statements that are not declared at the top of file.
/// ### Example
///
/// ```kcl
/// schema Person:
///     name: str
///
/// import foo
///
/// ```
/// ### Explanation
///
/// According to the KCL code style conventions, import statement are always declared at the top of the file.
pub static IMPORT_POSITION: &Lint = &Lint {
    name: stringify!("IMPORT_POSITION"),
    level: Level::Warning,
    desc: "Check for importstmt that are not defined at the top of file",
    code: "W0413",
    note: Some("Consider moving tihs statement to the top of the file"),
};

declare_lin
    
    fn check_scope(&mut self, handler: &mut Handler, _ctx: &mut LintContext, scope: &Scope) {
        let scope_objs = &scope.elems;
        for (_, scope_obj) in scope_objs {
            let scope_obj = scope_obj.borrow();
            if let ScopeObjectKind::Module(m) = &scope_obj.kind {
                for (stmt, has_used) in &m.import_stmts {
                    if !has_used {
                        handler.add_warning(
                            WarningKind::UnusedImportWarning,
                            &[Message {
                                range: stmt.get_span_pos(),
                                style: Style::Line,
                                message: format!("Module '{}' imported but unused", scope_obj.name),
                                note: Some("Consider removing this statement".to_string()),
                                suggested_replacement: None,
                            }],
                        );
                    }
                }
            }
        }
    }