use rustc_interface::interface;
use rustc_middle::hir::map::Map;
use rustc_middle::ty::TyCtxt;
-use rustc_session::{self, config, lint, DiagnosticOutput, Session};
+use rustc_session::config::{self, CrateType};
+use rustc_session::{lint, DiagnosticOutput, Session};
use rustc_span::edition::Edition;
use rustc_span::source_map::SourceMap;
use rustc_span::symbol::sym;
use rustc_span::{BytePos, FileName, Pos, Span, DUMMY_SP};
use rustc_target::spec::TargetTriple;
+use tempfile::Builder as TempFileBuilder;
+
use std::collections::HashMap;
use std::env;
use std::io::{self, Write};
use std::path::PathBuf;
use std::process::{self, Command, Stdio};
use std::str;
-use tempfile::Builder as TempFileBuilder;
use crate::clean::Attributes;
use crate::config::Options;
pub attrs: Vec<String>,
}
-pub fn run(options: Options) -> i32 {
+pub fn run(options: Options) -> Result<(), String> {
let input = config::Input::File(options.input.clone());
let warnings_lint_name = lint::builtin::WARNINGS.name;
})
.collect();
- let crate_types = if options.proc_macro_crate {
- vec![config::CrateType::ProcMacro]
- } else {
- vec![config::CrateType::Rlib]
- };
+ let crate_types =
+ if options.proc_macro_crate { vec![CrateType::ProcMacro] } else { vec![CrateType::Rlib] };
let sessopts = config::Options {
maybe_sysroot: options.maybe_sysroot.clone(),
});
let tests = match tests {
Ok(tests) => tests,
- Err(ErrorReported) => return 1,
+ Err(ErrorReported) => return Err(String::new()),
};
test_args.insert(0, "rustdoctest".to_string());
Some(testing::Options::new().display_output(display_warnings)),
);
- 0
+ Ok(())
}
// Look for `#![doc(test(no_crate_inject))]`, used by crates in the std facade.