Rollup merge of #82269 - LeSeulArtichaut:cleanup-ppmode, r=spastorino
Cleanup `PpMode` and friends This PR: - Separates `PpSourceMode` and `PpHirMode` to remove invalid states - Renames the variant to remove the redundant `Ppm` prefix - Adds basic documentation for the different pretty-print modes - Cleanups some code to make it more idiomatic Not sure if this is actually useful, but it looks cleaner to me.
This commit is contained in:
commit
8c0119da77
@ -9,7 +9,7 @@
|
||||
use rustc_middle::hir::map as hir_map;
|
||||
use rustc_middle::ty::{self, TyCtxt};
|
||||
use rustc_mir::util::{write_mir_graphviz, write_mir_pretty};
|
||||
use rustc_session::config::{Input, PpMode, PpSourceMode};
|
||||
use rustc_session::config::{Input, PpHirMode, PpMode, PpSourceMode};
|
||||
use rustc_session::Session;
|
||||
use rustc_span::symbol::Ident;
|
||||
use rustc_span::FileName;
|
||||
@ -42,43 +42,41 @@ fn call_with_pp_support<'tcx, A, F>(
|
||||
F: FnOnce(&dyn PrinterSupport) -> A,
|
||||
{
|
||||
match *ppmode {
|
||||
PpmNormal | PpmEveryBodyLoops | PpmExpanded => {
|
||||
Normal | EveryBodyLoops | Expanded => {
|
||||
let annotation = NoAnn { sess, tcx };
|
||||
f(&annotation)
|
||||
}
|
||||
|
||||
PpmIdentified | PpmExpandedIdentified => {
|
||||
Identified | ExpandedIdentified => {
|
||||
let annotation = IdentifiedAnnotation { sess, tcx };
|
||||
f(&annotation)
|
||||
}
|
||||
PpmExpandedHygiene => {
|
||||
ExpandedHygiene => {
|
||||
let annotation = HygieneAnnotation { sess };
|
||||
f(&annotation)
|
||||
}
|
||||
_ => panic!("Should use call_with_pp_support_hir"),
|
||||
}
|
||||
}
|
||||
fn call_with_pp_support_hir<A, F>(ppmode: &PpSourceMode, tcx: TyCtxt<'_>, f: F) -> A
|
||||
fn call_with_pp_support_hir<A, F>(ppmode: &PpHirMode, tcx: TyCtxt<'_>, f: F) -> A
|
||||
where
|
||||
F: FnOnce(&dyn HirPrinterSupport<'_>, &hir::Crate<'_>) -> A,
|
||||
{
|
||||
match *ppmode {
|
||||
PpmNormal => {
|
||||
PpHirMode::Normal => {
|
||||
let annotation = NoAnn { sess: tcx.sess, tcx: Some(tcx) };
|
||||
f(&annotation, tcx.hir().krate())
|
||||
}
|
||||
|
||||
PpmIdentified => {
|
||||
PpHirMode::Identified => {
|
||||
let annotation = IdentifiedAnnotation { sess: tcx.sess, tcx: Some(tcx) };
|
||||
f(&annotation, tcx.hir().krate())
|
||||
}
|
||||
PpmTyped => {
|
||||
PpHirMode::Typed => {
|
||||
abort_on_err(tcx.analysis(LOCAL_CRATE), tcx.sess);
|
||||
|
||||
let annotation = TypedAnnotation { tcx, maybe_typeck_results: Cell::new(None) };
|
||||
tcx.dep_graph.with_ignore(|| f(&annotation, tcx.hir().krate()))
|
||||
}
|
||||
_ => panic!("Should use call_with_pp_support"),
|
||||
}
|
||||
}
|
||||
|
||||
@ -393,16 +391,13 @@ pub fn print_after_parsing(
|
||||
) {
|
||||
let (src, src_name) = get_source(input, sess);
|
||||
|
||||
let mut out = String::new();
|
||||
|
||||
if let PpmSource(s) = ppm {
|
||||
let out = if let Source(s) = ppm {
|
||||
// Silently ignores an identified node.
|
||||
let out = &mut out;
|
||||
call_with_pp_support(&s, sess, None, move |annotation| {
|
||||
debug!("pretty printing source code {:?}", s);
|
||||
let sess = annotation.sess();
|
||||
let parse = &sess.parse_sess;
|
||||
*out = pprust::print_crate(
|
||||
pprust::print_crate(
|
||||
sess.source_map(),
|
||||
krate,
|
||||
src_name,
|
||||
@ -413,7 +408,7 @@ pub fn print_after_parsing(
|
||||
)
|
||||
})
|
||||
} else {
|
||||
unreachable!();
|
||||
unreachable!()
|
||||
};
|
||||
|
||||
write_or_print(&out, ofile);
|
||||
@ -433,17 +428,14 @@ pub fn print_after_hir_lowering<'tcx>(
|
||||
|
||||
let (src, src_name) = get_source(input, tcx.sess);
|
||||
|
||||
let mut out = String::new();
|
||||
|
||||
match ppm {
|
||||
PpmSource(s) => {
|
||||
let out = match ppm {
|
||||
Source(s) => {
|
||||
// Silently ignores an identified node.
|
||||
let out = &mut out;
|
||||
call_with_pp_support(&s, tcx.sess, Some(tcx), move |annotation| {
|
||||
debug!("pretty printing source code {:?}", s);
|
||||
let sess = annotation.sess();
|
||||
let parse = &sess.parse_sess;
|
||||
*out = pprust::print_crate(
|
||||
pprust::print_crate(
|
||||
sess.source_map(),
|
||||
krate,
|
||||
src_name,
|
||||
@ -455,26 +447,20 @@ pub fn print_after_hir_lowering<'tcx>(
|
||||
})
|
||||
}
|
||||
|
||||
PpmHir(s) => {
|
||||
let out = &mut out;
|
||||
call_with_pp_support_hir(&s, tcx, move |annotation, krate| {
|
||||
debug!("pretty printing source code {:?}", s);
|
||||
let sess = annotation.sess();
|
||||
let sm = sess.source_map();
|
||||
*out = pprust_hir::print_crate(sm, krate, src_name, src, annotation.pp_ann())
|
||||
})
|
||||
}
|
||||
Hir(s) => call_with_pp_support_hir(&s, tcx, move |annotation, krate| {
|
||||
debug!("pretty printing HIR {:?}", s);
|
||||
let sess = annotation.sess();
|
||||
let sm = sess.source_map();
|
||||
pprust_hir::print_crate(sm, krate, src_name, src, annotation.pp_ann())
|
||||
}),
|
||||
|
||||
PpmHirTree(s) => {
|
||||
let out = &mut out;
|
||||
call_with_pp_support_hir(&s, tcx, move |_annotation, krate| {
|
||||
debug!("pretty printing source code {:?}", s);
|
||||
*out = format!("{:#?}", krate);
|
||||
});
|
||||
}
|
||||
HirTree => call_with_pp_support_hir(&PpHirMode::Normal, tcx, move |_annotation, krate| {
|
||||
debug!("pretty printing HIR tree");
|
||||
format!("{:#?}", krate)
|
||||
}),
|
||||
|
||||
_ => unreachable!(),
|
||||
}
|
||||
};
|
||||
|
||||
write_or_print(&out, ofile);
|
||||
}
|
||||
@ -493,14 +479,10 @@ fn print_with_analysis(
|
||||
tcx.analysis(LOCAL_CRATE)?;
|
||||
|
||||
match ppm {
|
||||
PpmMir | PpmMirCFG => match ppm {
|
||||
PpmMir => write_mir_pretty(tcx, None, &mut out),
|
||||
PpmMirCFG => write_mir_graphviz(tcx, None, &mut out),
|
||||
_ => unreachable!(),
|
||||
},
|
||||
Mir => write_mir_pretty(tcx, None, &mut out).unwrap(),
|
||||
MirCFG => write_mir_graphviz(tcx, None, &mut out).unwrap(),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
.unwrap();
|
||||
|
||||
let out = std::str::from_utf8(&out).unwrap();
|
||||
write_or_print(out, ofile);
|
||||
|
@ -350,7 +350,7 @@ fn configure_and_expand_inner<'a>(
|
||||
rustc_builtin_macros::test_harness::inject(&sess, &mut resolver, &mut krate)
|
||||
});
|
||||
|
||||
if let Some(PpMode::PpmSource(PpSourceMode::PpmEveryBodyLoops)) = sess.opts.pretty {
|
||||
if let Some(PpMode::Source(PpSourceMode::EveryBodyLoops)) = sess.opts.pretty {
|
||||
tracing::debug!("replacing bodies with loop {{}}");
|
||||
util::ReplaceBodyWithLoop::new(&mut resolver).visit_crate(&mut krate);
|
||||
}
|
||||
|
@ -2057,40 +2057,21 @@ fn parse_pretty(
|
||||
debugging_opts: &DebuggingOptions,
|
||||
efmt: ErrorOutputType,
|
||||
) -> Option<PpMode> {
|
||||
let pretty = if debugging_opts.unstable_options {
|
||||
matches.opt_default("pretty", "normal").map(|a| {
|
||||
// stable pretty-print variants only
|
||||
parse_pretty_inner(efmt, &a, false)
|
||||
})
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
return if pretty.is_none() {
|
||||
debugging_opts.unpretty.as_ref().map(|a| {
|
||||
// extended with unstable pretty-print variants
|
||||
parse_pretty_inner(efmt, &a, true)
|
||||
})
|
||||
} else {
|
||||
pretty
|
||||
};
|
||||
|
||||
fn parse_pretty_inner(efmt: ErrorOutputType, name: &str, extended: bool) -> PpMode {
|
||||
use PpMode::*;
|
||||
use PpSourceMode::*;
|
||||
let first = match (name, extended) {
|
||||
("normal", _) => PpmSource(PpmNormal),
|
||||
("identified", _) => PpmSource(PpmIdentified),
|
||||
("everybody_loops", true) => PpmSource(PpmEveryBodyLoops),
|
||||
("expanded", _) => PpmSource(PpmExpanded),
|
||||
("expanded,identified", _) => PpmSource(PpmExpandedIdentified),
|
||||
("expanded,hygiene", _) => PpmSource(PpmExpandedHygiene),
|
||||
("hir", true) => PpmHir(PpmNormal),
|
||||
("hir,identified", true) => PpmHir(PpmIdentified),
|
||||
("hir,typed", true) => PpmHir(PpmTyped),
|
||||
("hir-tree", true) => PpmHirTree(PpmNormal),
|
||||
("mir", true) => PpmMir,
|
||||
("mir-cfg", true) => PpmMirCFG,
|
||||
("normal", _) => Source(PpSourceMode::Normal),
|
||||
("identified", _) => Source(PpSourceMode::Identified),
|
||||
("everybody_loops", true) => Source(PpSourceMode::EveryBodyLoops),
|
||||
("expanded", _) => Source(PpSourceMode::Expanded),
|
||||
("expanded,identified", _) => Source(PpSourceMode::ExpandedIdentified),
|
||||
("expanded,hygiene", _) => Source(PpSourceMode::ExpandedHygiene),
|
||||
("hir", true) => Hir(PpHirMode::Normal),
|
||||
("hir,identified", true) => Hir(PpHirMode::Identified),
|
||||
("hir,typed", true) => Hir(PpHirMode::Typed),
|
||||
("hir-tree", true) => HirTree,
|
||||
("mir", true) => Mir,
|
||||
("mir-cfg", true) => MirCFG,
|
||||
_ => {
|
||||
if extended {
|
||||
early_error(
|
||||
@ -2119,6 +2100,18 @@ fn parse_pretty_inner(efmt: ErrorOutputType, name: &str, extended: bool) -> PpMo
|
||||
tracing::debug!("got unpretty option: {:?}", first);
|
||||
first
|
||||
}
|
||||
|
||||
if debugging_opts.unstable_options {
|
||||
if let Some(a) = matches.opt_default("pretty", "normal") {
|
||||
// stable pretty-print variants only
|
||||
return Some(parse_pretty_inner(efmt, &a, false));
|
||||
}
|
||||
}
|
||||
|
||||
debugging_opts.unpretty.as_ref().map(|a| {
|
||||
// extended with unstable pretty-print variants
|
||||
parse_pretty_inner(efmt, &a, true)
|
||||
})
|
||||
}
|
||||
|
||||
pub fn make_crate_type_option() -> RustcOptGroup {
|
||||
@ -2226,22 +2219,43 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum PpSourceMode {
|
||||
PpmNormal,
|
||||
PpmEveryBodyLoops,
|
||||
PpmExpanded,
|
||||
PpmIdentified,
|
||||
PpmExpandedIdentified,
|
||||
PpmExpandedHygiene,
|
||||
PpmTyped,
|
||||
/// `--pretty=normal`
|
||||
Normal,
|
||||
/// `-Zunpretty=everybody_loops`
|
||||
EveryBodyLoops,
|
||||
/// `--pretty=expanded`
|
||||
Expanded,
|
||||
/// `--pretty=identified`
|
||||
Identified,
|
||||
/// `--pretty=expanded,identified`
|
||||
ExpandedIdentified,
|
||||
/// `--pretty=expanded,hygiene`
|
||||
ExpandedHygiene,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum PpHirMode {
|
||||
/// `-Zunpretty=hir`
|
||||
Normal,
|
||||
/// `-Zunpretty=hir,identified`
|
||||
Identified,
|
||||
/// `-Zunpretty=hir,typed`
|
||||
Typed,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Debug)]
|
||||
pub enum PpMode {
|
||||
PpmSource(PpSourceMode),
|
||||
PpmHir(PpSourceMode),
|
||||
PpmHirTree(PpSourceMode),
|
||||
PpmMir,
|
||||
PpmMirCFG,
|
||||
/// Options that print the source code, i.e.
|
||||
/// `--pretty` and `-Zunpretty=everybody_loops`
|
||||
Source(PpSourceMode),
|
||||
/// Options that print the HIR, i.e. `-Zunpretty=hir`
|
||||
Hir(PpHirMode),
|
||||
/// `-Zunpretty=hir-tree`
|
||||
HirTree,
|
||||
/// `-Zunpretty=mir`
|
||||
Mir,
|
||||
/// `-Zunpretty=mir-cfg`
|
||||
MirCFG,
|
||||
}
|
||||
|
||||
impl PpMode {
|
||||
@ -2249,22 +2263,19 @@ pub fn needs_ast_map(&self) -> bool {
|
||||
use PpMode::*;
|
||||
use PpSourceMode::*;
|
||||
match *self {
|
||||
PpmSource(PpmNormal | PpmIdentified) => false,
|
||||
Source(Normal | Identified) => false,
|
||||
|
||||
PpmSource(
|
||||
PpmExpanded | PpmEveryBodyLoops | PpmExpandedIdentified | PpmExpandedHygiene,
|
||||
)
|
||||
| PpmHir(_)
|
||||
| PpmHirTree(_)
|
||||
| PpmMir
|
||||
| PpmMirCFG => true,
|
||||
PpmSource(PpmTyped) => panic!("invalid state"),
|
||||
Source(Expanded | EveryBodyLoops | ExpandedIdentified | ExpandedHygiene)
|
||||
| Hir(_)
|
||||
| HirTree
|
||||
| Mir
|
||||
| MirCFG => true,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn needs_analysis(&self) -> bool {
|
||||
use PpMode::*;
|
||||
matches!(*self, PpmMir | PpmMirCFG)
|
||||
matches!(*self, Mir | MirCFG)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user