use crate::*;

use SemanticTokenVariant as SemVar;


pub fn generate_symbols_file(semantic_tokens: &[SemanticToken]) -> String {
    let mut symbols = String::new();

    for token in semantic_tokens {
        if let SemVar::LabelDefinition(definition) = &token.variant {
            let address = token.bytecode.location.address;
            if address > 0xffff { break; }
            let name = &definition.name;
            let path = match &token.source.in_source {
                Some(source) => &source.path,
                None => &token.source.in_merged.path,
            };
            if let Some(path) = path {
                let path = path.as_os_str().to_string_lossy();
                symbols.push_str(&format!("{address:04x} {name} {path}\n"));
            } else {
                symbols.push_str(&format!("{address:04x} {name}\n"));
            }
        }
    }

    return symbols;
}