@@ -27,7 +27,7 @@ use ast::Local;
2727use ast:: MacStmtStyle ;
2828use ast:: Mac_ ;
2929use ast:: { MutTy , Mutability } ;
30- use ast:: { Pat , PatKind } ;
30+ use ast:: { Pat , PatKind , PathSegment } ;
3131use ast:: { PolyTraitRef , QSelf } ;
3232use ast:: { Stmt , StmtKind } ;
3333use ast:: { VariantData , StructField } ;
@@ -1811,7 +1811,7 @@ impl<'a> Parser<'a> {
18111811 } ;
18121812
18131813 if is_global {
1814- segments. insert ( 0 , ast :: PathSegment :: crate_root ( ) ) ;
1814+ segments. insert ( 0 , PathSegment :: crate_root ( ) ) ;
18151815 }
18161816
18171817 // Assemble the span.
@@ -1829,11 +1829,12 @@ impl<'a> Parser<'a> {
18291829 /// - `a::b<T,U>::c<V,W>`
18301830 /// - `a::b<T,U>::c(V) -> W`
18311831 /// - `a::b<T,U>::c(V)`
1832- pub fn parse_path_segments_without_colons ( & mut self ) -> PResult < ' a , Vec < ast :: PathSegment > > {
1832+ pub fn parse_path_segments_without_colons ( & mut self ) -> PResult < ' a , Vec < PathSegment > > {
18331833 let mut segments = Vec :: new ( ) ;
18341834 loop {
18351835 // First, parse an identifier.
18361836 let identifier = self . parse_path_segment_ident ( ) ?;
1837+ let ident_span = self . prev_span ;
18371838
18381839 if self . check ( & token:: ModSep ) && self . look_ahead ( 1 , |t| * t == token:: Lt ) {
18391840 self . bump ( ) ;
@@ -1881,7 +1882,11 @@ impl<'a> Parser<'a> {
18811882 } ;
18821883
18831884 // Assemble and push the result.
1884- segments. push ( ast:: PathSegment { identifier : identifier, parameters : parameters } ) ;
1885+ segments. push ( PathSegment {
1886+ identifier : identifier,
1887+ span : ident_span,
1888+ parameters : parameters
1889+ } ) ;
18851890
18861891 // Continue only if we see a `::`
18871892 if !self . eat ( & token:: ModSep ) {
@@ -1892,15 +1897,16 @@ impl<'a> Parser<'a> {
18921897
18931898 /// Examples:
18941899 /// - `a::b::<T,U>::c`
1895- pub fn parse_path_segments_with_colons ( & mut self ) -> PResult < ' a , Vec < ast :: PathSegment > > {
1900+ pub fn parse_path_segments_with_colons ( & mut self ) -> PResult < ' a , Vec < PathSegment > > {
18961901 let mut segments = Vec :: new ( ) ;
18971902 loop {
18981903 // First, parse an identifier.
18991904 let identifier = self . parse_path_segment_ident ( ) ?;
1905+ let ident_span = self . prev_span ;
19001906
19011907 // If we do not see a `::`, stop.
19021908 if !self . eat ( & token:: ModSep ) {
1903- segments. push ( identifier . into ( ) ) ;
1909+ segments. push ( PathSegment :: from_ident ( identifier , ident_span ) ) ;
19041910 return Ok ( segments) ;
19051911 }
19061912
@@ -1909,8 +1915,9 @@ impl<'a> Parser<'a> {
19091915 // Consumed `a::b::<`, go look for types
19101916 let ( lifetimes, types, bindings) = self . parse_generic_args ( ) ?;
19111917 self . expect_gt ( ) ?;
1912- segments. push ( ast :: PathSegment {
1918+ segments. push ( PathSegment {
19131919 identifier : identifier,
1920+ span : ident_span,
19141921 parameters : ast:: AngleBracketedParameterData {
19151922 lifetimes : lifetimes,
19161923 types : types,
@@ -1924,22 +1931,22 @@ impl<'a> Parser<'a> {
19241931 }
19251932 } else {
19261933 // Consumed `a::`, go look for `b`
1927- segments. push ( identifier . into ( ) ) ;
1934+ segments. push ( PathSegment :: from_ident ( identifier , ident_span ) ) ;
19281935 }
19291936 }
19301937 }
19311938
19321939 /// Examples:
19331940 /// - `a::b::c`
19341941 pub fn parse_path_segments_without_types ( & mut self )
1935- -> PResult < ' a , Vec < ast :: PathSegment > > {
1942+ -> PResult < ' a , Vec < PathSegment > > {
19361943 let mut segments = Vec :: new ( ) ;
19371944 loop {
19381945 // First, parse an identifier.
19391946 let identifier = self . parse_path_segment_ident ( ) ?;
19401947
19411948 // Assemble and push the result.
1942- segments. push ( identifier. into ( ) ) ;
1949+ segments. push ( PathSegment :: from_ident ( identifier, self . prev_span ) ) ;
19431950
19441951 // If we do not see a `::` or see `::{`/`::*`, stop.
19451952 if !self . check ( & token:: ModSep ) || self . is_import_coupler ( ) {
@@ -5902,7 +5909,7 @@ impl<'a> Parser<'a> {
59025909 // `{foo, bar}`, `::{foo, bar}`, `*`, or `::*`.
59035910 self . eat ( & token:: ModSep ) ;
59045911 let prefix = ast:: Path {
5905- segments : vec ! [ ast :: PathSegment :: crate_root( ) ] ,
5912+ segments : vec ! [ PathSegment :: crate_root( ) ] ,
59065913 span : mk_sp ( lo, self . span . hi ) ,
59075914 } ;
59085915 let view_path_kind = if self . eat ( & token:: BinOp ( token:: Star ) ) {
0 commit comments