mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 08:13:41 +00:00
Reduce HIR debug output
HIR debug output is currently very verbose, especially when used with the alternate (`#`) flag. This commit reduces the amount of noisy newlines by forcing a few small key types to stay on one line, which makes the output easier to read and scroll by. ``` $ rustc +after hello_world.rs -Zunpretty=hir-tree | wc -l 582 $ rustc +before hello_world.rs -Zunpretty=hir-tree | wc -l 932 ```
This commit is contained in:
parent
fb9dfa8cef
commit
e1787f5572
@ -1,6 +1,7 @@
|
||||
use crate::stable_hasher::{HashStable, StableHasher, StableOrd};
|
||||
use std::borrow::Borrow;
|
||||
use std::cmp::Ordering;
|
||||
use std::fmt::Debug;
|
||||
use std::mem;
|
||||
use std::ops::{Bound, Index, IndexMut, RangeBounds};
|
||||
|
||||
@ -16,7 +17,7 @@ pub use index_map::SortedIndexMultiMap;
|
||||
/// stores data in a more compact way. It also supports accessing contiguous
|
||||
/// ranges of elements as a slice, and slices of already sorted elements can be
|
||||
/// inserted efficiently.
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug, Encodable, Decodable)]
|
||||
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Encodable, Decodable)]
|
||||
pub struct SortedMap<K, V> {
|
||||
data: Vec<(K, V)>,
|
||||
}
|
||||
@ -314,5 +315,11 @@ impl<K: HashStable<CTX> + StableOrd, V: HashStable<CTX>, CTX> HashStable<CTX> fo
|
||||
}
|
||||
}
|
||||
|
||||
impl<K: Debug, V: Debug> Debug for SortedMap<K, V> {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.debug_map().entries(self.data.iter().map(|(a, b)| (a, b))).finish()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
@ -854,7 +854,11 @@ impl fmt::Debug for OwnerNodes<'_> {
|
||||
&self
|
||||
.nodes
|
||||
.iter_enumerated()
|
||||
.map(|(id, parented_node)| (id, parented_node.as_ref().map(|node| node.parent)))
|
||||
.map(|(id, parented_node)| {
|
||||
let parented_node = parented_node.as_ref().map(|node| node.parent);
|
||||
|
||||
debug_fn(move |f| write!(f, "({id:?}, {parented_node:?})"))
|
||||
})
|
||||
.collect::<Vec<_>>(),
|
||||
)
|
||||
.field("bodies", &self.bodies)
|
||||
@ -3615,3 +3619,13 @@ mod size_asserts {
|
||||
static_assert_size!(TyKind<'_>, 32);
|
||||
// tidy-alphabetical-end
|
||||
}
|
||||
|
||||
fn debug_fn(f: impl Fn(&mut fmt::Formatter<'_>) -> fmt::Result) -> impl fmt::Debug {
|
||||
struct DebugFn<F>(F);
|
||||
impl<F: Fn(&mut fmt::Formatter<'_>) -> fmt::Result> fmt::Debug for DebugFn<F> {
|
||||
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
(self.0)(fmt)
|
||||
}
|
||||
}
|
||||
DebugFn(f)
|
||||
}
|
||||
|
@ -1,14 +1,21 @@
|
||||
use crate::def_id::{DefId, DefIndex, LocalDefId, CRATE_DEF_ID};
|
||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher, StableOrd, ToStableHashKey};
|
||||
use rustc_span::{def_id::DefPathHash, HashStableContext};
|
||||
use std::fmt;
|
||||
use std::fmt::{self, Debug};
|
||||
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||
#[derive(Encodable, Decodable)]
|
||||
pub struct OwnerId {
|
||||
pub def_id: LocalDefId,
|
||||
}
|
||||
|
||||
impl Debug for OwnerId {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// Example: DefId(0:1 ~ aa[7697]::{use#0})
|
||||
Debug::fmt(&self.def_id, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<OwnerId> for HirId {
|
||||
fn from(owner: OwnerId) -> HirId {
|
||||
HirId { owner, local_id: ItemLocalId::from_u32(0) }
|
||||
@ -60,7 +67,7 @@ impl<CTX: HashStableContext> ToStableHashKey<CTX> for OwnerId {
|
||||
/// the `local_id` part of the `HirId` changing, which is a very useful property in
|
||||
/// incremental compilation where we have to persist things through changes to
|
||||
/// the code base.
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
|
||||
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||
#[derive(Encodable, Decodable, HashStable_Generic)]
|
||||
#[rustc_pass_by_value]
|
||||
pub struct HirId {
|
||||
@ -68,6 +75,14 @@ pub struct HirId {
|
||||
pub local_id: ItemLocalId,
|
||||
}
|
||||
|
||||
impl Debug for HirId {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
// Example: HirId(DefId(0:1 ~ aa[7697]::{use#0}).10)
|
||||
// Don't use debug_tuple to always keep this on one line.
|
||||
write!(f, "HirId({:?}.{:?})", self.owner, self.local_id)
|
||||
}
|
||||
}
|
||||
|
||||
impl HirId {
|
||||
/// Signal local id which should never be used.
|
||||
pub const INVALID: HirId =
|
||||
|
@ -32,12 +32,7 @@ Thir {
|
||||
kind: Scope {
|
||||
region_scope: Node(2),
|
||||
lint_level: Explicit(
|
||||
HirId {
|
||||
owner: OwnerId {
|
||||
def_id: DefId(0:3 ~ thir_tree[8f1d]::main),
|
||||
},
|
||||
local_id: 2,
|
||||
},
|
||||
HirId(DefId(0:3 ~ thir_tree[8f1d]::main).2),
|
||||
),
|
||||
value: e0,
|
||||
},
|
||||
|
Loading…
Reference in New Issue
Block a user