use crate::errors::ShellError; use crate::object::{TaggedDictBuilder, Value}; use crate::prelude::*; pub fn tags(args: CommandArgs, _registry: &CommandRegistry) -> Result { let source_map = args.call_info.source_map.clone(); Ok(args .input .values .map(move |v| { let mut tags = TaggedDictBuilder::new(v.tag()); { let origin = v.origin(); let span = v.span(); let mut dict = TaggedDictBuilder::new(v.tag()); dict.insert("start", Value::int(span.start as i64)); dict.insert("end", Value::int(span.end as i64)); tags.insert_tagged("span", dict.into_tagged_value()); match origin.map(|x| source_map.get(&x)).flatten() { Some(SpanSource::File(source)) => { tags.insert("origin", Value::string(source)); } Some(SpanSource::Url(source)) => { tags.insert("origin", Value::string(source)); } _ => {} } } tags.into_tagged_value() }) .to_output_stream()) }