Skip to content

Commit

Permalink
Add Span::mixed_site() for Rust 1.45+
Browse files Browse the repository at this point in the history
Fixes dtolnay#210

This was stabilized in Rust in
rust-lang/rust#68716
  • Loading branch information
kevinmehall committed May 19, 2020
1 parent 63635dc commit 9e3896d
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 0 deletions.
4 changes: 4 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ fn main() {
println!("cargo:rustc-cfg=span_locations");
}

if version.minor >= 45 {
println!("cargo:rustc-cfg=hygiene");
}

let target = env::var("TARGET").unwrap();
if !enable_use_proc_macro(&target) {
return;
Expand Down
5 changes: 5 additions & 0 deletions src/fallback.rs
Original file line number Diff line number Diff line change
Expand Up @@ -374,6 +374,11 @@ impl Span {
Span { lo: 0, hi: 0 }
}

#[cfg(hygiene)]
pub fn mixed_site() -> Span {
Span::call_site()
}

#[cfg(procmacro2_semver_exempt)]
pub fn def_site() -> Span {
Span::call_site()
Expand Down
10 changes: 10 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -348,6 +348,16 @@ impl Span {
Span::_new(imp::Span::call_site())
}

/// The span located at the invocation of the procedural macro, but with
/// local variables, labels, and `$crate` resolved at the definition site
/// of the macro. This is the same hygiene behavior as `macro_rules`.
///
/// This function requires Rust 1.45 or later.
#[cfg(hygiene)]
pub fn mixed_site() -> Span {
Span::_new(imp::Span::mixed_site())
}

/// A span that resolves at the macro definition site.
///
/// This method is semver exempt and not exposed by default.
Expand Down
9 changes: 9 additions & 0 deletions src/wrapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,15 @@ impl Span {
}
}

#[cfg(hygiene)]
pub fn mixed_site() -> Span {
if inside_proc_macro() {
Span::Compiler(proc_macro::Span::mixed_site())
} else {
Span::Fallback(fallback::Span::mixed_site())
}
}

#[cfg(super_unstable)]
pub fn def_site() -> Span {
if inside_proc_macro() {
Expand Down

0 comments on commit 9e3896d

Please sign in to comment.