librustdoc::config: removed Input from Options
The `librustdoc::config::Options` struct no longer includes `rustc_session::config::Input`. This is so that Input can be optional. In rfc#3662, the crate input is not required if `--merge=finalize`. Replacing Input with Option<Input> was decided against. In most places that Input is needed, it should be statically known to not be optional (means fewer unwraps). We just want to have an Input-free Options in librustdoc::main_args, where we can run the write shared procedure.
This commit is contained in:
parent
ec867f03bc
commit
3782251c2c
@ -57,8 +57,6 @@ fn try_from(value: &str) -> Result<Self, Self::Error> {
|
||||
#[derive(Clone)]
|
||||
pub(crate) struct Options {
|
||||
// Basic options / Options passed directly to rustc
|
||||
/// The crate root or Markdown file to load.
|
||||
pub(crate) input: Input,
|
||||
/// The name of the crate being documented.
|
||||
pub(crate) crate_name: Option<String>,
|
||||
/// Whether or not this is a bin crate
|
||||
@ -179,7 +177,6 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
}
|
||||
|
||||
f.debug_struct("Options")
|
||||
.field("input", &self.input.source_name())
|
||||
.field("crate_name", &self.crate_name)
|
||||
.field("bin_crate", &self.bin_crate)
|
||||
.field("proc_macro_crate", &self.proc_macro_crate)
|
||||
@ -348,7 +345,7 @@ pub(crate) fn from_matches(
|
||||
early_dcx: &mut EarlyDiagCtxt,
|
||||
matches: &getopts::Matches,
|
||||
args: Vec<String>,
|
||||
) -> Option<(Options, RenderOptions)> {
|
||||
) -> Option<(Input, Options, RenderOptions)> {
|
||||
// Check for unstable options.
|
||||
nightly_options::check_nightly_options(early_dcx, matches, &opts());
|
||||
|
||||
@ -751,7 +748,6 @@ fn println_condition(condition: Condition) {
|
||||
let unstable_features =
|
||||
rustc_feature::UnstableFeatures::from_environment(crate_name.as_deref());
|
||||
let options = Options {
|
||||
input,
|
||||
bin_crate,
|
||||
proc_macro_crate,
|
||||
error_format,
|
||||
@ -824,15 +820,13 @@ fn println_condition(condition: Condition) {
|
||||
html_no_source,
|
||||
output_to_stdout,
|
||||
};
|
||||
Some((options, render_options))
|
||||
Some((input, options, render_options))
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns `true` if the file given as `self.input` is a Markdown file.
|
||||
pub(crate) fn markdown_input(&self) -> Option<&Path> {
|
||||
self.input
|
||||
.opt_path()
|
||||
.filter(|p| matches!(p.extension(), Some(e) if e == "md" || e == "markdown"))
|
||||
}
|
||||
/// Returns `true` if the file given as `self.input` is a Markdown file.
|
||||
pub(crate) fn markdown_input(input: &Input) -> Option<&Path> {
|
||||
input.opt_path().filter(|p| matches!(p.extension(), Some(e) if e == "md" || e == "markdown"))
|
||||
}
|
||||
|
||||
fn parse_remap_path_prefix(
|
||||
|
@ -20,7 +20,7 @@
|
||||
use rustc_lint::{late_lint_mod, MissingDoc};
|
||||
use rustc_middle::hir::nested_filter;
|
||||
use rustc_middle::ty::{ParamEnv, Ty, TyCtxt};
|
||||
use rustc_session::config::{self, CrateType, ErrorOutputType, ResolveDocLinks};
|
||||
use rustc_session::config::{self, CrateType, ErrorOutputType, Input, ResolveDocLinks};
|
||||
pub(crate) use rustc_session::config::{Options, UnstableOptions};
|
||||
use rustc_session::{lint, Session};
|
||||
use rustc_span::symbol::sym;
|
||||
@ -177,8 +177,8 @@ pub(crate) fn new_dcx(
|
||||
|
||||
/// Parse, resolve, and typecheck the given crate.
|
||||
pub(crate) fn create_config(
|
||||
input: Input,
|
||||
RustdocOptions {
|
||||
input,
|
||||
crate_name,
|
||||
proc_macro_crate,
|
||||
error_format,
|
||||
|
@ -19,7 +19,7 @@
|
||||
use rustc_hir::def_id::LOCAL_CRATE;
|
||||
use rustc_hir::CRATE_HIR_ID;
|
||||
use rustc_interface::interface;
|
||||
use rustc_session::config::{self, CrateType, ErrorOutputType};
|
||||
use rustc_session::config::{self, CrateType, ErrorOutputType, Input};
|
||||
use rustc_session::lint;
|
||||
use rustc_span::edition::Edition;
|
||||
use rustc_span::symbol::sym;
|
||||
@ -88,7 +88,11 @@ fn get_doctest_dir() -> io::Result<TempDir> {
|
||||
TempFileBuilder::new().prefix("rustdoctest").tempdir()
|
||||
}
|
||||
|
||||
pub(crate) fn run(dcx: DiagCtxtHandle<'_>, options: RustdocOptions) -> Result<(), ErrorGuaranteed> {
|
||||
pub(crate) fn run(
|
||||
dcx: DiagCtxtHandle<'_>,
|
||||
input: Input,
|
||||
options: RustdocOptions,
|
||||
) -> Result<(), ErrorGuaranteed> {
|
||||
let invalid_codeblock_attributes_name = crate::lint::INVALID_CODEBLOCK_ATTRIBUTES.name;
|
||||
|
||||
// See core::create_config for what's going on here.
|
||||
@ -135,7 +139,7 @@ pub(crate) fn run(dcx: DiagCtxtHandle<'_>, options: RustdocOptions) -> Result<()
|
||||
opts: sessopts,
|
||||
crate_cfg: cfgs,
|
||||
crate_check_cfg: options.check_cfgs.clone(),
|
||||
input: options.input.clone(),
|
||||
input: input.clone(),
|
||||
output_file: None,
|
||||
output_dir: None,
|
||||
file_loader: None,
|
||||
|
@ -3,6 +3,7 @@
|
||||
use std::fs::read_to_string;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use rustc_session::config::Input;
|
||||
use rustc_span::FileName;
|
||||
use tempfile::tempdir;
|
||||
|
||||
@ -69,9 +70,8 @@ fn visit_header(&mut self, name: &str, level: u32) {
|
||||
}
|
||||
|
||||
/// Runs any tests/code examples in the markdown file `options.input`.
|
||||
pub(crate) fn test(options: Options) -> Result<(), String> {
|
||||
use rustc_session::config::Input;
|
||||
let input_str = match &options.input {
|
||||
pub(crate) fn test(input: &Input, options: Options) -> Result<(), String> {
|
||||
let input_str = match input {
|
||||
Input::File(path) => {
|
||||
read_to_string(path).map_err(|err| format!("{}: {err}", path.display()))?
|
||||
}
|
||||
@ -79,7 +79,7 @@ pub(crate) fn test(options: Options) -> Result<(), String> {
|
||||
};
|
||||
|
||||
// Obviously not a real crate name, but close enough for purposes of doctests.
|
||||
let crate_name = options.input.filestem().to_string();
|
||||
let crate_name = input.filestem().to_string();
|
||||
let temp_dir =
|
||||
tempdir().map_err(|error| format!("failed to create temporary directory: {error:?}"))?;
|
||||
let args_file = temp_dir.path().join("rustdoc-cfgs");
|
||||
@ -96,8 +96,7 @@ pub(crate) fn test(options: Options) -> Result<(), String> {
|
||||
let mut md_collector = MdCollector {
|
||||
tests: vec![],
|
||||
cur_path: vec![],
|
||||
filename: options
|
||||
.input
|
||||
filename: input
|
||||
.opt_path()
|
||||
.map(ToOwned::to_owned)
|
||||
.map(FileName::from)
|
||||
|
@ -727,22 +727,24 @@ fn main_args(
|
||||
|
||||
// Note that we discard any distinction between different non-zero exit
|
||||
// codes from `from_matches` here.
|
||||
let (options, render_options) = match config::Options::from_matches(early_dcx, &matches, args) {
|
||||
Some(opts) => opts,
|
||||
None => return Ok(()),
|
||||
};
|
||||
let (input, options, render_options) =
|
||||
match config::Options::from_matches(early_dcx, &matches, args) {
|
||||
Some(opts) => opts,
|
||||
None => return Ok(()),
|
||||
};
|
||||
|
||||
let dcx =
|
||||
core::new_dcx(options.error_format, None, options.diagnostic_width, &options.unstable_opts);
|
||||
let dcx = dcx.handle();
|
||||
|
||||
match (options.should_test, options.markdown_input()) {
|
||||
(true, Some(_)) => return wrap_return(dcx, doctest::test_markdown(options)),
|
||||
(true, None) => return doctest::run(dcx, options),
|
||||
(false, Some(input)) => {
|
||||
let input = input.to_owned();
|
||||
match (options.should_test, config::markdown_input(&input)) {
|
||||
(true, Some(_)) => return wrap_return(dcx, doctest::test_markdown(&input, options)),
|
||||
(true, None) => return doctest::run(dcx, input, options),
|
||||
(false, Some(md_input)) => {
|
||||
let md_input = md_input.to_owned();
|
||||
let edition = options.edition;
|
||||
let config = core::create_config(options, &render_options, using_internal_features);
|
||||
let config =
|
||||
core::create_config(input, options, &render_options, using_internal_features);
|
||||
|
||||
// `markdown::render` can invoke `doctest::make_test`, which
|
||||
// requires session globals and a thread pool, so we use
|
||||
@ -750,7 +752,7 @@ fn main_args(
|
||||
return wrap_return(
|
||||
dcx,
|
||||
interface::run_compiler(config, |_compiler| {
|
||||
markdown::render(&input, render_options, edition)
|
||||
markdown::render(&md_input, render_options, edition)
|
||||
}),
|
||||
);
|
||||
}
|
||||
@ -775,7 +777,7 @@ fn main_args(
|
||||
let scrape_examples_options = options.scrape_examples_options.clone();
|
||||
let bin_crate = options.bin_crate;
|
||||
|
||||
let config = core::create_config(options, &render_options, using_internal_features);
|
||||
let config = core::create_config(input, options, &render_options, using_internal_features);
|
||||
|
||||
interface::run_compiler(config, |compiler| {
|
||||
let sess = &compiler.sess;
|
||||
|
Loading…
Reference in New Issue
Block a user