1- use std:: path:: Path ;
1+ use std:: path:: { Path , PathBuf } ;
22use std:: { fs, str} ;
33
44use rustc_errors:: DiagCtxtHandle ;
@@ -32,12 +32,13 @@ impl ExternalHtml {
3232 id_map : & mut IdMap ,
3333 edition : Edition ,
3434 playground : & Option < Playground > ,
35+ loaded_paths : & mut Vec < PathBuf > ,
3536 ) -> Option < ExternalHtml > {
3637 let codes = ErrorCodes :: from ( nightly_build) ;
37- let ih = load_external_files ( in_header, dcx) ?;
38+ let ih = load_external_files ( in_header, dcx, loaded_paths ) ?;
3839 let bc = {
39- let mut bc = load_external_files ( before_content, dcx) ?;
40- let m_bc = load_external_files ( md_before_content, dcx) ?;
40+ let mut bc = load_external_files ( before_content, dcx, loaded_paths ) ?;
41+ let m_bc = load_external_files ( md_before_content, dcx, loaded_paths ) ?;
4142 Markdown {
4243 content : & m_bc,
4344 links : & [ ] ,
@@ -52,8 +53,8 @@ impl ExternalHtml {
5253 bc
5354 } ;
5455 let ac = {
55- let mut ac = load_external_files ( after_content, dcx) ?;
56- let m_ac = load_external_files ( md_after_content, dcx) ?;
56+ let mut ac = load_external_files ( after_content, dcx, loaded_paths ) ?;
57+ let m_ac = load_external_files ( md_after_content, dcx, loaded_paths ) ?;
5758 Markdown {
5859 content : & m_ac,
5960 links : & [ ] ,
@@ -79,8 +80,10 @@ pub(crate) enum LoadStringError {
7980pub ( crate ) fn load_string < P : AsRef < Path > > (
8081 file_path : P ,
8182 dcx : DiagCtxtHandle < ' _ > ,
83+ loaded_paths : & mut Vec < PathBuf > ,
8284) -> Result < String , LoadStringError > {
8385 let file_path = file_path. as_ref ( ) ;
86+ loaded_paths. push ( file_path. to_owned ( ) ) ;
8487 let contents = match fs:: read ( file_path) {
8588 Ok ( bytes) => bytes,
8689 Err ( e) => {
@@ -101,10 +104,14 @@ pub(crate) fn load_string<P: AsRef<Path>>(
101104 }
102105}
103106
104- fn load_external_files ( names : & [ String ] , dcx : DiagCtxtHandle < ' _ > ) -> Option < String > {
107+ fn load_external_files (
108+ names : & [ String ] ,
109+ dcx : DiagCtxtHandle < ' _ > ,
110+ loaded_paths : & mut Vec < PathBuf > ,
111+ ) -> Option < String > {
105112 let mut out = String :: new ( ) ;
106113 for name in names {
107- let Ok ( s) = load_string ( name, dcx) else { return None } ;
114+ let Ok ( s) = load_string ( name, dcx, loaded_paths ) else { return None } ;
108115 out. push_str ( & s) ;
109116 out. push ( '\n' ) ;
110117 }
0 commit comments