mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-29 02:03:53 +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 crate::stable_hasher::{HashStable, StableHasher, StableOrd};
|
||||||
use std::borrow::Borrow;
|
use std::borrow::Borrow;
|
||||||
use std::cmp::Ordering;
|
use std::cmp::Ordering;
|
||||||
|
use std::fmt::Debug;
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::ops::{Bound, Index, IndexMut, RangeBounds};
|
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
|
/// 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
|
/// ranges of elements as a slice, and slices of already sorted elements can be
|
||||||
/// inserted efficiently.
|
/// 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> {
|
pub struct SortedMap<K, V> {
|
||||||
data: Vec<(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)]
|
#[cfg(test)]
|
||||||
mod tests;
|
mod tests;
|
||||||
|
@ -854,7 +854,11 @@ impl fmt::Debug for OwnerNodes<'_> {
|
|||||||
&self
|
&self
|
||||||
.nodes
|
.nodes
|
||||||
.iter_enumerated()
|
.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<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
)
|
)
|
||||||
.field("bodies", &self.bodies)
|
.field("bodies", &self.bodies)
|
||||||
@ -3615,3 +3619,13 @@ mod size_asserts {
|
|||||||
static_assert_size!(TyKind<'_>, 32);
|
static_assert_size!(TyKind<'_>, 32);
|
||||||
// tidy-alphabetical-end
|
// 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 crate::def_id::{DefId, DefIndex, LocalDefId, CRATE_DEF_ID};
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher, StableOrd, ToStableHashKey};
|
use rustc_data_structures::stable_hasher::{HashStable, StableHasher, StableOrd, ToStableHashKey};
|
||||||
use rustc_span::{def_id::DefPathHash, HashStableContext};
|
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)]
|
#[derive(Encodable, Decodable)]
|
||||||
pub struct OwnerId {
|
pub struct OwnerId {
|
||||||
pub def_id: LocalDefId,
|
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 {
|
impl From<OwnerId> for HirId {
|
||||||
fn from(owner: OwnerId) -> HirId {
|
fn from(owner: OwnerId) -> HirId {
|
||||||
HirId { owner, local_id: ItemLocalId::from_u32(0) }
|
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
|
/// 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
|
/// incremental compilation where we have to persist things through changes to
|
||||||
/// the code base.
|
/// the code base.
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)]
|
#[derive(Copy, Clone, PartialEq, Eq, Hash)]
|
||||||
#[derive(Encodable, Decodable, HashStable_Generic)]
|
#[derive(Encodable, Decodable, HashStable_Generic)]
|
||||||
#[rustc_pass_by_value]
|
#[rustc_pass_by_value]
|
||||||
pub struct HirId {
|
pub struct HirId {
|
||||||
@ -68,6 +75,14 @@ pub struct HirId {
|
|||||||
pub local_id: ItemLocalId,
|
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 {
|
impl HirId {
|
||||||
/// Signal local id which should never be used.
|
/// Signal local id which should never be used.
|
||||||
pub const INVALID: HirId =
|
pub const INVALID: HirId =
|
||||||
|
@ -32,12 +32,7 @@ Thir {
|
|||||||
kind: Scope {
|
kind: Scope {
|
||||||
region_scope: Node(2),
|
region_scope: Node(2),
|
||||||
lint_level: Explicit(
|
lint_level: Explicit(
|
||||||
HirId {
|
HirId(DefId(0:3 ~ thir_tree[8f1d]::main).2),
|
||||||
owner: OwnerId {
|
|
||||||
def_id: DefId(0:3 ~ thir_tree[8f1d]::main),
|
|
||||||
},
|
|
||||||
local_id: 2,
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
value: e0,
|
value: e0,
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user