1- use std:: fs:: { create_dir_all, File } ;
1+ use std:: fs:: { create_dir_all, read_to_string , File } ;
22use std:: io:: prelude:: * ;
3- use std:: path:: PathBuf ;
3+ use std:: path:: Path ;
44
55use rustc_feature:: UnstableFeatures ;
66use rustc_span:: edition:: Edition ;
77use rustc_span:: source_map:: DUMMY_SP ;
88
99use crate :: config:: { Options , RenderOptions } ;
10- use crate :: externalfiles:: { load_string, LoadStringError } ;
1110use crate :: html:: escape:: Escape ;
1211use crate :: html:: markdown;
1312use crate :: html:: markdown:: { find_testable_code, ErrorCodes , IdMap , Markdown , MarkdownWithToc } ;
@@ -34,17 +33,16 @@ fn extract_leading_metadata(s: &str) -> (Vec<&str>, &str) {
3433
3534/// Render `input` (e.g., "foo.md") into an HTML file in `output`
3635/// (e.g., output = "bar" => "bar/foo.html").
37- pub fn render (
38- input : PathBuf ,
36+ pub fn render < P : AsRef < Path > > (
37+ input : P ,
3938 options : RenderOptions ,
40- diag : & rustc_errors:: Handler ,
4139 edition : Edition ,
42- ) -> i32 {
40+ ) -> Result < ( ) , String > {
4341 if let Err ( e) = create_dir_all ( & options. output ) {
44- diag. struct_err ( & format ! ( "{}: {}" , options. output. display( ) , e) ) . emit ( ) ;
45- return 4 ;
42+ return Err ( format ! ( "{}: {}" , options. output. display( ) , e) ) ;
4643 }
4744
45+ let input = input. as_ref ( ) ;
4846 let mut output = options. output ;
4947 output. push ( input. file_name ( ) . unwrap ( ) ) ;
5048 output. set_extension ( "html" ) ;
@@ -55,26 +53,15 @@ pub fn render(
5553 css. push_str ( & s)
5654 }
5755
58- let input_str = match load_string ( & input, diag) {
59- Ok ( s) => s,
60- Err ( LoadStringError :: ReadFail ) => return 1 ,
61- Err ( LoadStringError :: BadUtf8 ) => return 2 ,
62- } ;
56+ let input_str = read_to_string ( input) . map_err ( |err| format ! ( "{}: {}" , input. display( ) , err) ) ?;
6357 let playground_url = options. markdown_playground_url . or ( options. playground_url ) ;
6458 let playground = playground_url. map ( |url| markdown:: Playground { crate_name : None , url } ) ;
6559
66- let mut out = match File :: create ( & output) {
67- Err ( e) => {
68- diag. struct_err ( & format ! ( "{}: {}" , output. display( ) , e) ) . emit ( ) ;
69- return 4 ;
70- }
71- Ok ( f) => f,
72- } ;
60+ let mut out = File :: create ( & output) . map_err ( |e| format ! ( "{}: {}" , output. display( ) , e) ) ?;
7361
7462 let ( metadata, text) = extract_leading_metadata ( & input_str) ;
7563 if metadata. is_empty ( ) {
76- diag. struct_err ( "invalid markdown file: no initial lines starting with `# ` or `%`" ) . emit ( ) ;
77- return 5 ;
64+ return Err ( "invalid markdown file: no initial lines starting with `# ` or `%`" . to_owned ( ) ) ;
7865 }
7966 let title = metadata[ 0 ] ;
8067
@@ -122,22 +109,15 @@ pub fn render(
122109 ) ;
123110
124111 match err {
125- Err ( e) => {
126- diag. struct_err ( & format ! ( "cannot write to `{}`: {}" , output. display( ) , e) ) . emit ( ) ;
127- 6
128- }
129- Ok ( _) => 0 ,
112+ Err ( e) => Err ( format ! ( "cannot write to `{}`: {}" , output. display( ) , e) ) ,
113+ Ok ( _) => Ok ( ( ) ) ,
130114 }
131115}
132116
133117/// Runs any tests/code examples in the markdown file `input`.
134- pub fn test ( mut options : Options , diag : & rustc_errors:: Handler ) -> i32 {
135- let input_str = match load_string ( & options. input , diag) {
136- Ok ( s) => s,
137- Err ( LoadStringError :: ReadFail ) => return 1 ,
138- Err ( LoadStringError :: BadUtf8 ) => return 2 ,
139- } ;
140-
118+ pub fn test ( mut options : Options ) -> Result < ( ) , String > {
119+ let input_str = read_to_string ( & options. input )
120+ . map_err ( |err| format ! ( "{}: {}" , options. input. display( ) , err) ) ?;
141121 let mut opts = TestOptions :: default ( ) ;
142122 opts. no_crate_inject = true ;
143123 opts. display_warnings = options. display_warnings ;
@@ -161,5 +141,5 @@ pub fn test(mut options: Options, diag: &rustc_errors::Handler) -> i32 {
161141 collector. tests ,
162142 Some ( testing:: Options :: new ( ) . display_output ( options. display_warnings ) ) ,
163143 ) ;
164- 0
144+ Ok ( ( ) )
165145}
0 commit comments