@@ -1074,97 +1074,71 @@ impl SourceFileHash {
1074
1074
}
1075
1075
}
1076
1076
1077
- #[ derive( Clone , Debug , PartialEq , Eq ) ]
1078
- enum Name {
1077
+ #[ derive( Clone , Debug , PartialEq , Eq , PartialOrd ) ]
1078
+ pub struct SourceFileName {
1079
1079
/// The name of the file that the source came from. Source that doesn't
1080
1080
/// originate from files has names between angle brackets by convention
1081
1081
/// (e.g., `<anon>`).
1082
- Normal ( FileName ) ,
1083
- /// FileName modified by `--remap-path-prefix`.
1084
- Remapped ( FileName ) ,
1082
+ name : FileName ,
1083
+ /// `true` if the name field was modified by `--remap-path-prefix`.
1084
+ was_remapped : bool ,
1085
+ /// The unmapped path of the file that the source came from.
1086
+ /// Set to `None` if the `SourceFile` was imported from an external crate.
1087
+ unmapped_name : Option < FileName > ,
1085
1088
}
1086
1089
1087
- impl Name {
1088
- pub fn new ( filename : FileName , was_remapped : bool ) -> Self {
1089
- if was_remapped { Name :: Remapped ( filename) } else { Name :: Normal ( filename) }
1090
- }
1091
-
1092
- fn is_real ( & self ) -> bool {
1093
- use Name :: * ;
1094
- match * self {
1095
- Normal ( ref name) => name. is_real ( ) ,
1096
- Remapped ( ref name) => name. is_real ( ) ,
1097
- }
1098
- }
1099
-
1100
- fn is_remapped ( & self ) -> bool {
1101
- use Name :: * ;
1102
- match * self {
1103
- Normal ( _) => false ,
1104
- Remapped ( _) => true ,
1105
- }
1090
+ impl SourceFileName {
1091
+ pub fn new ( name : FileName , was_remapped : bool , unmapped_name : Option < FileName > ) -> Self {
1092
+ Self { name, was_remapped, unmapped_name }
1106
1093
}
1107
1094
1108
- fn name_and_remapped ( & self ) -> ( FileName , bool ) {
1109
- use Name :: * ;
1110
- let name = match * self {
1111
- Normal ( ref name) => name,
1112
- Remapped ( ref name) => name,
1113
- } ;
1114
- ( name. clone ( ) , self . is_remapped ( ) )
1095
+ pub fn name ( & self ) -> & FileName {
1096
+ & self . name
1115
1097
}
1116
- }
1117
1098
1118
- /// Does a comparison with the filename, ignoring any remapping.
1119
- impl PartialEq < FileName > for Name {
1120
- fn eq ( & self , other : & FileName ) -> bool {
1121
- use Name :: * ;
1122
- match * self {
1123
- Normal ( ref name) => name == other,
1124
- Remapped ( ref name) => name == other,
1125
- }
1099
+ pub fn unmapped_path ( & self ) -> & FileName {
1100
+ self . unmapped_name . as_ref ( ) . unwrap_or ( self . name ( ) )
1126
1101
}
1127
- }
1128
1102
1129
- impl std:: fmt:: Display for Name {
1130
- fn fmt ( & self , fmt : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
1131
- use Name :: * ;
1132
- match * self {
1133
- Normal ( ref name) => write ! ( fmt, "{}" , name) ,
1134
- Remapped ( ref name) => write ! ( fmt, "remapped {}" , name) ,
1135
- }
1103
+ fn is_real ( & self ) -> bool {
1104
+ self . name . is_real ( )
1136
1105
}
1137
1106
}
1138
1107
1139
- impl Encodable for Name {
1108
+ impl Encodable for SourceFileName {
1140
1109
fn encode < S : Encoder > ( & self , s : & mut S ) -> Result < ( ) , S :: Error > {
1141
- s. emit_enum ( "Name" , |s| match self {
1142
- Name :: Normal ( name) => s. emit_enum_variant ( "Normal" , 0 , 1 , |s| name. encode ( s) ) ,
1143
- Name :: Remapped ( name) => s. emit_enum_variant ( "Remapped" , 1 , 1 , |s| name. encode ( s) ) ,
1110
+ s. emit_struct ( "SourceFileName" , 3 , |s| {
1111
+ s. emit_struct_field ( "name" , 0 , |s| self . name . encode ( s) ) ?;
1112
+ s. emit_struct_field ( "was_remapped" , 1 , |s| self . was_remapped . encode ( s) ) ?;
1113
+ s. emit_struct_field ( "unmapped_name" , 2 , |s| self . unmapped_name . encode ( s) ) ?;
1114
+ Ok ( ( ) )
1144
1115
} )
1145
1116
}
1146
1117
}
1147
1118
1148
- impl Decodable for Name {
1119
+ impl Decodable for SourceFileName {
1149
1120
fn decode < D : Decoder > ( d : & mut D ) -> Result < Self , D :: Error > {
1150
- let names = [ "Normal ", "Remapped" ] ;
1151
- d . read_enum ( "Name ", |d| {
1152
- d . read_enum_variant ( & names , |d , id| match id {
1153
- 0 => Ok ( Name :: Normal ( FileName :: decode ( d) ? ) ) ,
1154
- 1 => Ok ( Name :: Remapped ( FileName :: decode ( d ) ? ) ) ,
1155
- _ => Err ( d . error ( "Name enum variant could not be found" ) ) ,
1156
- } )
1121
+ d . read_struct ( "SourceFileName ", 3 , |d| {
1122
+ let name : FileName = d . read_struct_field ( "name ", 0 , |d| Decodable :: decode ( d ) ) ? ;
1123
+ let was_remapped : bool =
1124
+ d . read_struct_field ( "was_remapped" , 1 , |d| Decodable :: decode ( d) ) ? ;
1125
+ let unmapped_name : Option < FileName > =
1126
+ d . read_struct_field ( "unmapped_name" , 2 , |d| Decodable :: decode ( d ) ) ? ;
1127
+ Ok ( Self :: new ( name , was_remapped , unmapped_name ) )
1157
1128
} )
1158
1129
}
1159
1130
}
1160
1131
1132
+ impl std:: fmt:: Display for SourceFileName {
1133
+ fn fmt ( & self , _fmt : & mut fmt:: Formatter < ' _ > ) -> fmt:: Result {
1134
+ todo ! ( )
1135
+ }
1136
+ }
1137
+
1161
1138
/// A single source in the `SourceMap`.
1162
1139
#[ derive( Clone ) ]
1163
1140
pub struct SourceFile {
1164
- pub name : Name ,
1165
- /// The unmapped path of the file that the source came from.
1166
- /// Set to `None` if the `SourceFile` was imported from an external crate.
1167
- pub unmapped_path : Option < FileName > ,
1141
+ pub name : SourceFileName ,
1168
1142
/// The complete source code.
1169
1143
pub src : Option < Lrc < String > > ,
1170
1144
/// The source code's hash.
@@ -1262,7 +1236,7 @@ impl<S: Encoder> Encodable<S> for SourceFile {
1262
1236
impl < D : Decoder > Decodable < D > for SourceFile {
1263
1237
fn decode ( d : & mut D ) -> Result < SourceFile , D :: Error > {
1264
1238
d. read_struct ( "SourceFile" , 8 , |d| {
1265
- let name: Name = d. read_struct_field ( "name" , 0 , |d| Decodable :: decode ( d) ) ?;
1239
+ let name: SourceFileName = d. read_struct_field ( "name" , 0 , |d| Decodable :: decode ( d) ) ?;
1266
1240
let src_hash: SourceFileHash =
1267
1241
d. read_struct_field ( "src_hash" , 2 , |d| Decodable :: decode ( d) ) ?;
1268
1242
let start_pos: BytePos =
@@ -1306,7 +1280,6 @@ impl<D: Decoder> Decodable<D> for SourceFile {
1306
1280
let cnum: CrateNum = d. read_struct_field ( "cnum" , 10 , |d| Decodable :: decode ( d) ) ?;
1307
1281
Ok ( SourceFile {
1308
1282
name,
1309
- unmapped_path : None ,
1310
1283
start_pos,
1311
1284
end_pos,
1312
1285
src : None ,
@@ -1356,8 +1329,7 @@ impl SourceFile {
1356
1329
analyze_source_file:: analyze_source_file ( & src[ ..] , start_pos) ;
1357
1330
1358
1331
SourceFile {
1359
- name : Name :: new ( name, name_was_remapped) ,
1360
- unmapped_path : Some ( unmapped_path) ,
1332
+ name : SourceFileName :: new ( name, name_was_remapped, Some ( unmapped_path) ) ,
1361
1333
src : Some ( Lrc :: new ( src) ) ,
1362
1334
src_hash,
1363
1335
external_src : Lock :: new ( ExternalSource :: Unneeded ) ,
@@ -1774,18 +1746,18 @@ pub enum SpanSnippetError {
1774
1746
IllFormedSpan ( Span ) ,
1775
1747
DistinctSources ( DistinctSources ) ,
1776
1748
MalformedForSourcemap ( MalformedSourceMapPositions ) ,
1777
- SourceNotAvailable { filename : Name } ,
1749
+ SourceNotAvailable { filename : SourceFileName } ,
1778
1750
}
1779
1751
1780
1752
#[ derive( Clone , PartialEq , Eq , Debug ) ]
1781
1753
pub struct DistinctSources {
1782
- pub begin : ( Name , BytePos ) ,
1783
- pub end : ( Name , BytePos ) ,
1754
+ pub begin : ( SourceFileName , BytePos ) ,
1755
+ pub end : ( SourceFileName , BytePos ) ,
1784
1756
}
1785
1757
1786
1758
#[ derive( Clone , PartialEq , Eq , Debug ) ]
1787
1759
pub struct MalformedSourceMapPositions {
1788
- pub name : Name ,
1760
+ pub name : SourceFileName ,
1789
1761
pub source_len : usize ,
1790
1762
pub begin_pos : BytePos ,
1791
1763
pub end_pos : BytePos ,
0 commit comments