-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Open
Labels
A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)Area: All kinds of macros (custom derive, macro_rules!, proc macros, ..)A-proc-macrosArea: Procedural macrosArea: Procedural macrosB-unstableBlocker: Implemented in the nightly compiler and unstable.Blocker: Implemented in the nightly compiler and unstable.C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCCategory: An issue tracking the progress of sth. like the implementation of an RFCLibs-TrackedLibs issues that are tracked on the team's project board.Libs issues that are tracked on the team's project board.S-tracking-design-concernsStatus: There are blocking design concerns.Status: There are blocking design concerns.T-langRelevant to the language teamRelevant to the language teamT-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.Relevant to the library API team, which will review and decide on the PR/issue.
Description
This issue is intended to track a number of unstable APIs which are used to inspect the contents of a Span
for information like the file name, byte position, manufacturing new spans, combining them, etc.
This issue tracks the proc_macro_span
unstable feature.
Public API
Already stabilized:
impl Span {
// as `proc_macro_source_text`
pub fn source_text(&self) -> Option<String>;
// as `proc_macro_span_location`
pub fn start(&self) -> Span;
pub fn end(&self) -> Span;
pub fn line(&self) -> usize;
pub fn column(&self) -> usize;
}
impl Group {
// as `proc_macro_group_span`
pub fn span_open(&self) -> Span;
pub fn span_close(&self) -> Span;
}
About to be stabilized:
impl Span {
// as `proc_macro_span_file`
pub fn file(&self) -> String; // Mapped file name, for display purposes.
pub fn local_file(&self) -> Option<PathBuf>; // Real file name as it exists on disk.
}
Close to stabilization, pending some bikeshedding:
impl Span {
pub fn byte_range(&self) -> Range<usize>;
// Open question: Do we want to use the old or new Range type?
}
Things that require more discussion:
impl Span {
pub fn eq(&self, other: &Span) -> bool;
pub fn join(&self, other: Span) -> Option<Span>;
pub fn parent(&self) -> Option<Span>;
pub fn source(&self) -> Span;
}
impl Literal {
pub fn subspan<R: RangeBounds<usize>>(&self, range: R) -> Option<Span>;
}
History:
- ImplementationStabilization of
proc_macro_source_text
Stabilization ofproc_macro_group_span
Stabilization ofproc_macro_span_location
Stabilize proc_macro::Span::{start,end,line,column}. #139865Stabilization ofproc_macro_span_file
Stabilize proc_macro::Span::{file, local_file}. #140514To pick up a draggable item, press the space bar. While dragging, use the arrow keys to move the item. Press space again to drop the item in its new position, or press escape to cancel.
Dushistov, seamlik, galich, stanislav-tkach, jhpratt and 63 morexd009642, softprops, Dushistov, DominicBurkart, lukechu10 and 16 moreacheroncrypto, schneiderfelipe, PawelJastrzebski, survived, acksly and 1 moreschneiderfelipe, FlooferLand, prk3, survived, orph3usLyre and 2 more
Metadata
Metadata
Assignees
Labels
A-macrosArea: All kinds of macros (custom derive, macro_rules!, proc macros, ..)Area: All kinds of macros (custom derive, macro_rules!, proc macros, ..)A-proc-macrosArea: Procedural macrosArea: Procedural macrosB-unstableBlocker: Implemented in the nightly compiler and unstable.Blocker: Implemented in the nightly compiler and unstable.C-tracking-issueCategory: An issue tracking the progress of sth. like the implementation of an RFCCategory: An issue tracking the progress of sth. like the implementation of an RFCLibs-TrackedLibs issues that are tracked on the team's project board.Libs issues that are tracked on the team's project board.S-tracking-design-concernsStatus: There are blocking design concerns.Status: There are blocking design concerns.T-langRelevant to the language teamRelevant to the language teamT-libs-apiRelevant to the library API team, which will review and decide on the PR/issue.Relevant to the library API team, which will review and decide on the PR/issue.
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
All `proc_macro_span` APIs tracked at rust-lang#54725 now
softprops commentedon Oct 10, 2018
I wanted to shed some pain this is causing with tarpaulin.
Tarpaulin has worked amazingly well for me and my company as a replacement for kcov which historically been a pain to get accurate, reliable and correct results. At the moment tarpaulin stands as the most promising goto option for codecoverage in rust and just feels more like the only first class tooling option.
Having one of those when choosing to invest in a technology is important for many company's adoption story for checking off code quantity checkmarks. When they see that rust doesn't have a reasonable code quality story that works on stable rust, that's can result in a "pass" rather than "I'll take it". There are currently some work arounds for making this work-ish on stable but it feels very much like the story serde was in a year or so ago when you wanted to show all your friends how amazing serde was but then was embarrassed to show what it took to make work on stable because of a macro stabilization blocker.
JakeTherston commentedon Oct 28, 2018
With procedural macros having reached a point where they're very useful on stable, I expect many users will find themselves needing access to this information. Would it be reasonable to only stabilize parts of the
Span
API that are not too risky? Perhaps exposing a function that optionally returns the path of the file where a macro is invoked if such a file exists?259 remaining items
m-ou-se commentedon Apr 30, 2025
Opened #140514 to stabilize
Span::file
andSpan::local_file
.Auto merge of rust-lang#140514 - m-ou-se:proc-macro-span-file, r=Amanieu
Auto merge of rust-lang#140514 - m-ou-se:proc-macro-span-file, r=Amanieu
Auto merge of #140514 - m-ou-se:proc-macro-span-file, r=Amanieu
Rollup merge of rust-lang#139865 - m-ou-se:stabilize-proc-macro-span-β¦
fix: swap Span::source_file -> Span::file
fix: swap Span::source_file -> Span::file
Auto merge of #140514 - m-ou-se:proc-macro-span-file, r=Amanieu
Auto merge of rust-lang#140514 - m-ou-se:proc-macro-span-file, r=Amanieu
Auto merge of #140514 - m-ou-se:proc-macro-span-file, r=Amanieu
VictorArcium commentedon Jul 19, 2025
This should be updated now that
proc_macro_span_file
has been stabilized (in 1.88).andrewdavidmackenzie commentedon Jul 19, 2025
I hadn't noticed that had been stabalized - so thanks.
I was able to move my project (finally!) to stable.