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: semantic.rs
    path of file: ./repos/erg/crates/els
    
    the code of the file until where you have to start completion: use erg_common::dict::Dict;
use erg_common::error::Location;
use erg_common::traits::Locational;

use erg_compiler::artifact::BuildRunnable;
use erg_compiler::erg_parser::ast::{
    Accessor, Args, BinOp, Block, Call, ClassAttr, Def, DefKind, Expr, Identifier, Methods, Params,
    PolyTy
    
    fn gen_from_block(&mut self, params: Option<Params>, block: Block) -> Vec<SemanticToken> {
        self.namespaces.push(Dict::new());
        let mut tokens = vec![];
        if let Some(params) = params {
            let (nd_params, var_params, d_params, ..) = params.deconstruct();
            for param in nd_params.into_iter() {
                let typ = SemanticTokenType::PARAMETER;
                tokens.push(self.gen_token(param.loc(), typ));
            }
            if let Some(var_param) = var_params {
                let typ = SemanticTokenType::PARAMETER;
                tokens.push(self.gen_token(var_param.loc(), typ));
            }
            for param in d_params.into_iter() {
                let typ = SemanticTokenType::PARAMETER;
                tokens.push(self.gen_token(param.loc(), typ));
            }
        }
        for expr in block.into_iter() {
            tokens.extend(self.gen_from_expr(expr));
        }
        self.namespaces.pop();
        tokens
    }