1
- use std:: path:: Path ;
1
+ use std:: path:: { Path , PathBuf } ;
2
2
use std:: { fs, str} ;
3
3
4
4
use rustc_errors:: DiagCtxtHandle ;
@@ -32,12 +32,13 @@ impl ExternalHtml {
32
32
id_map : & mut IdMap ,
33
33
edition : Edition ,
34
34
playground : & Option < Playground > ,
35
+ loaded_paths : & mut Vec < PathBuf > ,
35
36
) -> Option < ExternalHtml > {
36
37
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 ) ?;
38
39
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 ) ?;
41
42
Markdown {
42
43
content : & m_bc,
43
44
links : & [ ] ,
@@ -52,8 +53,8 @@ impl ExternalHtml {
52
53
bc
53
54
} ;
54
55
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 ) ?;
57
58
Markdown {
58
59
content : & m_ac,
59
60
links : & [ ] ,
@@ -79,8 +80,10 @@ pub(crate) enum LoadStringError {
79
80
pub ( crate ) fn load_string < P : AsRef < Path > > (
80
81
file_path : P ,
81
82
dcx : DiagCtxtHandle < ' _ > ,
83
+ loaded_paths : & mut Vec < PathBuf > ,
82
84
) -> Result < String , LoadStringError > {
83
85
let file_path = file_path. as_ref ( ) ;
86
+ loaded_paths. push ( file_path. to_owned ( ) ) ;
84
87
let contents = match fs:: read ( file_path) {
85
88
Ok ( bytes) => bytes,
86
89
Err ( e) => {
@@ -101,10 +104,14 @@ pub(crate) fn load_string<P: AsRef<Path>>(
101
104
}
102
105
}
103
106
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 > {
105
112
let mut out = String :: new ( ) ;
106
113
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 } ;
108
115
out. push_str ( & s) ;
109
116
out. push ( '\n' ) ;
110
117
}
0 commit comments