Sha256: 3ccf5120593f35787442c0a37d243e802c5262e7f8b35aed503873008ec035c5

Contents?: true

Size: 1.09 KB

Versions: 30

Compression:

Stored size: 1.09 KB

Contents

use crate::ToTokens;
use proc_macro2::extra::DelimSpan;
use proc_macro2::{Span, TokenStream};

// Not public API other than via the syn crate. Use syn::spanned::Spanned.
pub trait Spanned: private::Sealed {
    fn __span(&self) -> Span;
}

impl Spanned for Span {
    fn __span(&self) -> Span {
        *self
    }
}

impl Spanned for DelimSpan {
    fn __span(&self) -> Span {
        self.join()
    }
}

impl<T: ?Sized + ToTokens> Spanned for T {
    fn __span(&self) -> Span {
        join_spans(self.into_token_stream())
    }
}

fn join_spans(tokens: TokenStream) -> Span {
    let mut iter = tokens.into_iter().map(|tt| tt.span());

    let first = match iter.next() {
        Some(span) => span,
        None => return Span::call_site(),
    };

    iter.fold(None, |_prev, next| Some(next))
        .and_then(|last| first.join(last))
        .unwrap_or(first)
}

mod private {
    use crate::ToTokens;
    use proc_macro2::extra::DelimSpan;
    use proc_macro2::Span;

    pub trait Sealed {}
    impl Sealed for Span {}
    impl Sealed for DelimSpan {}
    impl<T: ?Sized + ToTokens> Sealed for T {}
}

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
wasmtime-29.0.0 ./ext/cargo-vendor/quote-1.0.38/src/spanned.rs
wasmtime-28.0.0 ./ext/cargo-vendor/quote-1.0.38/src/spanned.rs
wasmtime-27.0.0 ./ext/cargo-vendor/quote-1.0.37/src/spanned.rs
wasmtime-26.0.0 ./ext/cargo-vendor/quote-1.0.37/src/spanned.rs
wasmtime-25.0.2 ./ext/cargo-vendor/quote-1.0.36/src/spanned.rs
wasmtime-25.0.1 ./ext/cargo-vendor/quote-1.0.36/src/spanned.rs
wasmtime-25.0.0 ./ext/cargo-vendor/quote-1.0.36/src/spanned.rs
wasmtime-24.0.0 ./ext/cargo-vendor/quote-1.0.36/src/spanned.rs
wasmtime-23.0.2 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-22.0.0 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-21.0.1 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-20.0.2 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-20.0.0 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-18.0.3 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-17.0.1 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-17.0.0 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-16.0.0 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-15.0.1 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-15.0.0 ./ext/cargo-vendor/quote-1.0.35/src/spanned.rs
wasmtime-14.0.4 ./ext/cargo-vendor/quote-1.0.33/src/spanned.rs