Skip to content

Commit 9e3896d

Browse files
committed
Add Span::mixed_site() for Rust 1.45+
Fixes dtolnay#210 This was stabilized in Rust in rust-lang/rust#68716
1 parent 63635dc commit 9e3896d

File tree

4 files changed

+28
-0
lines changed

4 files changed

+28
-0
lines changed

build.rs

+4
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ fn main() {
5757
println!("cargo:rustc-cfg=span_locations");
5858
}
5959

60+
if version.minor >= 45 {
61+
println!("cargo:rustc-cfg=hygiene");
62+
}
63+
6064
let target = env::var("TARGET").unwrap();
6165
if !enable_use_proc_macro(&target) {
6266
return;

src/fallback.rs

+5
Original file line numberDiff line numberDiff line change
@@ -374,6 +374,11 @@ impl Span {
374374
Span { lo: 0, hi: 0 }
375375
}
376376

377+
#[cfg(hygiene)]
378+
pub fn mixed_site() -> Span {
379+
Span::call_site()
380+
}
381+
377382
#[cfg(procmacro2_semver_exempt)]
378383
pub fn def_site() -> Span {
379384
Span::call_site()

src/lib.rs

+10
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,16 @@ impl Span {
348348
Span::_new(imp::Span::call_site())
349349
}
350350

351+
/// The span located at the invocation of the procedural macro, but with
352+
/// local variables, labels, and `$crate` resolved at the definition site
353+
/// of the macro. This is the same hygiene behavior as `macro_rules`.
354+
///
355+
/// This function requires Rust 1.45 or later.
356+
#[cfg(hygiene)]
357+
pub fn mixed_site() -> Span {
358+
Span::_new(imp::Span::mixed_site())
359+
}
360+
351361
/// A span that resolves at the macro definition site.
352362
///
353363
/// This method is semver exempt and not exposed by default.

src/wrapper.rs

+9
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,15 @@ impl Span {
376376
}
377377
}
378378

379+
#[cfg(hygiene)]
380+
pub fn mixed_site() -> Span {
381+
if inside_proc_macro() {
382+
Span::Compiler(proc_macro::Span::mixed_site())
383+
} else {
384+
Span::Fallback(fallback::Span::mixed_site())
385+
}
386+
}
387+
379388
#[cfg(super_unstable)]
380389
pub fn def_site() -> Span {
381390
if inside_proc_macro() {

0 commit comments

Comments
 (0)