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: asm.rs
    path of file: ./repos/waterbear/src
    
    the code of the file until where you have to start completion: use crate::ast::MacroIdentifier;
use crate::ast::{
    ArgType, ByteValue, Directive, IncludeType, MacroStatement, SpriteType, Statement, Statements,
};
use crate::cheader;
use crate::env::{Env, Names};
use crate::expression::{Arg, EvaluationError, Expr};
use crate::files;
use crate::files::{FileLoadError
    
fn compute_labels(statements: &Statements) -> Result<NamesBuilder, AssemblyError> {
    let mut globals = HashMap::new();
    let mut locals = HashMap::new();
    let mut local = HashMap::new();
    let mut current_global = "".to_owned();
    let mut pos: i32 = 0;
    for statement in statements.iter() {
        use crate::ast::Statement::*;
        match statement {
            Directive(dir) => pos += dir.size(pos)?,
            Label(_, name) => {
                if name.starts_with(".") {
                    let val = NameValue {
                        span: statement.span(),
                        value: pos,
                    };
                    add_name(name.to_lowercase(), val, &mut local)?;
                } else {
                    let val = NameValue {
                        span: statement.span(),
                        value: pos,
                    };
                    add_name(name.to_lowercase(), val, &mut globals)?;
                    locals.insert(current_global.clone(), local);
                    local = HashMap::new();
                    current_global = name.to_lowercase();
                }
            }
            Instr(_, instr) => {
                pos += instr.size() as i32;
            }
            Variable(_, _name, _expr) | Alias(_, _name, _expr) => {}
            Comment(_) => {}
            MacroCall(span, name, args) => {
                panic!(
                    "Shouldn't be any macro calls left: {}:{}:{:?}",
                    span, name, args
                );
            }
        }
    }
    if !locals.contains_key(&current_global) {
        locals.insert(current_global.clone(), local);
    }
    Ok(NamesBuilder { globals, locals })
}