From 3c3730425f0a9a4241c4f57cb7f4d00b71db201e Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 30 Sep 2020 14:38:46 +0200 Subject: =?UTF-8?q?SpanWith=20trait=20=E2=86=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/syntax/span.rs | 10 ++++++++++ src/syntax/tree.rs | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src/syntax') diff --git a/src/syntax/span.rs b/src/syntax/span.rs index 6f5420d4..cda35ec0 100644 --- a/src/syntax/span.rs +++ b/src/syntax/span.rs @@ -17,6 +17,16 @@ pub trait Offset { fn offset(self, by: Pos) -> Self; } +/// Annotate a value with a span. +pub trait SpanWith: Sized { + /// Wraps `self` in a `Spanned` with the given span. + fn span_with(self, span: Span) -> Spanned { + Spanned::new(self, span) + } +} + +impl SpanWith for T {} + /// A vector of spanned values of type `T`. pub type SpanVec = Vec>; diff --git a/src/syntax/tree.rs b/src/syntax/tree.rs index 8c4270e2..5327bfa4 100644 --- a/src/syntax/tree.rs +++ b/src/syntax/tree.rs @@ -2,7 +2,7 @@ use std::fmt::{self, Debug, Formatter}; -use super::span::{SpanVec, Spanned}; +use super::span::{SpanVec, SpanWith, Spanned}; use super::Decoration; use crate::color::RgbaColor; use crate::compute::table::{SpannedEntry, Table}; @@ -203,7 +203,7 @@ impl TableExpr { for (key, entry) in self.iter() { let val = entry.val.v.eval(ctx, f).await; - let spanned = Spanned::new(val, entry.val.span); + let spanned = val.span_with(entry.val.span); let entry = SpannedEntry::new(entry.key, spanned); table.insert(key, entry); } @@ -230,12 +230,12 @@ impl CallExpr { if let Some(func) = ctx.scope.func(name) { let pass = func(span, args, ctx.clone()).await; f.extend(pass.feedback); - f.decorations.push(Spanned::new(Decoration::Resolved, span)); + f.decorations.push(Decoration::Resolved.span_with(span)); pass.output } else { if !name.is_empty() { error!(@f, span, "unknown function"); - f.decorations.push(Spanned::new(Decoration::Unresolved, span)); + f.decorations.push(Decoration::Unresolved.span_with(span)); } Value::Table(args) } -- cgit v1.2.3