File tree 2 files changed +22
-14
lines changed
2 files changed +22
-14
lines changed Original file line number Diff line number Diff line change @@ -1227,21 +1227,18 @@ pub fn resolve_path(
1227
1227
// after macro expansion (that is, they are unhygienic).
1228
1228
if !path. is_absolute ( ) {
1229
1229
let callsite = span. source_callsite ( ) ;
1230
- let mut result = match parse_sess. source_map ( ) . span_to_filename ( callsite) {
1231
- FileName :: Real ( name) => name
1232
- . into_local_path ( )
1233
- . expect ( "attempting to resolve a file path in an external file" ) ,
1234
- FileName :: DocTest ( path, _) => path,
1235
- other => {
1236
- return Err ( parse_sess. dcx ( ) . create_err ( errors:: ResolveRelativePath {
1237
- span,
1238
- path : parse_sess. source_map ( ) . filename_for_diagnostics ( & other) . to_string ( ) ,
1239
- } ) ) ;
1240
- }
1230
+ let source_map = parse_sess. source_map ( ) ;
1231
+ let Some ( mut base_path) = source_map. span_to_filename ( callsite) . into_local_path ( ) else {
1232
+ return Err ( parse_sess. dcx ( ) . create_err ( errors:: ResolveRelativePath {
1233
+ span,
1234
+ path : source_map
1235
+ . filename_for_diagnostics ( & source_map. span_to_filename ( callsite) )
1236
+ . to_string ( ) ,
1237
+ } ) ) ;
1241
1238
} ;
1242
- result . pop ( ) ;
1243
- result . push ( path) ;
1244
- Ok ( result )
1239
+ base_path . pop ( ) ;
1240
+ base_path . push ( path) ;
1241
+ Ok ( base_path )
1245
1242
} else {
1246
1243
Ok ( path)
1247
1244
}
Original file line number Diff line number Diff line change @@ -427,6 +427,17 @@ impl FileName {
427
427
src. hash ( & mut hasher) ;
428
428
FileName :: InlineAsm ( hasher. finish ( ) )
429
429
}
430
+
431
+ /// Returns the path suitable for reading from the file system on the local host,
432
+ /// if this information exists.
433
+ /// Avoid embedding this in build artifacts; see `remapped_path_if_available()` for that.
434
+ pub fn into_local_path ( self ) -> Option < PathBuf > {
435
+ match self {
436
+ FileName :: Real ( path) => path. into_local_path ( ) ,
437
+ FileName :: DocTest ( path, _) => Some ( path) ,
438
+ _ => None ,
439
+ }
440
+ }
430
441
}
431
442
432
443
/// Represents a span.
You can’t perform that action at this time.
0 commit comments