@@ -162,9 +162,16 @@ impl CodeMap {
162162 let start_pos = self . next_start_pos ( ) ;
163163 let mut files = self . files . borrow_mut ( ) ;
164164
165+ // The path is used to determine the directory for loading submodules and
166+ // include files, so it must be before remapping.
167+ // Note that filename may not be a valid path, eg it may be `<anon>` etc,
168+ // but this is okay because the directory determined by `path.pop()` will
169+ // be empty, so the working directory will be used.
170+ let path = PathBuf :: from ( filename. clone ( ) ) ;
171+
165172 let ( filename, was_remapped) = self . path_mapping . map_prefix ( filename) ;
166173 let filemap =
167- Rc :: new ( FileMap :: new ( filename, was_remapped, src, Pos :: from_usize ( start_pos) ) ) ;
174+ Rc :: new ( FileMap :: new ( filename, was_remapped, path , src, Pos :: from_usize ( start_pos) ) ) ;
168175
169176 files. push ( filemap. clone ( ) ) ;
170177
@@ -216,6 +223,7 @@ impl CodeMap {
216223 let filemap = Rc :: new ( FileMap {
217224 name : filename,
218225 name_was_remapped,
226+ path : PathBuf :: new ( ) ,
219227 crate_of_origin,
220228 src : None ,
221229 src_hash,
@@ -342,7 +350,11 @@ impl CodeMap {
342350 }
343351
344352 pub fn span_to_filename ( & self , sp : Span ) -> FileName {
345- self . lookup_char_pos ( sp. lo ( ) ) . file . name . to_string ( )
353+ self . lookup_char_pos ( sp. lo ( ) ) . file . name . clone ( )
354+ }
355+
356+ pub fn span_to_path ( & self , sp : Span ) -> PathBuf {
357+ self . lookup_char_pos ( sp. lo ( ) ) . file . path . clone ( )
346358 }
347359
348360 pub fn span_to_lines ( & self , sp : Span ) -> FileLinesResult {
0 commit comments