File tree Expand file tree Collapse file tree 2 files changed +69
-2
lines changed Expand file tree Collapse file tree 2 files changed +69
-2
lines changed Original file line number Diff line number Diff line change @@ -1099,8 +1099,17 @@ fn on_stderr_line(
1099
1099
return Ok ( ( ) ) ;
1100
1100
}
1101
1101
1102
- let compiler_message: Box < serde_json:: value:: RawValue > = serde_json:: from_str ( line)
1103
- . map_err ( |_| internal ( & format ! ( "compiler produced invalid json: `{}`" , line) ) ) ?;
1102
+ let compiler_message: Box < serde_json:: value:: RawValue > = match serde_json:: from_str ( line) {
1103
+ Ok ( msg) => msg,
1104
+
1105
+ // If the compiler produced a line that started with `{` but it wasn't
1106
+ // valid JSON, maybe it wasn't JSON in the first place! Forward it along
1107
+ // to stderr.
1108
+ Err ( _) => {
1109
+ state. stderr ( line) ;
1110
+ return Ok ( ( ) ) ;
1111
+ }
1112
+ } ;
1104
1113
1105
1114
// In some modes of compilation Cargo switches the compiler to JSON mode
1106
1115
// but the user didn't request that so we still want to print pretty rustc
Original file line number Diff line number Diff line change @@ -4632,3 +4632,61 @@ fn pipelining_works() {
4632
4632
" )
4633
4633
. run ( ) ;
4634
4634
}
4635
+
4636
+ #[ test]
4637
+ fn forward_rustc_output ( ) {
4638
+ let foo = project ( )
4639
+ . file (
4640
+ "Cargo.toml" ,
4641
+ r#"
4642
+ [package]
4643
+ name = "foo"
4644
+ version = "0.1.0"
4645
+ edition = '2018'
4646
+ [dependencies]
4647
+ bar = { path = "bar" }
4648
+ "# ,
4649
+ )
4650
+ . file ( "src/lib.rs" , "bar::foo!();" )
4651
+ . file (
4652
+ "bar/Cargo.toml" ,
4653
+ r#"
4654
+ [package]
4655
+ name = "bar"
4656
+ version = "0.1.0"
4657
+ [lib]
4658
+ proc-macro = true
4659
+ "# ,
4660
+ )
4661
+ . file (
4662
+ "bar/src/lib.rs" ,
4663
+ r#"
4664
+ extern crate proc_macro;
4665
+ use proc_macro::*;
4666
+
4667
+ #[proc_macro]
4668
+ pub fn foo(input: TokenStream) -> TokenStream {
4669
+ println!("a");
4670
+ println!("b");
4671
+ println!("{{}}");
4672
+ eprintln!("c");
4673
+ eprintln!("d");
4674
+ eprintln!("{{a"); // "malformed json"
4675
+ input
4676
+ }
4677
+ "# ,
4678
+ )
4679
+ . build ( ) ;
4680
+
4681
+ foo. cargo ( "build" )
4682
+ . with_stdout ( "a\n b\n {}" )
4683
+ . with_stderr ( "\
4684
+ [COMPILING] [..]
4685
+ [COMPILING] [..]
4686
+ c
4687
+ d
4688
+ {a
4689
+ [FINISHED] [..]
4690
+ " )
4691
+ . run ( ) ;
4692
+ }
You can’t perform that action at this time.
0 commit comments