Skip to content

Commit 7f32f62

Browse files
committed
Auto merge of #82304 - LeSeulArtichaut:unpretty-ast, r=spastorino
Add `-Z unpretty` flags for the AST Implements rust-lang/compiler-team#408. Builds on #82269, but if that PR is rejected or stalls out, I can implement this without #82269. cc rust-lang/rustc-dev-guide#1062
2 parents 6f7673d + 6111445 commit 7f32f62

File tree

3 files changed

+46
-22
lines changed

3 files changed

+46
-22
lines changed

compiler/rustc_driver/src/pretty.rs

+29-19
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use rustc_hir_pretty as pprust_hir;
99
use rustc_middle::hir::map as hir_map;
1010
use rustc_middle::ty::{self, TyCtxt};
1111
use rustc_mir::util::{write_mir_graphviz, write_mir_pretty};
12-
use rustc_session::config::{Input, PpHirMode, PpMode, PpSourceMode};
12+
use rustc_session::config::{Input, PpAstTreeMode, PpHirMode, PpMode, PpSourceMode};
1313
use rustc_session::Session;
1414
use rustc_span::symbol::Ident;
1515
use rustc_span::FileName;
@@ -391,24 +391,29 @@ pub fn print_after_parsing(
391391
) {
392392
let (src, src_name) = get_source(input, sess);
393393

394-
let out = if let Source(s) = ppm {
395-
// Silently ignores an identified node.
396-
call_with_pp_support(&s, sess, None, move |annotation| {
397-
debug!("pretty printing source code {:?}", s);
398-
let sess = annotation.sess();
399-
let parse = &sess.parse_sess;
400-
pprust::print_crate(
401-
sess.source_map(),
402-
krate,
403-
src_name,
404-
src,
405-
annotation.pp_ann(),
406-
false,
407-
parse.edition,
408-
)
409-
})
410-
} else {
411-
unreachable!()
394+
let out = match ppm {
395+
Source(s) => {
396+
// Silently ignores an identified node.
397+
call_with_pp_support(&s, sess, None, move |annotation| {
398+
debug!("pretty printing source code {:?}", s);
399+
let sess = annotation.sess();
400+
let parse = &sess.parse_sess;
401+
pprust::print_crate(
402+
sess.source_map(),
403+
krate,
404+
src_name,
405+
src,
406+
annotation.pp_ann(),
407+
false,
408+
parse.edition,
409+
)
410+
})
411+
}
412+
AstTree(PpAstTreeMode::Normal) => {
413+
debug!("pretty printing AST tree");
414+
format!("{:#?}", krate)
415+
}
416+
_ => unreachable!(),
412417
};
413418

414419
write_or_print(&out, ofile);
@@ -447,6 +452,11 @@ pub fn print_after_hir_lowering<'tcx>(
447452
})
448453
}
449454

455+
AstTree(PpAstTreeMode::Expanded) => {
456+
debug!("pretty-printing expanded AST");
457+
format!("{:#?}", krate)
458+
}
459+
450460
Hir(s) => call_with_pp_support_hir(&s, tcx, move |annotation, krate| {
451461
debug!("pretty printing HIR {:?}", s);
452462
let sess = annotation.sess();

compiler/rustc_session/src/config.rs

+15-3
Original file line numberDiff line numberDiff line change
@@ -2066,6 +2066,8 @@ fn parse_pretty(
20662066
("expanded", _) => Source(PpSourceMode::Expanded),
20672067
("expanded,identified", _) => Source(PpSourceMode::ExpandedIdentified),
20682068
("expanded,hygiene", _) => Source(PpSourceMode::ExpandedHygiene),
2069+
("ast-tree", true) => AstTree(PpAstTreeMode::Normal),
2070+
("ast-tree,expanded", true) => AstTree(PpAstTreeMode::Expanded),
20692071
("hir", true) => Hir(PpHirMode::Normal),
20702072
("hir,identified", true) => Hir(PpHirMode::Identified),
20712073
("hir,typed", true) => Hir(PpHirMode::Typed),
@@ -2080,8 +2082,8 @@ fn parse_pretty(
20802082
"argument to `unpretty` must be one of `normal`, \
20812083
`expanded`, `identified`, `expanded,identified`, \
20822084
`expanded,hygiene`, `everybody_loops`, \
2083-
`hir`, `hir,identified`, `hir,typed`, `hir-tree`, \
2084-
`mir` or `mir-cfg`; got {}",
2085+
`ast-tree`, `ast-tree,expanded`, `hir`, `hir,identified`, \
2086+
`hir,typed`, `hir-tree`, `mir` or `mir-cfg`; got {}",
20852087
name
20862088
),
20872089
);
@@ -2233,6 +2235,14 @@ pub enum PpSourceMode {
22332235
ExpandedHygiene,
22342236
}
22352237

2238+
#[derive(Copy, Clone, PartialEq, Debug)]
2239+
pub enum PpAstTreeMode {
2240+
/// `-Zunpretty=ast`
2241+
Normal,
2242+
/// `-Zunpretty=ast,expanded`
2243+
Expanded,
2244+
}
2245+
22362246
#[derive(Copy, Clone, PartialEq, Debug)]
22372247
pub enum PpHirMode {
22382248
/// `-Zunpretty=hir`
@@ -2248,6 +2258,7 @@ pub enum PpMode {
22482258
/// Options that print the source code, i.e.
22492259
/// `--pretty` and `-Zunpretty=everybody_loops`
22502260
Source(PpSourceMode),
2261+
AstTree(PpAstTreeMode),
22512262
/// Options that print the HIR, i.e. `-Zunpretty=hir`
22522263
Hir(PpHirMode),
22532264
/// `-Zunpretty=hir-tree`
@@ -2263,9 +2274,10 @@ impl PpMode {
22632274
use PpMode::*;
22642275
use PpSourceMode::*;
22652276
match *self {
2266-
Source(Normal | Identified) => false,
2277+
Source(Normal | Identified) | AstTree(PpAstTreeMode::Normal) => false,
22672278

22682279
Source(Expanded | EveryBodyLoops | ExpandedIdentified | ExpandedHygiene)
2280+
| AstTree(PpAstTreeMode::Expanded)
22692281
| Hir(_)
22702282
| HirTree
22712283
| Mir

compiler/rustc_session/src/options.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1158,6 +1158,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options,
11581158
`expanded`, `expanded,identified`,
11591159
`expanded,hygiene` (with internal representations),
11601160
`everybody_loops` (all function bodies replaced with `loop {}`),
1161+
`ast-tree` (raw AST before expansion),
1162+
`ast-tree,expanded` (raw AST after expansion),
11611163
`hir` (the HIR), `hir,identified`,
11621164
`hir,typed` (HIR with types for each node),
11631165
`hir-tree` (dump the raw HIR),

0 commit comments

Comments
 (0)