Skip to content

Commit

Permalink
Rollup merge of rust-lang#82304 - LeSeulArtichaut:unpretty-ast, r=spa…
Browse files Browse the repository at this point in the history
…storino

Add `-Z unpretty` flags for the AST

Implements rust-lang/compiler-team#408.
Builds on rust-lang#82269, but if that PR is rejected or stalls out, I can implement this without rust-lang#82269.
cc rust-lang/rustc-dev-guide#1062
  • Loading branch information
Dylan-DPC authored Mar 4, 2021
2 parents 1dfd766 + 6111445 commit e0ef270
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 22 deletions.
48 changes: 29 additions & 19 deletions compiler/rustc_driver/src/pretty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ use rustc_hir_pretty as pprust_hir;
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, PpHirMode, PpMode, PpSourceMode};
use rustc_session::config::{Input, PpAstTreeMode, PpHirMode, PpMode, PpSourceMode};
use rustc_session::Session;
use rustc_span::symbol::Ident;
use rustc_span::FileName;
Expand Down Expand Up @@ -391,24 +391,29 @@ pub fn print_after_parsing(
) {
let (src, src_name) = get_source(input, sess);

let out = if let Source(s) = ppm {
// Silently ignores an identified node.
call_with_pp_support(&s, sess, None, move |annotation| {
debug!("pretty printing source code {:?}", s);
let sess = annotation.sess();
let parse = &sess.parse_sess;
pprust::print_crate(
sess.source_map(),
krate,
src_name,
src,
annotation.pp_ann(),
false,
parse.edition,
)
})
} else {
unreachable!()
let out = match ppm {
Source(s) => {
// Silently ignores an identified node.
call_with_pp_support(&s, sess, None, move |annotation| {
debug!("pretty printing source code {:?}", s);
let sess = annotation.sess();
let parse = &sess.parse_sess;
pprust::print_crate(
sess.source_map(),
krate,
src_name,
src,
annotation.pp_ann(),
false,
parse.edition,
)
})
}
AstTree(PpAstTreeMode::Normal) => {
debug!("pretty printing AST tree");
format!("{:#?}", krate)
}
_ => unreachable!(),
};

write_or_print(&out, ofile);
Expand Down Expand Up @@ -447,6 +452,11 @@ pub fn print_after_hir_lowering<'tcx>(
})
}

AstTree(PpAstTreeMode::Expanded) => {
debug!("pretty-printing expanded AST");
format!("{:#?}", krate)
}

Hir(s) => call_with_pp_support_hir(&s, tcx, move |annotation, krate| {
debug!("pretty printing HIR {:?}", s);
let sess = annotation.sess();
Expand Down
18 changes: 15 additions & 3 deletions compiler/rustc_session/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2066,6 +2066,8 @@ fn parse_pretty(
("expanded", _) => Source(PpSourceMode::Expanded),
("expanded,identified", _) => Source(PpSourceMode::ExpandedIdentified),
("expanded,hygiene", _) => Source(PpSourceMode::ExpandedHygiene),
("ast-tree", true) => AstTree(PpAstTreeMode::Normal),
("ast-tree,expanded", true) => AstTree(PpAstTreeMode::Expanded),
("hir", true) => Hir(PpHirMode::Normal),
("hir,identified", true) => Hir(PpHirMode::Identified),
("hir,typed", true) => Hir(PpHirMode::Typed),
Expand All @@ -2080,8 +2082,8 @@ fn parse_pretty(
"argument to `unpretty` must be one of `normal`, \
`expanded`, `identified`, `expanded,identified`, \
`expanded,hygiene`, `everybody_loops`, \
`hir`, `hir,identified`, `hir,typed`, `hir-tree`, \
`mir` or `mir-cfg`; got {}",
`ast-tree`, `ast-tree,expanded`, `hir`, `hir,identified`, \
`hir,typed`, `hir-tree`, `mir` or `mir-cfg`; got {}",
name
),
);
Expand Down Expand Up @@ -2233,6 +2235,14 @@ pub enum PpSourceMode {
ExpandedHygiene,
}

#[derive(Copy, Clone, PartialEq, Debug)]
pub enum PpAstTreeMode {
/// `-Zunpretty=ast`
Normal,
/// `-Zunpretty=ast,expanded`
Expanded,
}

#[derive(Copy, Clone, PartialEq, Debug)]
pub enum PpHirMode {
/// `-Zunpretty=hir`
Expand All @@ -2248,6 +2258,7 @@ pub enum PpMode {
/// Options that print the source code, i.e.
/// `--pretty` and `-Zunpretty=everybody_loops`
Source(PpSourceMode),
AstTree(PpAstTreeMode),
/// Options that print the HIR, i.e. `-Zunpretty=hir`
Hir(PpHirMode),
/// `-Zunpretty=hir-tree`
Expand All @@ -2263,9 +2274,10 @@ impl PpMode {
use PpMode::*;
use PpSourceMode::*;
match *self {
Source(Normal | Identified) => false,
Source(Normal | Identified) | AstTree(PpAstTreeMode::Normal) => false,

Source(Expanded | EveryBodyLoops | ExpandedIdentified | ExpandedHygiene)
| AstTree(PpAstTreeMode::Expanded)
| Hir(_)
| HirTree
| Mir
Expand Down
2 changes: 2 additions & 0 deletions compiler/rustc_session/src/options.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1158,6 +1158,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
`expanded`, `expanded,identified`,
`expanded,hygiene` (with internal representations),
`everybody_loops` (all function bodies replaced with `loop {}`),
`ast-tree` (raw AST before expansion),
`ast-tree,expanded` (raw AST after expansion),
`hir` (the HIR), `hir,identified`,
`hir,typed` (HIR with types for each node),
`hir-tree` (dump the raw HIR),
Expand Down

0 comments on commit e0ef270

Please sign in to comment.