1*3a8b546aSMiguel Ojeda // This code exercises the surface area that we expect of Span's unstable API. 2*3a8b546aSMiguel Ojeda // If the current toolchain is able to compile it, then proc-macro2 is able to 3*3a8b546aSMiguel Ojeda // offer these APIs too. 4*3a8b546aSMiguel Ojeda 5*3a8b546aSMiguel Ojeda #![cfg_attr(procmacro2_build_probe, feature(proc_macro_span))] 6*3a8b546aSMiguel Ojeda 7*3a8b546aSMiguel Ojeda extern crate proc_macro; 8*3a8b546aSMiguel Ojeda 9*3a8b546aSMiguel Ojeda use core::ops::{Range, RangeBounds}; 10*3a8b546aSMiguel Ojeda use proc_macro::{Literal, Span}; 11*3a8b546aSMiguel Ojeda use std::path::PathBuf; 12*3a8b546aSMiguel Ojeda 13*3a8b546aSMiguel Ojeda pub fn byte_range(this: &Span) -> Range<usize> { 14*3a8b546aSMiguel Ojeda this.byte_range() 15*3a8b546aSMiguel Ojeda } 16*3a8b546aSMiguel Ojeda 17*3a8b546aSMiguel Ojeda pub fn start(this: &Span) -> Span { 18*3a8b546aSMiguel Ojeda this.start() 19*3a8b546aSMiguel Ojeda } 20*3a8b546aSMiguel Ojeda 21*3a8b546aSMiguel Ojeda pub fn end(this: &Span) -> Span { 22*3a8b546aSMiguel Ojeda this.end() 23*3a8b546aSMiguel Ojeda } 24*3a8b546aSMiguel Ojeda 25*3a8b546aSMiguel Ojeda pub fn line(this: &Span) -> usize { 26*3a8b546aSMiguel Ojeda this.line() 27*3a8b546aSMiguel Ojeda } 28*3a8b546aSMiguel Ojeda 29*3a8b546aSMiguel Ojeda pub fn column(this: &Span) -> usize { 30*3a8b546aSMiguel Ojeda this.column() 31*3a8b546aSMiguel Ojeda } 32*3a8b546aSMiguel Ojeda 33*3a8b546aSMiguel Ojeda pub fn file(this: &Span) -> String { 34*3a8b546aSMiguel Ojeda this.file() 35*3a8b546aSMiguel Ojeda } 36*3a8b546aSMiguel Ojeda 37*3a8b546aSMiguel Ojeda pub fn local_file(this: &Span) -> Option<PathBuf> { 38*3a8b546aSMiguel Ojeda this.local_file() 39*3a8b546aSMiguel Ojeda } 40*3a8b546aSMiguel Ojeda 41*3a8b546aSMiguel Ojeda pub fn join(this: &Span, other: Span) -> Option<Span> { 42*3a8b546aSMiguel Ojeda this.join(other) 43*3a8b546aSMiguel Ojeda } 44*3a8b546aSMiguel Ojeda 45*3a8b546aSMiguel Ojeda pub fn subspan<R: RangeBounds<usize>>(this: &Literal, range: R) -> Option<Span> { 46*3a8b546aSMiguel Ojeda this.subspan(range) 47*3a8b546aSMiguel Ojeda } 48*3a8b546aSMiguel Ojeda 49*3a8b546aSMiguel Ojeda // Include in sccache cache key. 50*3a8b546aSMiguel Ojeda #[cfg(procmacro2_build_probe)] 51*3a8b546aSMiguel Ojeda const _: Option<&str> = option_env!("RUSTC_BOOTSTRAP"); 52