@@ -491,12 +491,6 @@ impl Span {
491
491
Span ( bridge:: client:: Span :: mixed_site ( ) )
492
492
}
493
493
494
- /// The original source file into which this span points.
495
- #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
496
- pub fn source_file ( & self ) -> SourceFile {
497
- SourceFile ( self . 0 . source_file ( ) )
498
- }
499
-
500
494
/// The `Span` for the tokens in the previous macro expansion from which
501
495
/// `self` was generated from, if any.
502
496
#[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
@@ -546,6 +540,25 @@ impl Span {
546
540
self . 0 . column ( )
547
541
}
548
542
543
+ /// The path to the source file in which this span occurs, for display purposes.
544
+ ///
545
+ /// This might not correspond to a valid file system path.
546
+ /// It might be remapped, or might be an artificial path such as `"<macro expansion>"`.
547
+ #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
548
+ pub fn file ( & self ) -> String {
549
+ self . 0 . file ( )
550
+ }
551
+
552
+ /// The path to the source file in which this span occurs on disk.
553
+ ///
554
+ /// This is the actual path on disk. It is unaffected by path remapping.
555
+ ///
556
+ /// This path should not be embedded in the output of the macro; prefer `file()` instead.
557
+ #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
558
+ pub fn local_file ( & self ) -> Option < PathBuf > {
559
+ self . 0 . local_file ( ) . map ( |s| PathBuf :: from ( s) )
560
+ }
561
+
549
562
/// Creates a new span encompassing `self` and `other`.
550
563
///
551
564
/// Returns `None` if `self` and `other` are from different files.
@@ -614,58 +627,6 @@ impl fmt::Debug for Span {
614
627
}
615
628
}
616
629
617
- /// The source file of a given `Span`.
618
- #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
619
- #[ derive( Clone ) ]
620
- pub struct SourceFile ( bridge:: client:: SourceFile ) ;
621
-
622
- impl SourceFile {
623
- /// Gets the path to this source file.
624
- ///
625
- /// ### Note
626
- /// If the code span associated with this `SourceFile` was generated by an external macro, this
627
- /// macro, this might not be an actual path on the filesystem. Use [`is_real`] to check.
628
- ///
629
- /// Also note that even if `is_real` returns `true`, if `--remap-path-prefix` was passed on
630
- /// the command line, the path as given might not actually be valid.
631
- ///
632
- /// [`is_real`]: Self::is_real
633
- #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
634
- pub fn path ( & self ) -> PathBuf {
635
- PathBuf :: from ( self . 0 . path ( ) )
636
- }
637
-
638
- /// Returns `true` if this source file is a real source file, and not generated by an external
639
- /// macro's expansion.
640
- #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
641
- pub fn is_real ( & self ) -> bool {
642
- // This is a hack until intercrate spans are implemented and we can have real source files
643
- // for spans generated in external macros.
644
- // https://github.com/rust-lang/rust/pull/43604#issuecomment-333334368
645
- self . 0 . is_real ( )
646
- }
647
- }
648
-
649
- #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
650
- impl fmt:: Debug for SourceFile {
651
- fn fmt ( & self , f : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
652
- f. debug_struct ( "SourceFile" )
653
- . field ( "path" , & self . path ( ) )
654
- . field ( "is_real" , & self . is_real ( ) )
655
- . finish ( )
656
- }
657
- }
658
-
659
- #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
660
- impl PartialEq for SourceFile {
661
- fn eq ( & self , other : & Self ) -> bool {
662
- self . 0 . eq ( & other. 0 )
663
- }
664
- }
665
-
666
- #[ unstable( feature = "proc_macro_span" , issue = "54725" ) ]
667
- impl Eq for SourceFile { }
668
-
669
630
/// A single token or a delimited sequence of token trees (e.g., `[1, (), ..]`).
670
631
#[ stable( feature = "proc_macro_lib2" , since = "1.29.0" ) ]
671
632
#[ derive( Clone ) ]
0 commit comments