diff --git a/src/commands/autoview.rs b/src/commands/autoview.rs index 7bf9b9e310..b9b9d8941c 100644 --- a/src/commands/autoview.rs +++ b/src/commands/autoview.rs @@ -113,10 +113,7 @@ fn is_single_origined_text_value(input: &Vec>) -> bool { if let Tagged { item: Value::Primitive(Primitive::String(_)), - tag: Tag { - origin: Some(origin), - .. - }, + tag: Tag { origin, .. }, } = input[0] { origin != uuid::Uuid::nil() diff --git a/src/commands/enter.rs b/src/commands/enter.rs index cca73ca0ff..9388abb941 100644 --- a/src/commands/enter.rs +++ b/src/commands/enter.rs @@ -75,10 +75,10 @@ impl PerItemCommand for Enter { ) .await.unwrap(); - if let Some(uuid) = contents_tag.origin { + if contents_tag.origin != uuid::Uuid::nil() { // If we have loaded something, track its source yield ReturnSuccess::action(CommandAction::AddSpanSource( - uuid, + contents_tag.origin, span_source, )); } diff --git a/src/commands/fetch.rs b/src/commands/fetch.rs index e8520f3eca..79806e76b2 100644 --- a/src/commands/fetch.rs +++ b/src/commands/fetch.rs @@ -76,10 +76,10 @@ fn run( file_extension.or(path_str.split('.').last().map(String::from)) }; - if let Some(uuid) = contents_tag.origin { + if contents_tag.origin != uuid::Uuid::nil() { // If we have loaded something, track its source yield ReturnSuccess::action(CommandAction::AddSpanSource( - uuid, + contents_tag.origin, span_source, )); } @@ -158,7 +158,7 @@ pub async fn fetch( })?), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )), @@ -173,7 +173,7 @@ pub async fn fetch( })?), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )), @@ -190,7 +190,7 @@ pub async fn fetch( Value::binary(buf), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )) @@ -206,7 +206,7 @@ pub async fn fetch( })?), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )), @@ -223,7 +223,7 @@ pub async fn fetch( Value::binary(buf), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )) @@ -239,7 +239,7 @@ pub async fn fetch( })?), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )), @@ -266,7 +266,7 @@ pub async fn fetch( })?), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )) @@ -276,7 +276,7 @@ pub async fn fetch( Value::string(format!("Not yet supported MIME type: {} {}", ty, sub_ty)), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )), @@ -287,7 +287,7 @@ pub async fn fetch( Value::string(format!("No content type found")), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::Url(location.to_string()), )), diff --git a/src/commands/open.rs b/src/commands/open.rs index 6f33412d56..603bb4da0b 100644 --- a/src/commands/open.rs +++ b/src/commands/open.rs @@ -77,10 +77,10 @@ fn run( file_extension.or(path_str.split('.').last().map(String::from)) }; - if let Some(uuid) = contents_tag.origin { + if contents_tag.origin != uuid::Uuid::nil() { // If we have loaded something, track its source yield ReturnSuccess::action(CommandAction::AddSpanSource( - uuid, + contents_tag.origin, span_source, )); } @@ -147,7 +147,7 @@ pub async fn fetch( Value::string(s), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )), @@ -166,7 +166,7 @@ pub async fn fetch( Value::string(s), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )), @@ -175,7 +175,7 @@ pub async fn fetch( Value::binary(bytes), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )), @@ -186,7 +186,7 @@ pub async fn fetch( Value::binary(bytes), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )) @@ -204,7 +204,7 @@ pub async fn fetch( Value::string(s), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )), @@ -213,7 +213,7 @@ pub async fn fetch( Value::binary(bytes), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )), @@ -224,7 +224,7 @@ pub async fn fetch( Value::binary(bytes), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )) @@ -235,7 +235,7 @@ pub async fn fetch( Value::binary(bytes), Tag { span, - origin: Some(Uuid::new_v4()), + origin: Uuid::new_v4(), }, SpanSource::File(cwd.to_string_lossy().to_string()), )), diff --git a/src/commands/post.rs b/src/commands/post.rs index f653e6492a..6d5627a65f 100644 --- a/src/commands/post.rs +++ b/src/commands/post.rs @@ -85,10 +85,10 @@ fn run( file_extension.or(path_str.split('.').last().map(String::from)) }; - if let Some(uuid) = contents_tag.origin { + if contents_tag.origin != uuid::Uuid::nil() { // If we have loaded something, track its source yield ReturnSuccess::action(CommandAction::AddSpanSource( - uuid, + contents_tag.origin, span_source, )); } diff --git a/src/commands/save.rs b/src/commands/save.rs index 253045b3f9..9c12fd2414 100644 --- a/src/commands/save.rs +++ b/src/commands/save.rs @@ -136,7 +136,7 @@ fn save( // If there is no filename, check the metadata for the origin filename if input.len() > 0 { let origin = input[0].origin(); - match origin.and_then(|x| source_map.get(&x)) { + match source_map.get(&origin) { Some(path) => match path { SpanSource::File(file) => { full_path.push(Path::new(file)); diff --git a/src/commands/tags.rs b/src/commands/tags.rs index 2b45105c2d..9180ba2c61 100644 --- a/src/commands/tags.rs +++ b/src/commands/tags.rs @@ -42,7 +42,7 @@ fn tags(args: CommandArgs, _registry: &CommandRegistry) -> Result { tags.insert("origin", Value::string(source)); } diff --git a/src/data/meta.rs b/src/data/meta.rs index 78711cc882..010c98037f 100644 --- a/src/data/meta.rs +++ b/src/data/meta.rs @@ -39,7 +39,7 @@ pub trait TaggedItem: Sized { self, Tag { span: Span::unknown(), - origin: None, + origin: uuid::Uuid::nil(), }, ) } @@ -90,15 +90,14 @@ impl Tagged { self.tag.span } - // TODO: This should not be optional - pub fn origin(&self) -> Option { + pub fn origin(&self) -> uuid::Uuid { self.tag.origin } pub fn origin_name(&self, source_map: &SourceMap) -> Option { - match self.tag.origin.map(|x| source_map.get(&x)) { - Some(Some(SpanSource::File(file))) => Some(file.clone()), - Some(Some(SpanSource::Url(url))) => Some(url.clone()), + match source_map.get(&self.tag.origin) { + Some(SpanSource::File(file)) => Some(file.clone()), + Some(SpanSource::Url(url)) => Some(url.clone()), _ => None, } } @@ -168,20 +167,23 @@ impl From<&std::ops::Range> for Span { Debug, Clone, Copy, PartialEq, Eq, Ord, PartialOrd, Serialize, Deserialize, Hash, Getters, )] pub struct Tag { - pub origin: Option, + pub origin: Uuid, pub span: Span, } impl From for Tag { fn from(span: Span) -> Self { - Tag { origin: None, span } + Tag { + origin: uuid::Uuid::nil(), + span, + } } } impl From<&Span> for Tag { fn from(span: &Span) -> Self { Tag { - origin: None, + origin: uuid::Uuid::nil(), span: *span, } } @@ -190,7 +192,7 @@ impl From<&Span> for Tag { impl From<(usize, usize, Uuid)> for Tag { fn from((start, end, origin): (usize, usize, Uuid)) -> Self { Tag { - origin: Some(origin), + origin, span: Span { start, end }, } } @@ -199,7 +201,11 @@ impl From<(usize, usize, Uuid)> for Tag { impl From<(usize, usize, Option)> for Tag { fn from((start, end, origin): (usize, usize, Option)) -> Self { Tag { - origin, + origin: if let Some(uuid) = origin { + uuid + } else { + uuid::Uuid::nil() + }, span: Span { start, end }, } } @@ -208,7 +214,7 @@ impl From<(usize, usize, Option)> for Tag { impl From> for Tag { fn from(input: nom_locate::LocatedSpanEx<&str, Uuid>) -> Tag { Tag { - origin: Some(input.extra), + origin: input.extra, span: Span { start: input.offset, end: input.offset + input.fragment.len(), @@ -231,19 +237,22 @@ impl From<&Tag> for Span { impl Tag { pub fn unknown_origin(span: Span) -> Tag { - Tag { origin: None, span } + Tag { + origin: uuid::Uuid::nil(), + span, + } } pub fn unknown_span(origin: Uuid) -> Tag { Tag { - origin: Some(origin), + origin, span: Span::unknown(), } } pub fn unknown() -> Tag { Tag { - origin: None, + origin: uuid::Uuid::nil(), span: Span::unknown(), } } diff --git a/src/parser/parse/files.rs b/src/parser/parse/files.rs index 6cedb1e99c..65a2620936 100644 --- a/src/parser/parse/files.rs +++ b/src/parser/parse/files.rs @@ -22,7 +22,7 @@ impl language_reporting::ReportingFiles for Files { } fn file_id(&self, tag: Self::Span) -> Self::FileId { - tag.origin.unwrap() + tag.origin } fn file_name(&self, _file: Self::FileId) -> FileName { diff --git a/src/plugins/textview.rs b/src/plugins/textview.rs index 423cae8765..cad2e16e62 100644 --- a/src/plugins/textview.rs +++ b/src/plugins/textview.rs @@ -219,7 +219,7 @@ fn view_text_value(value: &Tagged, source_map: &SourceMap) { let value_origin = value.origin(); match value.item { Value::Primitive(Primitive::String(ref s)) => { - let source = value_origin.and_then(|x| source_map.get(&x)); + let source = source_map.get(&value_origin); if let Some(source) = source { let extension: Option = match source {