@@ -90,17 +90,6 @@ impl TokenTree {
90
90
}
91
91
}
92
92
93
- impl < CTX > HashStable < CTX > for TokenStream
94
- where
95
- CTX : crate :: HashStableContext ,
96
- {
97
- fn hash_stable ( & self , hcx : & mut CTX , hasher : & mut StableHasher ) {
98
- for sub_tt in self . iter ( ) {
99
- sub_tt. hash_stable ( hcx, hasher) ;
100
- }
101
- }
102
- }
103
-
104
93
/// A lazy version of [`AttrTokenStream`], which defers creation of an actual
105
94
/// `AttrTokenStream` until it is needed.
106
95
#[ derive( Clone ) ]
@@ -547,10 +536,6 @@ pub struct AttrsTarget {
547
536
pub tokens : LazyAttrTokenStream ,
548
537
}
549
538
550
- /// A `TokenStream` is an abstract sequence of tokens, organized into [`TokenTree`]s.
551
- #[ derive( Clone , Debug , Default , Encodable , Decodable ) ]
552
- pub struct TokenStream ( pub ( crate ) Arc < Vec < TokenTree > > ) ;
553
-
554
539
/// Indicates whether a token can join with the following token to form a
555
540
/// compound token. Used for conversions to `proc_macro::Spacing`. Also used to
556
541
/// guide pretty-printing, which is where the `JointHidden` value (which isn't
@@ -611,58 +596,9 @@ pub enum Spacing {
611
596
JointHidden ,
612
597
}
613
598
614
- impl TokenStream {
615
- /// Given a `TokenStream` with a `Stream` of only two arguments, return a new `TokenStream`
616
- /// separating the two arguments with a comma for diagnostic suggestions.
617
- pub fn add_comma ( & self ) -> Option < ( TokenStream , Span ) > {
618
- // Used to suggest if a user writes `foo!(a b);`
619
- let mut suggestion = None ;
620
- let mut iter = self . 0 . iter ( ) . enumerate ( ) . peekable ( ) ;
621
- while let Some ( ( pos, ts) ) = iter. next ( ) {
622
- if let Some ( ( _, next) ) = iter. peek ( ) {
623
- let sp = match ( & ts, & next) {
624
- ( _, TokenTree :: Token ( Token { kind : token:: Comma , .. } , _) ) => continue ,
625
- (
626
- TokenTree :: Token ( token_left, Spacing :: Alone ) ,
627
- TokenTree :: Token ( token_right, _) ,
628
- ) if ( token_left. is_non_reserved_ident ( ) || token_left. is_lit ( ) )
629
- && ( token_right. is_non_reserved_ident ( ) || token_right. is_lit ( ) ) =>
630
- {
631
- token_left. span
632
- }
633
- ( TokenTree :: Delimited ( sp, ..) , _) => sp. entire ( ) ,
634
- _ => continue ,
635
- } ;
636
- let sp = sp. shrink_to_hi ( ) ;
637
- let comma = TokenTree :: token_alone ( token:: Comma , sp) ;
638
- suggestion = Some ( ( pos, comma, sp) ) ;
639
- }
640
- }
641
- if let Some ( ( pos, comma, sp) ) = suggestion {
642
- let mut new_stream = Vec :: with_capacity ( self . 0 . len ( ) + 1 ) ;
643
- let parts = self . 0 . split_at ( pos + 1 ) ;
644
- new_stream. extend_from_slice ( parts. 0 ) ;
645
- new_stream. push ( comma) ;
646
- new_stream. extend_from_slice ( parts. 1 ) ;
647
- return Some ( ( TokenStream :: new ( new_stream) , sp) ) ;
648
- }
649
- None
650
- }
651
- }
652
-
653
- impl FromIterator < TokenTree > for TokenStream {
654
- fn from_iter < I : IntoIterator < Item = TokenTree > > ( iter : I ) -> Self {
655
- TokenStream :: new ( iter. into_iter ( ) . collect :: < Vec < TokenTree > > ( ) )
656
- }
657
- }
658
-
659
- impl Eq for TokenStream { }
660
-
661
- impl PartialEq < TokenStream > for TokenStream {
662
- fn eq ( & self , other : & TokenStream ) -> bool {
663
- self . iter ( ) . eq ( other. iter ( ) )
664
- }
665
- }
599
+ /// A `TokenStream` is an abstract sequence of tokens, organized into [`TokenTree`]s.
600
+ #[ derive( Clone , Debug , Default , Encodable , Decodable ) ]
601
+ pub struct TokenStream ( pub ( crate ) Arc < Vec < TokenTree > > ) ;
666
602
667
603
impl TokenStream {
668
604
pub fn new ( tts : Vec < TokenTree > ) -> TokenStream {
@@ -838,6 +774,68 @@ impl TokenStream {
838
774
}
839
775
}
840
776
}
777
+
778
+ /// Given a `TokenStream` with a `Stream` of only two arguments, return a new `TokenStream`
779
+ /// separating the two arguments with a comma for diagnostic suggestions.
780
+ pub fn add_comma ( & self ) -> Option < ( TokenStream , Span ) > {
781
+ // Used to suggest if a user writes `foo!(a b);`
782
+ let mut suggestion = None ;
783
+ let mut iter = self . 0 . iter ( ) . enumerate ( ) . peekable ( ) ;
784
+ while let Some ( ( pos, ts) ) = iter. next ( ) {
785
+ if let Some ( ( _, next) ) = iter. peek ( ) {
786
+ let sp = match ( & ts, & next) {
787
+ ( _, TokenTree :: Token ( Token { kind : token:: Comma , .. } , _) ) => continue ,
788
+ (
789
+ TokenTree :: Token ( token_left, Spacing :: Alone ) ,
790
+ TokenTree :: Token ( token_right, _) ,
791
+ ) if ( token_left. is_non_reserved_ident ( ) || token_left. is_lit ( ) )
792
+ && ( token_right. is_non_reserved_ident ( ) || token_right. is_lit ( ) ) =>
793
+ {
794
+ token_left. span
795
+ }
796
+ ( TokenTree :: Delimited ( sp, ..) , _) => sp. entire ( ) ,
797
+ _ => continue ,
798
+ } ;
799
+ let sp = sp. shrink_to_hi ( ) ;
800
+ let comma = TokenTree :: token_alone ( token:: Comma , sp) ;
801
+ suggestion = Some ( ( pos, comma, sp) ) ;
802
+ }
803
+ }
804
+ if let Some ( ( pos, comma, sp) ) = suggestion {
805
+ let mut new_stream = Vec :: with_capacity ( self . 0 . len ( ) + 1 ) ;
806
+ let parts = self . 0 . split_at ( pos + 1 ) ;
807
+ new_stream. extend_from_slice ( parts. 0 ) ;
808
+ new_stream. push ( comma) ;
809
+ new_stream. extend_from_slice ( parts. 1 ) ;
810
+ return Some ( ( TokenStream :: new ( new_stream) , sp) ) ;
811
+ }
812
+ None
813
+ }
814
+ }
815
+
816
+ impl PartialEq < TokenStream > for TokenStream {
817
+ fn eq ( & self , other : & TokenStream ) -> bool {
818
+ self . iter ( ) . eq ( other. iter ( ) )
819
+ }
820
+ }
821
+
822
+ impl Eq for TokenStream { }
823
+
824
+ impl FromIterator < TokenTree > for TokenStream {
825
+ fn from_iter < I : IntoIterator < Item = TokenTree > > ( iter : I ) -> Self {
826
+ TokenStream :: new ( iter. into_iter ( ) . collect :: < Vec < TokenTree > > ( ) )
827
+ }
828
+ }
829
+
830
+ impl < CTX > HashStable < CTX > for TokenStream
831
+ where
832
+ CTX : crate :: HashStableContext ,
833
+ {
834
+ fn hash_stable ( & self , hcx : & mut CTX , hasher : & mut StableHasher ) {
835
+ for sub_tt in self . iter ( ) {
836
+ sub_tt. hash_stable ( hcx, hasher) ;
837
+ }
838
+ }
841
839
}
842
840
843
841
#[ derive( Clone ) ]
0 commit comments