From f29d3034dc162055d3d69b4987a1ccf8e1f7fdce Mon Sep 17 00:00:00 2001 From: Vincent Esche Date: Tue, 14 Nov 2023 15:16:46 +0100 Subject: [PATCH 1/4] Add `ItemKind` type, extracting logic from `Item.kind_display_name()` --- src/graph/node.rs | 6 +- src/graph/printer.rs | 6 +- src/item.rs | 59 ++--------- src/item/kind.rs | 229 +++++++++++++++++++++++++++++++++++++++++++ src/tree/node.rs | 6 +- src/tree/printer.rs | 4 +- 6 files changed, 243 insertions(+), 67 deletions(-) create mode 100644 src/item/kind.rs diff --git a/src/graph/node.rs b/src/graph/node.rs index 0886445f..2b99720e 100644 --- a/src/graph/node.rs +++ b/src/graph/node.rs @@ -2,8 +2,6 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -use ra_ap_ide_db::RootDatabase; - use crate::item::Item; #[derive(Clone, PartialEq, Debug)] @@ -20,7 +18,7 @@ impl Node { self.item.display_path() } - pub fn kind_display_name(&self, db: &RootDatabase) -> Option { - self.item.kind_display_name(db) + pub fn kind_display_name(&self) -> Option { + self.item.kind_display_name() } } diff --git a/src/graph/printer.rs b/src/graph/printer.rs index 1c9d4eaa..6e44c883 100644 --- a/src/graph/printer.rs +++ b/src/graph/printer.rs @@ -134,7 +134,7 @@ impl<'a> Printer<'a> { let id = node.item.path.join("::"); let kind = node - .kind_display_name(self.db) + .kind_display_name() .unwrap_or_else(|| "orphan".to_owned()); let label = self.node_label(node).unwrap(); @@ -215,9 +215,7 @@ impl<'a> Printer<'a> { None => Some("orphan".to_owned()), }; - let kind = node - .kind_display_name(self.db) - .unwrap_or_else(|| "mod".to_owned()); + let kind = node.kind_display_name().unwrap_or_else(|| "mod".to_owned()); if let Some(visibility) = visibility { write!(f, "{visibility} ")?; diff --git a/src/item.rs b/src/item.rs index 245915b2..77cfc55b 100644 --- a/src/item.rs +++ b/src/item.rs @@ -4,7 +4,6 @@ use std::path::PathBuf; -use hir::ModuleDef; use ra_ap_hir::{self as hir}; use ra_ap_ide_db::RootDatabase; use ra_ap_vfs::Vfs; @@ -14,6 +13,7 @@ use crate::graph::util; use self::{attr::ItemAttrs, visibility::ItemVisibility}; pub(crate) mod attr; +pub(crate) mod kind; pub(crate) mod visibility; #[derive(Clone, PartialEq, Debug)] @@ -24,6 +24,7 @@ pub struct Item { pub hir: Option, pub visibility: Option, pub attrs: attr::ItemAttrs, + pub kind: Option, } impl Item { @@ -64,6 +65,8 @@ impl Item { ItemAttrs { cfgs, test } }; + let kind = hir.map(|hir| kind::ItemKind::new(hir, db)); + Self { crate_name, path, @@ -71,6 +74,7 @@ impl Item { hir, visibility, attrs, + kind, } } @@ -85,57 +89,8 @@ impl Item { self.path.join("::") } - pub fn kind_display_name(&self, db: &RootDatabase) -> Option { - let Some(module_def) = self.hir else { - return None; - }; - - match module_def { - ModuleDef::Module(module_def) => { - if module_def.is_crate_root() { - Some("crate".to_owned()) - } else { - Some("mod".to_owned()) - } - } - ModuleDef::Function(function_def) => { - let mut keywords = vec![]; - - if function_def.is_const(db) { - keywords.push("const"); - } - if function_def.is_async(db) { - keywords.push("async"); - } - if function_def.is_unsafe_to_call(db) { - keywords.push("unsafe"); - } - - keywords.push("fn"); - - Some(keywords.join(" ")) - } - ModuleDef::Adt(adt_def) => match adt_def { - hir::Adt::Struct(_) => Some("struct".to_owned()), - hir::Adt::Union(_) => Some("union".to_owned()), - hir::Adt::Enum(_) => Some("enum".to_owned()), - }, - ModuleDef::Variant(_) => Some("variant".to_owned()), - ModuleDef::Const(_) => Some("const".to_owned()), - ModuleDef::Static(_) => Some("static".to_owned()), - ModuleDef::Trait(trait_def) => { - let mut keywords = vec![]; - if trait_def.is_unsafe(db) { - keywords.push("unsafe"); - } - keywords.push("trait"); - Some(keywords.join(" ")) - } - ModuleDef::TraitAlias(_) => Some("trait".to_owned()), - ModuleDef::TypeAlias(_) => Some("type".to_owned()), - ModuleDef::BuiltinType(_) => Some("builtin".to_owned()), - ModuleDef::Macro(_) => Some("macro".to_owned()), - } + pub fn kind_display_name(&self) -> Option { + self.kind.as_ref().map(|kind| kind.to_string()) } pub(crate) fn is_crate(&self, _db: &RootDatabase) -> bool { diff --git a/src/item/kind.rs b/src/item/kind.rs new file mode 100644 index 00000000..c215545b --- /dev/null +++ b/src/item/kind.rs @@ -0,0 +1,229 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use std::{cmp::Ordering, fmt}; + +use ra_ap_hir::{self as hir, ModuleDef}; +use ra_ap_ide_db::RootDatabase; + +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum ItemKind { + Module { + is_crate_root: bool, + }, + Function { + is_const: bool, + is_async: bool, + is_unsafe_to_call: bool, + }, + Struct, + Union, + Enum, + Variant, + Const, + Static, + Trait { + is_unsafe: bool, + }, + TraitAlias, + TypeAlias, + BuiltinType, + Macro, +} + +impl ItemKind { + pub fn new(hir: hir::ModuleDef, db: &RootDatabase) -> Self { + match hir { + ModuleDef::Module(module_def) => Self::Module { + is_crate_root: module_def.is_crate_root(), + }, + ModuleDef::Function(function_def) => Self::Function { + is_const: function_def.is_const(db), + is_async: function_def.is_async(db), + is_unsafe_to_call: function_def.is_unsafe_to_call(db), + }, + ModuleDef::Adt(adt_def) => match adt_def { + hir::Adt::Struct(_) => Self::Struct, + hir::Adt::Union(_) => Self::Union, + hir::Adt::Enum(_) => Self::Enum, + }, + ModuleDef::Variant(_) => Self::Variant, + ModuleDef::Const(_) => Self::Const, + ModuleDef::Static(_) => Self::Static, + ModuleDef::Trait(trait_def) => Self::Trait { + is_unsafe: trait_def.is_unsafe(db), + }, + ModuleDef::TraitAlias(_) => Self::TraitAlias, + ModuleDef::TypeAlias(_) => Self::TypeAlias, + ModuleDef::BuiltinType(_) => Self::BuiltinType, + ModuleDef::Macro(_) => Self::Macro, + } + } + + fn numerical_order(&self) -> isize { + match self { + ItemKind::Module { .. } => 0, + ItemKind::Trait { .. } => 1, + ItemKind::TraitAlias => 1, + ItemKind::TypeAlias => 2, + ItemKind::Struct => 3, + ItemKind::Enum => 4, + ItemKind::Variant => 5, + ItemKind::Union => 6, + ItemKind::BuiltinType => 7, + ItemKind::Function { .. } => 8, + ItemKind::Const => 9, + ItemKind::Static => 10, + ItemKind::Macro => 11, + } + } +} + +impl PartialOrd for ItemKind { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for ItemKind { + fn cmp(&self, other: &Self) -> Ordering { + let ord = self.numerical_order().cmp(&other.numerical_order()); + + if !ord.is_eq() { + return ord; + } + + match (self, other) { + ( + Self::Module { + is_crate_root: lhs_is_crate_root, + }, + Self::Module { + is_crate_root: rhs_is_crate_root, + }, + ) => { + // We want crates to be ordered first: + let is_crate_root_ord = lhs_is_crate_root.cmp(rhs_is_crate_root).reverse(); + if !is_crate_root_ord.is_eq() { + return is_crate_root_ord; + } + + Ordering::Equal + } + ( + Self::Function { + is_const: lhs_is_const, + is_async: lhs_is_async, + is_unsafe_to_call: lhs_is_unsafe_to_call, + }, + Self::Function { + is_const: rhs_is_const, + is_async: rhs_is_async, + is_unsafe_to_call: rhs_is_unsafe_to_call, + }, + ) => { + // We want const functions to be ordered first: + let is_const_ord = lhs_is_const.cmp(rhs_is_const).reverse(); + if !is_const_ord.is_eq() { + return is_const_ord; + } + + // We want async functions to be ordered second: + let is_async_ord = lhs_is_async.cmp(rhs_is_async).reverse(); + if !is_async_ord.is_eq() { + return is_async_ord; + } + + // We want unsafe functions to be ordered third: + let is_unsafe_to_call_ord = + lhs_is_unsafe_to_call.cmp(rhs_is_unsafe_to_call).reverse(); + if !is_unsafe_to_call_ord.is_eq() { + return is_unsafe_to_call_ord; + } + + Ordering::Equal + } + (Self::Struct, _) => ord, + (Self::Union, _) => ord, + (Self::Enum, _) => ord, + (Self::Variant, _) => ord, + (Self::Const, _) => ord, + (Self::Static, _) => ord, + ( + Self::Trait { + is_unsafe: lhs_is_unsafe, + }, + Self::Trait { + is_unsafe: rhs_is_unsafe, + }, + ) => { + // We want unsafe traits to be ordered last: + let is_unsafe_ord = lhs_is_unsafe.cmp(rhs_is_unsafe).reverse(); + if !is_unsafe_ord.is_eq() { + return is_unsafe_ord; + } + + Ordering::Equal + } + (Self::TraitAlias, _) => ord, + (Self::TypeAlias, _) => ord, + (Self::BuiltinType, _) => ord, + (Self::Macro, _) => ord, + _ => ord, + } + } +} + +impl fmt::Display for ItemKind { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::Module { is_crate_root } => { + if *is_crate_root { + write!(f, "crate") + } else { + write!(f, "mod") + } + } + Self::Function { + is_const, + is_async, + is_unsafe_to_call, + } => { + let mut keywords = vec![]; + + if *is_const { + keywords.push("const"); + } + if *is_async { + keywords.push("async"); + } + if *is_unsafe_to_call { + keywords.push("unsafe"); + } + + keywords.push("fn"); + + write!(f, "{}", keywords.join(" ")) + } + Self::Struct => write!(f, "struct"), + Self::Union => write!(f, "union"), + Self::Enum => write!(f, "enum"), + Self::Variant => write!(f, "variant"), + Self::Const => write!(f, "const"), + Self::Static => write!(f, "static"), + Self::Trait { is_unsafe } => { + let mut keywords = vec![]; + if *is_unsafe { + keywords.push("unsafe"); + } + keywords.push("trait"); + write!(f, "{}", keywords.join(" ")) + } + Self::TraitAlias => write!(f, "trait"), + Self::TypeAlias => write!(f, "type"), + Self::BuiltinType => write!(f, "builtin"), + Self::Macro => write!(f, "macro"), + } + } +} diff --git a/src/tree/node.rs b/src/tree/node.rs index 2564dfd2..617872ec 100644 --- a/src/tree/node.rs +++ b/src/tree/node.rs @@ -2,8 +2,6 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -use ra_ap_ide_db::RootDatabase; - use crate::item::Item; #[derive(Clone, PartialEq, Debug)] @@ -27,7 +25,7 @@ impl Node { self.item.display_name() } - pub fn kind_display_name(&self, db: &RootDatabase) -> Option { - self.item.kind_display_name(db) + pub fn kind_display_name(&self) -> Option { + self.item.kind_display_name() } } diff --git a/src/tree/printer.rs b/src/tree/printer.rs index 2aea0917..6a507cb7 100644 --- a/src/tree/printer.rs +++ b/src/tree/printer.rs @@ -89,9 +89,7 @@ impl<'a> Printer<'a> { fn fmt_node_kind(&self, f: &mut dyn fmt::Write, node: &Node) -> fmt::Result { let kind_style = self.kind_style(); - let display_name = node - .kind_display_name(self.db) - .unwrap_or_else(|| "mod".to_owned()); + let display_name = node.kind_display_name().unwrap_or_else(|| "mod".to_owned()); let kind = kind_style.paint(display_name); write!(f, "{kind}")?; From 4e69aae2d6c272024f8edc2a87d395347c1a13f3 Mon Sep 17 00:00:00 2001 From: Vincent Esche Date: Tue, 14 Nov 2023 14:51:11 +0100 Subject: [PATCH 2/4] Simplify implementation of `LayoutAlgorithm.to_string()` --- src/graph/options.rs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/graph/options.rs b/src/graph/options.rs index 08d4d144..58304129 100644 --- a/src/graph/options.rs +++ b/src/graph/options.rs @@ -39,14 +39,15 @@ impl FromStr for LayoutAlgorithm { impl ToString for LayoutAlgorithm { fn to_string(&self) -> String { match self { - Self::None => "none".to_owned(), - Self::Dot => "dot".to_owned(), - Self::Neato => "neato".to_owned(), - Self::Twopi => "twopi".to_owned(), - Self::Circo => "circo".to_owned(), - Self::Fdp => "fdp".to_owned(), - Self::Sfdp => "sfdp".to_owned(), + Self::None => "none", + Self::Dot => "dot", + Self::Neato => "neato", + Self::Twopi => "twopi", + Self::Circo => "circo", + Self::Fdp => "fdp", + Self::Sfdp => "sfdp", } + .to_owned() } } From d3a29537c349f6e9fcaa448849a9b2150bddae3a Mon Sep 17 00:00:00 2001 From: Vincent Esche Date: Tue, 14 Nov 2023 15:12:30 +0100 Subject: [PATCH 3/4] Add `crate::kinds` module to `smoke` test crate --- tests/projects/smoke/src/lib.rs | 26 +++++++++++++++++++ .../generate_graph__colors__ansi__smoke.snap | 4 +++ .../generate_graph__colors__plain__smoke.snap | 4 +++ ...erate_graph__colors__truecolor__smoke.snap | 4 +++ .../snapshots/generate_graph__fns__smoke.snap | 12 +++++++++ ...ate_graph__focus_on__glob_path__smoke.snap | 4 +++ ...ate_graph__focus_on__self_path__smoke.snap | 4 +++ ...e_graph__focus_on__simple_path__smoke.snap | 4 +++ ...generate_graph__focus_on__tree__smoke.snap | 4 +++ .../generate_graph__tests__smoke.snap | 4 +++ .../generate_graph__traits__smoke.snap | 8 ++++++ .../generate_graph__types__smoke.snap | 14 ++++++++++ ...e_graph__types_with_no_modules__smoke.snap | 10 +++++++ .../generate_graph__uses__smoke.snap | 4 +++ ...erate_graph__uses_with_externs__smoke.snap | 4 +++ .../generate_tree__colors__plain__smoke.snap | 2 ++ .../snapshots/generate_tree__fns__smoke.snap | 6 +++++ ...rate_tree__focus_on__glob_path__smoke.snap | 2 ++ ...rate_tree__focus_on__self_path__smoke.snap | 2 ++ ...te_tree__focus_on__simple_path__smoke.snap | 2 ++ .../generate_tree__focus_on__tree__smoke.snap | 2 ++ .../generate_tree__orphans__smoke.snap | 2 ++ .../generate_tree__tests__smoke.snap | 2 ++ .../generate_tree__traits__smoke.snap | 4 +++ .../generate_tree__types__smoke.snap | 7 +++++ 25 files changed, 141 insertions(+) diff --git a/tests/projects/smoke/src/lib.rs b/tests/projects/smoke/src/lib.rs index 0d37f8f2..9100e57e 100644 --- a/tests/projects/smoke/src/lib.rs +++ b/tests/projects/smoke/src/lib.rs @@ -112,6 +112,32 @@ mod visibility { pub(super) fn pub_super() {} fn pub_private() {} } + + mod kinds { + mod Module {} + + struct Struct {} + enum Enum {} + union Union {} + + trait Trait {} + unsafe trait UnsafeTrait {} + + type TraitAlias = Trait; + type TypeAlias = Struct; + + fn Function() {} + const fn ConstFunction() {} + async fn AsyncFunction() {} + unsafe fn UnsafeFunction() {} + + const const_binding: bool = false; + static static_binding: bool = false; + + macro_rules! Macro { + () => {}; + } + } } } diff --git a/tests/snapshots/generate_graph__colors__ansi__smoke.snap b/tests/snapshots/generate_graph__colors__ansi__smoke.snap index ef65a550..91c76f52 100644 --- a/tests/snapshots/generate_graph__colors__ansi__smoke.snap +++ b/tests/snapshots/generate_graph__colors__ansi__smoke.snap @@ -56,6 +56,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -87,10 +89,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__colors__plain__smoke.snap b/tests/snapshots/generate_graph__colors__plain__smoke.snap index ef65a550..91c76f52 100644 --- a/tests/snapshots/generate_graph__colors__plain__smoke.snap +++ b/tests/snapshots/generate_graph__colors__plain__smoke.snap @@ -56,6 +56,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -87,10 +89,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__colors__truecolor__smoke.snap b/tests/snapshots/generate_graph__colors__truecolor__smoke.snap index ef65a550..91c76f52 100644 --- a/tests/snapshots/generate_graph__colors__truecolor__smoke.snap +++ b/tests/snapshots/generate_graph__colors__truecolor__smoke.snap @@ -56,6 +56,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -87,10 +89,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__fns__smoke.snap b/tests/snapshots/generate_graph__fns__smoke.snap index 36aff97d..514ea7a1 100644 --- a/tests/snapshots/generate_graph__fns__smoke.snap +++ b/tests/snapshots/generate_graph__fns__smoke.snap @@ -61,6 +61,12 @@ digraph { "smoke::visibility::dummy::fns::pub_private" [label="pub(self) fn|visibility::dummy::fns::pub_private", fillcolor="#db5367"]; // "fn" node "smoke::visibility::dummy::fns::pub_public" [label="pub fn|visibility::dummy::fns::pub_public", fillcolor="#81c169"]; // "fn" node "smoke::visibility::dummy::fns::pub_super" [label="pub(super) fn|visibility::dummy::fns::pub_super", fillcolor="#fe9454"]; // "fn" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::AsyncFunction" [label="pub(self) async fn|visibility::dummy::kinds::AsyncFunction", fillcolor="#db5367"]; // "async fn" node + "smoke::visibility::dummy::kinds::ConstFunction" [label="pub(self) const fn|visibility::dummy::kinds::ConstFunction", fillcolor="#db5367"]; // "const fn" node + "smoke::visibility::dummy::kinds::Function" [label="pub(self) fn|visibility::dummy::kinds::Function", fillcolor="#db5367"]; // "fn" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::UnsafeFunction" [label="pub(self) unsafe fn|visibility::dummy::kinds::UnsafeFunction", fillcolor="#db5367"]; // "unsafe fn" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -92,6 +98,7 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge @@ -101,6 +108,11 @@ digraph { "smoke::visibility::dummy::fns" -> "smoke::visibility::dummy::fns::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::fns" -> "smoke::visibility::dummy::fns::pub_public" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::fns" -> "smoke::visibility::dummy::fns::pub_super" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::AsyncFunction" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::ConstFunction" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Function" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::UnsafeFunction" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__focus_on__glob_path__smoke.snap b/tests/snapshots/generate_graph__focus_on__glob_path__smoke.snap index f1e73c80..3b25bf01 100644 --- a/tests/snapshots/generate_graph__focus_on__glob_path__smoke.snap +++ b/tests/snapshots/generate_graph__focus_on__glob_path__smoke.snap @@ -41,6 +41,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -57,10 +59,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__focus_on__self_path__smoke.snap b/tests/snapshots/generate_graph__focus_on__self_path__smoke.snap index f1e73c80..3b25bf01 100644 --- a/tests/snapshots/generate_graph__focus_on__self_path__smoke.snap +++ b/tests/snapshots/generate_graph__focus_on__self_path__smoke.snap @@ -41,6 +41,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -57,10 +59,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__focus_on__simple_path__smoke.snap b/tests/snapshots/generate_graph__focus_on__simple_path__smoke.snap index f1e73c80..3b25bf01 100644 --- a/tests/snapshots/generate_graph__focus_on__simple_path__smoke.snap +++ b/tests/snapshots/generate_graph__focus_on__simple_path__smoke.snap @@ -41,6 +41,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -57,10 +59,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__focus_on__tree__smoke.snap b/tests/snapshots/generate_graph__focus_on__tree__smoke.snap index f1e73c80..3b25bf01 100644 --- a/tests/snapshots/generate_graph__focus_on__tree__smoke.snap +++ b/tests/snapshots/generate_graph__focus_on__tree__smoke.snap @@ -41,6 +41,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -57,10 +59,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__tests__smoke.snap b/tests/snapshots/generate_graph__tests__smoke.snap index 388def66..1032f351 100644 --- a/tests/snapshots/generate_graph__tests__smoke.snap +++ b/tests/snapshots/generate_graph__tests__smoke.snap @@ -57,6 +57,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -89,10 +91,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__traits__smoke.snap b/tests/snapshots/generate_graph__traits__smoke.snap index 370e0273..31c784b0 100644 --- a/tests/snapshots/generate_graph__traits__smoke.snap +++ b/tests/snapshots/generate_graph__traits__smoke.snap @@ -56,6 +56,10 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Trait" [label="pub(self) trait|visibility::dummy::kinds::Trait", fillcolor="#db5367"]; // "trait" node + "smoke::visibility::dummy::kinds::UnsafeTrait" [label="pub(self) unsafe trait|visibility::dummy::kinds::UnsafeTrait", fillcolor="#db5367"]; // "unsafe trait" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -97,10 +101,14 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Trait" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::UnsafeTrait" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__types__smoke.snap b/tests/snapshots/generate_graph__types__smoke.snap index f52d2f0e..8f29b8b7 100644 --- a/tests/snapshots/generate_graph__types__smoke.snap +++ b/tests/snapshots/generate_graph__types__smoke.snap @@ -69,6 +69,13 @@ digraph { "smoke::visibility::dummy::enums::PubPublic" [label="pub enum|visibility::dummy::enums::PubPublic", fillcolor="#81c169"]; // "enum" node "smoke::visibility::dummy::enums::PubSuper" [label="pub(super) enum|visibility::dummy::enums::PubSuper", fillcolor="#fe9454"]; // "enum" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Enum" [label="pub(self) enum|visibility::dummy::kinds::Enum", fillcolor="#db5367"]; // "enum" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Struct" [label="pub(self) struct|visibility::dummy::kinds::Struct", fillcolor="#db5367"]; // "struct" node + "smoke::visibility::dummy::kinds::TraitAlias" [label="pub(self) type|visibility::dummy::kinds::TraitAlias", fillcolor="#db5367"]; // "type" node + "smoke::visibility::dummy::kinds::TypeAlias" [label="pub(self) type|visibility::dummy::kinds::TypeAlias", fillcolor="#db5367"]; // "type" node + "smoke::visibility::dummy::kinds::Union" [label="pub(self) union|visibility::dummy::kinds::Union", fillcolor="#db5367"]; // "union" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -118,6 +125,7 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge @@ -127,6 +135,12 @@ digraph { "smoke::visibility::dummy::enums" -> "smoke::visibility::dummy::enums::PubPrivate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::enums" -> "smoke::visibility::dummy::enums::PubPublic" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::enums" -> "smoke::visibility::dummy::enums::PubSuper" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Enum" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Struct" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::TraitAlias" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::TypeAlias" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Union" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__types_with_no_modules__smoke.snap b/tests/snapshots/generate_graph__types_with_no_modules__smoke.snap index 57ddacf8..9ff13b98 100644 --- a/tests/snapshots/generate_graph__types_with_no_modules__smoke.snap +++ b/tests/snapshots/generate_graph__types_with_no_modules__smoke.snap @@ -50,6 +50,11 @@ digraph { "smoke::visibility::dummy::enums::PubPrivate" [label="pub(self) enum|visibility::dummy::enums::PubPrivate", fillcolor="#db5367"]; // "enum" node "smoke::visibility::dummy::enums::PubPublic" [label="pub enum|visibility::dummy::enums::PubPublic", fillcolor="#81c169"]; // "enum" node "smoke::visibility::dummy::enums::PubSuper" [label="pub(super) enum|visibility::dummy::enums::PubSuper", fillcolor="#fe9454"]; // "enum" node + "smoke::visibility::dummy::kinds::Enum" [label="pub(self) enum|visibility::dummy::kinds::Enum", fillcolor="#db5367"]; // "enum" node + "smoke::visibility::dummy::kinds::Struct" [label="pub(self) struct|visibility::dummy::kinds::Struct", fillcolor="#db5367"]; // "struct" node + "smoke::visibility::dummy::kinds::TraitAlias" [label="pub(self) type|visibility::dummy::kinds::TraitAlias", fillcolor="#db5367"]; // "type" node + "smoke::visibility::dummy::kinds::TypeAlias" [label="pub(self) type|visibility::dummy::kinds::TypeAlias", fillcolor="#db5367"]; // "type" node + "smoke::visibility::dummy::kinds::Union" [label="pub(self) union|visibility::dummy::kinds::Union", fillcolor="#db5367"]; // "union" node "smoke::visibility::dummy::structs::PubCrate" [label="pub(crate) struct|visibility::dummy::structs::PubCrate", fillcolor="#f8c04c"]; // "struct" node "smoke::visibility::dummy::structs::PubModule" [label="pub(in crate::visibility) struct|visibility::dummy::structs::PubModule", fillcolor="#fe9454"]; // "struct" node "smoke::visibility::dummy::structs::PubPrivate" [label="pub(self) struct|visibility::dummy::structs::PubPrivate", fillcolor="#db5367"]; // "struct" node @@ -74,6 +79,11 @@ digraph { "smoke" -> "smoke::visibility::dummy::enums::PubPrivate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke" -> "smoke::visibility::dummy::enums::PubPublic" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke" -> "smoke::visibility::dummy::enums::PubSuper" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke" -> "smoke::visibility::dummy::kinds::Enum" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke" -> "smoke::visibility::dummy::kinds::Struct" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke" -> "smoke::visibility::dummy::kinds::TraitAlias" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke" -> "smoke::visibility::dummy::kinds::TypeAlias" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke" -> "smoke::visibility::dummy::kinds::Union" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke" -> "smoke::visibility::dummy::structs::PubCrate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke" -> "smoke::visibility::dummy::structs::PubModule" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke" -> "smoke::visibility::dummy::structs::PubPrivate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__uses__smoke.snap b/tests/snapshots/generate_graph__uses__smoke.snap index b5f86822..877d27fa 100644 --- a/tests/snapshots/generate_graph__uses__smoke.snap +++ b/tests/snapshots/generate_graph__uses__smoke.snap @@ -56,6 +56,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -88,10 +90,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_graph__uses_with_externs__smoke.snap b/tests/snapshots/generate_graph__uses_with_externs__smoke.snap index c50f2537..73614582 100644 --- a/tests/snapshots/generate_graph__uses_with_externs__smoke.snap +++ b/tests/snapshots/generate_graph__uses_with_externs__smoke.snap @@ -56,6 +56,8 @@ digraph { "smoke::visibility::dummy" [label="pub(self) mod|smoke::visibility::dummy", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::enums" [label="pub(self) mod|smoke::visibility::dummy::enums", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::fns" [label="pub(self) mod|smoke::visibility::dummy::fns", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds" [label="pub(self) mod|smoke::visibility::dummy::kinds", fillcolor="#db5367"]; // "mod" node + "smoke::visibility::dummy::kinds::Module" [label="pub(self) mod|smoke::visibility::dummy::kinds::Module", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods" [label="pub(self) mod|smoke::visibility::dummy::mods", fillcolor="#db5367"]; // "mod" node "smoke::visibility::dummy::mods::pub_crate" [label="pub(crate) mod|smoke::visibility::dummy::mods::pub_crate", fillcolor="#f8c04c"]; // "mod" node "smoke::visibility::dummy::mods::pub_module" [label="pub(in crate::visibility) mod|smoke::visibility::dummy::mods::pub_module", fillcolor="#fe9454"]; // "mod" node @@ -88,10 +90,12 @@ digraph { "smoke::visibility" -> "smoke::visibility::dummy" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::enums" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::fns" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy" -> "smoke::visibility::dummy::kinds" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::mods" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::structs" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::traits" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy" -> "smoke::visibility::dummy::unions" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge + "smoke::visibility::dummy::kinds" -> "smoke::visibility::dummy::kinds::Module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_crate" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_module" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge "smoke::visibility::dummy::mods" -> "smoke::visibility::dummy::mods::pub_private" [label="owns", color="#000000", style="solid"] [constraint=true]; // "owns" edge diff --git a/tests/snapshots/generate_tree__colors__plain__smoke.snap b/tests/snapshots/generate_tree__colors__plain__smoke.snap index fcb2f8f7..1059296e 100644 --- a/tests/snapshots/generate_tree__colors__plain__smoke.snap +++ b/tests/snapshots/generate_tree__colors__plain__smoke.snap @@ -26,6 +26,8 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ └── mod Module: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__fns__smoke.snap b/tests/snapshots/generate_tree__fns__smoke.snap index 580102f6..41649da2 100644 --- a/tests/snapshots/generate_tree__fns__smoke.snap +++ b/tests/snapshots/generate_tree__fns__smoke.snap @@ -31,6 +31,12 @@ crate smoke │ ├── fn pub_private: pub(self) │ ├── fn pub_public: pub │ └── fn pub_super: pub(super) + ├── mod kinds: pub(self) + │ ├── async fn AsyncFunction: pub(self) + │ ├── const fn ConstFunction: pub(self) + │ ├── fn Function: pub(self) + │ ├── mod Module: pub(self) + │ └── unsafe fn UnsafeFunction: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__focus_on__glob_path__smoke.snap b/tests/snapshots/generate_tree__focus_on__glob_path__smoke.snap index 8727a741..845c2f51 100644 --- a/tests/snapshots/generate_tree__focus_on__glob_path__smoke.snap +++ b/tests/snapshots/generate_tree__focus_on__glob_path__smoke.snap @@ -11,6 +11,8 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ └── mod Module: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__focus_on__self_path__smoke.snap b/tests/snapshots/generate_tree__focus_on__self_path__smoke.snap index 8727a741..845c2f51 100644 --- a/tests/snapshots/generate_tree__focus_on__self_path__smoke.snap +++ b/tests/snapshots/generate_tree__focus_on__self_path__smoke.snap @@ -11,6 +11,8 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ └── mod Module: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__focus_on__simple_path__smoke.snap b/tests/snapshots/generate_tree__focus_on__simple_path__smoke.snap index 8727a741..845c2f51 100644 --- a/tests/snapshots/generate_tree__focus_on__simple_path__smoke.snap +++ b/tests/snapshots/generate_tree__focus_on__simple_path__smoke.snap @@ -11,6 +11,8 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ └── mod Module: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__focus_on__tree__smoke.snap b/tests/snapshots/generate_tree__focus_on__tree__smoke.snap index 8727a741..845c2f51 100644 --- a/tests/snapshots/generate_tree__focus_on__tree__smoke.snap +++ b/tests/snapshots/generate_tree__focus_on__tree__smoke.snap @@ -11,6 +11,8 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ └── mod Module: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__orphans__smoke.snap b/tests/snapshots/generate_tree__orphans__smoke.snap index 704b16ef..ef73c13e 100644 --- a/tests/snapshots/generate_tree__orphans__smoke.snap +++ b/tests/snapshots/generate_tree__orphans__smoke.snap @@ -28,6 +28,8 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ └── mod Module: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__tests__smoke.snap b/tests/snapshots/generate_tree__tests__smoke.snap index 390e3f3a..2213ee65 100644 --- a/tests/snapshots/generate_tree__tests__smoke.snap +++ b/tests/snapshots/generate_tree__tests__smoke.snap @@ -27,6 +27,8 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ └── mod Module: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__traits__smoke.snap b/tests/snapshots/generate_tree__traits__smoke.snap index 208d3bc1..48d2d4c6 100644 --- a/tests/snapshots/generate_tree__traits__smoke.snap +++ b/tests/snapshots/generate_tree__traits__smoke.snap @@ -26,6 +26,10 @@ crate smoke └── mod dummy: pub(self) ├── mod enums: pub(self) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ ├── mod Module: pub(self) + │ ├── trait Trait: pub(self) + │ └── unsafe trait UnsafeTrait: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) diff --git a/tests/snapshots/generate_tree__types__smoke.snap b/tests/snapshots/generate_tree__types__smoke.snap index afa2e0ea..30ade498 100644 --- a/tests/snapshots/generate_tree__types__smoke.snap +++ b/tests/snapshots/generate_tree__types__smoke.snap @@ -39,6 +39,13 @@ crate smoke │ ├── enum PubPublic: pub │ └── enum PubSuper: pub(super) ├── mod fns: pub(self) + ├── mod kinds: pub(self) + │ ├── enum Enum: pub(self) + │ ├── mod Module: pub(self) + │ ├── struct Struct: pub(self) + │ ├── type TraitAlias: pub(self) + │ ├── type TypeAlias: pub(self) + │ └── union Union: pub(self) ├── mod mods: pub(self) │ ├── mod pub_crate: pub(crate) │ ├── mod pub_module: pub(in crate::visibility) From f3572737f21151a37a84395f12f890716dedb53c Mon Sep 17 00:00:00 2001 From: Vincent Esche Date: Tue, 14 Nov 2023 14:51:16 +0100 Subject: [PATCH 4/4] Add support for sorting the output of the `generate tree` command by the items' name, visibility or kind via `--sort-by ` and `--sort-reversed` CLI options --- README.md | 4 +- src/generate.rs | 5 +- src/item/visibility.rs | 31 ++++++- src/tree/options.rs | 42 +++++++++ src/tree/orphans.rs | 2 + src/tree/printer.rs | 29 +++++- tests/generate_tree.rs | 54 +++++++++++ .../generate_tree__sort_by__kind__smoke.snap | 91 +++++++++++++++++++ .../generate_tree__sort_by__name__smoke.snap | 91 +++++++++++++++++++ ...rate_tree__sort_by__visibility__smoke.snap | 91 +++++++++++++++++++ .../generate_tree__sort_reversed__smoke.snap | 91 +++++++++++++++++++ 11 files changed, 525 insertions(+), 6 deletions(-) create mode 100644 tests/snapshots/generate_tree__sort_by__kind__smoke.snap create mode 100644 tests/snapshots/generate_tree__sort_by__name__smoke.snap create mode 100644 tests/snapshots/generate_tree__sort_by__visibility__smoke.snap create mode 100644 tests/snapshots/generate_tree__sort_reversed__smoke.snap diff --git a/README.md b/README.md index a93f96ae..46ece671 100644 --- a/README.md +++ b/README.md @@ -57,9 +57,11 @@ Options: --traits Include traits (e.g. trait, unsafe trait) --no-traits Exclude traits (e.g. trait, unsafe trait). [default] --fns Include functions (e.g. fns, async fns, const fns) - --no-fns Include functions (e.g. fns, async fns, const fns). [default] + --no-fns Exclude functions (e.g. fns, async fns, const fns). [default] --tests Include tests (e.g. `#[test] fn …`) --no-tests Exclude tests (e.g. `#[test] fn …`). [default] + --sort-by The sorting order to use (e.g. name, visibility, kind) [default: name] + --sort-reversed Reverses the sorting order --orphans Include orphaned modules (i.e. unused files in /src) --no-orphans Exclude orphaned modules (i.e. unused files in /src). [default] -h, --help Print help diff --git a/src/generate.rs b/src/generate.rs index de83b338..9bc11abf 100644 --- a/src/generate.rs +++ b/src/generate.rs @@ -115,7 +115,10 @@ impl Command { uses: false, externs: false, }; - let printer_options = TreePrinterOptions {}; + let printer_options = TreePrinterOptions { + sort_by: options.sort_by, + sort_reversed: options.sort_reversed, + }; let command = GenerateTreeCommand::new(builder_options, filter_options, printer_options); diff --git a/src/item/visibility.rs b/src/item/visibility.rs index 15a0aa42..cb29628e 100644 --- a/src/item/visibility.rs +++ b/src/item/visibility.rs @@ -2,7 +2,7 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. -use std::fmt; +use std::{cmp::Ordering, fmt}; use ra_ap_hir::{self as hir, HasVisibility}; use ra_ap_ide_db::RootDatabase; @@ -48,6 +48,35 @@ impl ItemVisibility { hir::Visibility::Public => Self::Public, } } + + fn numerical_order(&self) -> isize { + match self { + ItemVisibility::Public => 0, + ItemVisibility::Crate => 1, + ItemVisibility::Module(_) => 2, + ItemVisibility::Super => 3, + ItemVisibility::Private => 4, + } + } +} + +impl PartialOrd for ItemVisibility { + fn partial_cmp(&self, other: &Self) -> Option { + Some(self.cmp(other)) + } +} + +impl Ord for ItemVisibility { + fn cmp(&self, other: &Self) -> Ordering { + match self.numerical_order().cmp(&other.numerical_order()) { + ord @ Ordering::Less => ord, + ord @ Ordering::Equal => match (self, other) { + (ItemVisibility::Module(lhs), ItemVisibility::Module(rhs)) => lhs.cmp(rhs), + _ => ord, + }, + ord @ Ordering::Greater => ord, + } + } } impl fmt::Display for ItemVisibility { diff --git a/src/tree/options.rs b/src/tree/options.rs index e9f41740..20cdadd7 100644 --- a/src/tree/options.rs +++ b/src/tree/options.rs @@ -2,10 +2,43 @@ // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. +use std::str::FromStr; + use clap::{ArgAction, Parser}; use crate::options; +#[derive(Copy, Clone, PartialEq, Eq, Debug)] +pub enum SortBy { + Name, + Visibility, + Kind, +} + +impl FromStr for SortBy { + type Err = &'static str; + + fn from_str(s: &str) -> Result { + match s { + "name" => Ok(Self::Name), + "visibility" => Ok(Self::Visibility), + "kind" => Ok(Self::Kind), + _ => Err("Unrecognized sort order"), + } + } +} + +impl ToString for SortBy { + fn to_string(&self) -> String { + match self { + Self::Name => "name", + Self::Visibility => "visibility", + Self::Kind => "kind", + } + .to_owned() + } +} + #[derive(Parser, Clone, PartialEq, Eq, Debug)] #[group(id = "GenerateTreeOptions")] pub struct Options { @@ -18,6 +51,15 @@ pub struct Options { #[command(flatten)] pub selection: options::selection::Options, + /// The sorting order to use + /// (e.g. name, visibility, kind). + #[arg(long = "sort-by", default_value = "name")] + pub sort_by: SortBy, + + /// Reverses the sorting order. + #[arg(long = "sort-reversed")] + pub sort_reversed: bool, + /// Include orphaned modules (i.e. unused files in /src). #[arg(long = "orphans")] pub orphans: bool, diff --git a/src/tree/orphans.rs b/src/tree/orphans.rs index 038c59e0..81ae680c 100644 --- a/src/tree/orphans.rs +++ b/src/tree/orphans.rs @@ -85,6 +85,7 @@ fn orphan_node(crate_name: Option, path: Vec, file_path: PathBuf let test = None; ItemAttrs { cfgs, test } }; + let kind = None; let item = Item { crate_name, @@ -93,6 +94,7 @@ fn orphan_node(crate_name: Option, path: Vec, file_path: PathBuf hir, visibility, attrs, + kind, }; Node::new(item, vec![]) diff --git a/src/tree/printer.rs b/src/tree/printer.rs index 6a507cb7..86a24aa6 100644 --- a/src/tree/printer.rs +++ b/src/tree/printer.rs @@ -12,7 +12,7 @@ use yansi::Style; use crate::{ item::visibility::ItemVisibility, theme::tree::styles, - tree::{node::Node, Tree}, + tree::{node::Node, options::SortBy, Tree}, }; #[derive(Debug)] @@ -21,7 +21,10 @@ struct Twig { } #[derive(Clone, Debug)] -pub struct Options {} +pub struct Options { + pub sort_by: SortBy, + pub sort_reversed: bool, +} pub struct Printer<'a> { #[allow(dead_code)] @@ -52,7 +55,27 @@ impl<'a> Printer<'a> { let mut subnodes = root_node.subnodes.clone(); // Sort the children by name for easier visual scanning of output: - subnodes.sort_by_cached_key(|node| node.display_name()); + subnodes.sort_by_cached_key(|node| node.item.display_name()); + + // The default sorting functions in Rust are stable, so we can use it to re-sort, + // resulting in a list that's sorted prioritizing whatever we re-sort by. + + // Re-sort the children by name, visibility or kind, for easier visual scanning of output: + match self.options.sort_by { + SortBy::Name => { + subnodes.sort_by_cached_key(|node| node.item.display_name()); + } + SortBy::Visibility => { + subnodes.sort_by_cached_key(|node| node.item.visibility.clone()); + } + SortBy::Kind => { + subnodes.sort_by_cached_key(|node| node.item.kind.clone()); + } + } + + if self.options.sort_reversed { + subnodes.reverse(); + } let count = subnodes.len(); for (pos, node) in subnodes.into_iter().enumerate() { diff --git a/tests/generate_tree.rs b/tests/generate_tree.rs index 8a6ff1ea..c7a219e6 100644 --- a/tests/generate_tree.rs +++ b/tests/generate_tree.rs @@ -414,3 +414,57 @@ mod max_depth { ); } } + +mod sort_by { + mod name { + test_cmd!( + args: "generate tree \ + --types \ + --traits \ + --fns \ + --sort-by \"name\"", + success: true, + color_mode: ColorMode::Plain, + project: smoke + ); + } + + mod visibility { + test_cmd!( + args: "generate tree \ + --types \ + --traits \ + --fns \ + --sort-by \"visibility\"", + success: true, + color_mode: ColorMode::Plain, + project: smoke + ); + } + + mod kind { + test_cmd!( + args: "generate tree \ + --types \ + --traits \ + --fns \ + --sort-by \"kind\"", + success: true, + color_mode: ColorMode::Plain, + project: smoke + ); + } +} + +mod sort_reversed { + test_cmd!( + args: "generate tree \ + --types \ + --traits \ + --fns \ + --sort-reversed", + success: true, + color_mode: ColorMode::Plain, + project: smoke + ); +} diff --git a/tests/snapshots/generate_tree__sort_by__kind__smoke.snap b/tests/snapshots/generate_tree__sort_by__kind__smoke.snap new file mode 100644 index 00000000..73d5de73 --- /dev/null +++ b/tests/snapshots/generate_tree__sort_by__kind__smoke.snap @@ -0,0 +1,91 @@ +--- +source: tests/generate_tree.rs +expression: output +--- +STDERR: + +STDOUT: + +crate smoke +├── mod hierarchy: pub(crate) +│ └── mod lorem: pub(self) +│ ├── mod consectetur: pub(self) +│ │ ├── mod adipiscing: pub(self) +│ │ │ ├── mod elit: pub(self) +│ │ │ │ └── struct Elit: pub(self) +│ │ │ └── struct Adipiscing: pub(self) +│ │ └── struct Consectetur: pub(self) +│ ├── mod dolor: pub(self) +│ │ ├── mod sit: pub(self) +│ │ │ ├── mod amet: pub(self) +│ │ │ │ └── struct Amet: pub(self) +│ │ │ └── struct Sit: pub(self) +│ │ └── struct Dolor: pub(self) +│ ├── mod ipsum: pub(self) +│ │ └── struct Ipsum: pub(self) +│ └── struct Lorem: pub(self) +├── mod orphans: pub(crate) +├── mod uses: pub(crate) +│ └── mod cycle: pub(self) +│ ├── mod node_0: pub(self) +│ └── mod node_1: pub(self) +│ └── mod node_2: pub(self) +└── mod visibility: pub(crate) + └── mod dummy: pub(self) + ├── mod enums: pub(self) + │ ├── enum PubCrate: pub(crate) + │ ├── enum PubModule: pub(in crate::visibility) + │ ├── enum PubPrivate: pub(self) + │ ├── enum PubPublic: pub + │ └── enum PubSuper: pub(super) + ├── mod fns: pub(self) + │ ├── fn pub_crate: pub(crate) + │ ├── fn pub_module: pub(in crate::visibility) + │ ├── fn pub_private: pub(self) + │ ├── fn pub_public: pub + │ └── fn pub_super: pub(super) + ├── mod kinds: pub(self) + │ ├── mod Module: pub(self) + │ ├── unsafe trait UnsafeTrait: pub(self) + │ ├── trait Trait: pub(self) + │ ├── type TraitAlias: pub(self) + │ ├── type TypeAlias: pub(self) + │ ├── struct Struct: pub(self) + │ ├── enum Enum: pub(self) + │ ├── union Union: pub(self) + │ ├── const fn ConstFunction: pub(self) + │ ├── async fn AsyncFunction: pub(self) + │ ├── unsafe fn UnsafeFunction: pub(self) + │ └── fn Function: pub(self) + ├── mod mods: pub(self) + │ ├── mod pub_crate: pub(crate) + │ ├── mod pub_module: pub(in crate::visibility) + │ ├── mod pub_private: pub(self) + │ ├── mod pub_public: pub + │ └── mod pub_super: pub(super) + ├── mod structs: pub(self) + │ ├── struct PubCrate: pub(crate) + │ ├── struct PubModule: pub(in crate::visibility) + │ ├── struct PubPrivate: pub(self) + │ ├── struct PubPublic: pub + │ └── struct PubSuper: pub(super) + ├── mod traits: pub(self) + │ ├── mod r#unsafe: pub(self) + │ │ ├── unsafe trait PubCrate: pub(crate) + │ │ ├── unsafe trait PubModule: pub(in crate::visibility) + │ │ ├── unsafe trait PubPrivate: pub(self) + │ │ ├── unsafe trait PubPublic: pub + │ │ └── unsafe trait PubSuper: pub(super) + │ └── mod safe: pub(self) + │ ├── trait PubCrate: pub(crate) + │ ├── trait PubModule: pub(in crate::visibility) + │ ├── trait PubPrivate: pub(self) + │ ├── trait PubPublic: pub + │ └── trait PubSuper: pub(super) + └── mod unions: pub(self) + ├── union PubCrate: pub(crate) + ├── union PubModule: pub(in crate::visibility) + ├── union PubPrivate: pub(self) + ├── union PubPublic: pub + └── union PubSuper: pub(super) + diff --git a/tests/snapshots/generate_tree__sort_by__name__smoke.snap b/tests/snapshots/generate_tree__sort_by__name__smoke.snap new file mode 100644 index 00000000..1d44e513 --- /dev/null +++ b/tests/snapshots/generate_tree__sort_by__name__smoke.snap @@ -0,0 +1,91 @@ +--- +source: tests/generate_tree.rs +expression: output +--- +STDERR: + +STDOUT: + +crate smoke +├── mod hierarchy: pub(crate) +│ └── mod lorem: pub(self) +│ ├── struct Lorem: pub(self) +│ ├── mod consectetur: pub(self) +│ │ ├── struct Consectetur: pub(self) +│ │ └── mod adipiscing: pub(self) +│ │ ├── struct Adipiscing: pub(self) +│ │ └── mod elit: pub(self) +│ │ └── struct Elit: pub(self) +│ ├── mod dolor: pub(self) +│ │ ├── struct Dolor: pub(self) +│ │ └── mod sit: pub(self) +│ │ ├── struct Sit: pub(self) +│ │ └── mod amet: pub(self) +│ │ └── struct Amet: pub(self) +│ └── mod ipsum: pub(self) +│ └── struct Ipsum: pub(self) +├── mod orphans: pub(crate) +├── mod uses: pub(crate) +│ └── mod cycle: pub(self) +│ ├── mod node_0: pub(self) +│ └── mod node_1: pub(self) +│ └── mod node_2: pub(self) +└── mod visibility: pub(crate) + └── mod dummy: pub(self) + ├── mod enums: pub(self) + │ ├── enum PubCrate: pub(crate) + │ ├── enum PubModule: pub(in crate::visibility) + │ ├── enum PubPrivate: pub(self) + │ ├── enum PubPublic: pub + │ └── enum PubSuper: pub(super) + ├── mod fns: pub(self) + │ ├── fn pub_crate: pub(crate) + │ ├── fn pub_module: pub(in crate::visibility) + │ ├── fn pub_private: pub(self) + │ ├── fn pub_public: pub + │ └── fn pub_super: pub(super) + ├── mod kinds: pub(self) + │ ├── async fn AsyncFunction: pub(self) + │ ├── const fn ConstFunction: pub(self) + │ ├── enum Enum: pub(self) + │ ├── fn Function: pub(self) + │ ├── mod Module: pub(self) + │ ├── struct Struct: pub(self) + │ ├── trait Trait: pub(self) + │ ├── type TraitAlias: pub(self) + │ ├── type TypeAlias: pub(self) + │ ├── union Union: pub(self) + │ ├── unsafe fn UnsafeFunction: pub(self) + │ └── unsafe trait UnsafeTrait: pub(self) + ├── mod mods: pub(self) + │ ├── mod pub_crate: pub(crate) + │ ├── mod pub_module: pub(in crate::visibility) + │ ├── mod pub_private: pub(self) + │ ├── mod pub_public: pub + │ └── mod pub_super: pub(super) + ├── mod structs: pub(self) + │ ├── struct PubCrate: pub(crate) + │ ├── struct PubModule: pub(in crate::visibility) + │ ├── struct PubPrivate: pub(self) + │ ├── struct PubPublic: pub + │ └── struct PubSuper: pub(super) + ├── mod traits: pub(self) + │ ├── mod r#unsafe: pub(self) + │ │ ├── unsafe trait PubCrate: pub(crate) + │ │ ├── unsafe trait PubModule: pub(in crate::visibility) + │ │ ├── unsafe trait PubPrivate: pub(self) + │ │ ├── unsafe trait PubPublic: pub + │ │ └── unsafe trait PubSuper: pub(super) + │ └── mod safe: pub(self) + │ ├── trait PubCrate: pub(crate) + │ ├── trait PubModule: pub(in crate::visibility) + │ ├── trait PubPrivate: pub(self) + │ ├── trait PubPublic: pub + │ └── trait PubSuper: pub(super) + └── mod unions: pub(self) + ├── union PubCrate: pub(crate) + ├── union PubModule: pub(in crate::visibility) + ├── union PubPrivate: pub(self) + ├── union PubPublic: pub + └── union PubSuper: pub(super) + diff --git a/tests/snapshots/generate_tree__sort_by__visibility__smoke.snap b/tests/snapshots/generate_tree__sort_by__visibility__smoke.snap new file mode 100644 index 00000000..f8b8e76d --- /dev/null +++ b/tests/snapshots/generate_tree__sort_by__visibility__smoke.snap @@ -0,0 +1,91 @@ +--- +source: tests/generate_tree.rs +expression: output +--- +STDERR: + +STDOUT: + +crate smoke +├── mod hierarchy: pub(crate) +│ └── mod lorem: pub(self) +│ ├── struct Lorem: pub(self) +│ ├── mod consectetur: pub(self) +│ │ ├── struct Consectetur: pub(self) +│ │ └── mod adipiscing: pub(self) +│ │ ├── struct Adipiscing: pub(self) +│ │ └── mod elit: pub(self) +│ │ └── struct Elit: pub(self) +│ ├── mod dolor: pub(self) +│ │ ├── struct Dolor: pub(self) +│ │ └── mod sit: pub(self) +│ │ ├── struct Sit: pub(self) +│ │ └── mod amet: pub(self) +│ │ └── struct Amet: pub(self) +│ └── mod ipsum: pub(self) +│ └── struct Ipsum: pub(self) +├── mod orphans: pub(crate) +├── mod uses: pub(crate) +│ └── mod cycle: pub(self) +│ ├── mod node_0: pub(self) +│ └── mod node_1: pub(self) +│ └── mod node_2: pub(self) +└── mod visibility: pub(crate) + └── mod dummy: pub(self) + ├── mod enums: pub(self) + │ ├── enum PubPublic: pub + │ ├── enum PubCrate: pub(crate) + │ ├── enum PubModule: pub(in crate::visibility) + │ ├── enum PubSuper: pub(super) + │ └── enum PubPrivate: pub(self) + ├── mod fns: pub(self) + │ ├── fn pub_public: pub + │ ├── fn pub_crate: pub(crate) + │ ├── fn pub_module: pub(in crate::visibility) + │ ├── fn pub_super: pub(super) + │ └── fn pub_private: pub(self) + ├── mod kinds: pub(self) + │ ├── async fn AsyncFunction: pub(self) + │ ├── const fn ConstFunction: pub(self) + │ ├── enum Enum: pub(self) + │ ├── fn Function: pub(self) + │ ├── mod Module: pub(self) + │ ├── struct Struct: pub(self) + │ ├── trait Trait: pub(self) + │ ├── type TraitAlias: pub(self) + │ ├── type TypeAlias: pub(self) + │ ├── union Union: pub(self) + │ ├── unsafe fn UnsafeFunction: pub(self) + │ └── unsafe trait UnsafeTrait: pub(self) + ├── mod mods: pub(self) + │ ├── mod pub_public: pub + │ ├── mod pub_crate: pub(crate) + │ ├── mod pub_module: pub(in crate::visibility) + │ ├── mod pub_super: pub(super) + │ └── mod pub_private: pub(self) + ├── mod structs: pub(self) + │ ├── struct PubPublic: pub + │ ├── struct PubCrate: pub(crate) + │ ├── struct PubModule: pub(in crate::visibility) + │ ├── struct PubSuper: pub(super) + │ └── struct PubPrivate: pub(self) + ├── mod traits: pub(self) + │ ├── mod r#unsafe: pub(self) + │ │ ├── unsafe trait PubPublic: pub + │ │ ├── unsafe trait PubCrate: pub(crate) + │ │ ├── unsafe trait PubModule: pub(in crate::visibility) + │ │ ├── unsafe trait PubSuper: pub(super) + │ │ └── unsafe trait PubPrivate: pub(self) + │ └── mod safe: pub(self) + │ ├── trait PubPublic: pub + │ ├── trait PubCrate: pub(crate) + │ ├── trait PubModule: pub(in crate::visibility) + │ ├── trait PubSuper: pub(super) + │ └── trait PubPrivate: pub(self) + └── mod unions: pub(self) + ├── union PubPublic: pub + ├── union PubCrate: pub(crate) + ├── union PubModule: pub(in crate::visibility) + ├── union PubSuper: pub(super) + └── union PubPrivate: pub(self) + diff --git a/tests/snapshots/generate_tree__sort_reversed__smoke.snap b/tests/snapshots/generate_tree__sort_reversed__smoke.snap new file mode 100644 index 00000000..cfaf4ab5 --- /dev/null +++ b/tests/snapshots/generate_tree__sort_reversed__smoke.snap @@ -0,0 +1,91 @@ +--- +source: tests/generate_tree.rs +expression: output +--- +STDERR: + +STDOUT: + +crate smoke +├── mod visibility: pub(crate) +│ └── mod dummy: pub(self) +│ ├── mod unions: pub(self) +│ │ ├── union PubSuper: pub(super) +│ │ ├── union PubPublic: pub +│ │ ├── union PubPrivate: pub(self) +│ │ ├── union PubModule: pub(in crate::visibility) +│ │ └── union PubCrate: pub(crate) +│ ├── mod traits: pub(self) +│ │ ├── mod safe: pub(self) +│ │ │ ├── trait PubSuper: pub(super) +│ │ │ ├── trait PubPublic: pub +│ │ │ ├── trait PubPrivate: pub(self) +│ │ │ ├── trait PubModule: pub(in crate::visibility) +│ │ │ └── trait PubCrate: pub(crate) +│ │ └── mod r#unsafe: pub(self) +│ │ ├── unsafe trait PubSuper: pub(super) +│ │ ├── unsafe trait PubPublic: pub +│ │ ├── unsafe trait PubPrivate: pub(self) +│ │ ├── unsafe trait PubModule: pub(in crate::visibility) +│ │ └── unsafe trait PubCrate: pub(crate) +│ ├── mod structs: pub(self) +│ │ ├── struct PubSuper: pub(super) +│ │ ├── struct PubPublic: pub +│ │ ├── struct PubPrivate: pub(self) +│ │ ├── struct PubModule: pub(in crate::visibility) +│ │ └── struct PubCrate: pub(crate) +│ ├── mod mods: pub(self) +│ │ ├── mod pub_super: pub(super) +│ │ ├── mod pub_public: pub +│ │ ├── mod pub_private: pub(self) +│ │ ├── mod pub_module: pub(in crate::visibility) +│ │ └── mod pub_crate: pub(crate) +│ ├── mod kinds: pub(self) +│ │ ├── unsafe trait UnsafeTrait: pub(self) +│ │ ├── unsafe fn UnsafeFunction: pub(self) +│ │ ├── union Union: pub(self) +│ │ ├── type TypeAlias: pub(self) +│ │ ├── type TraitAlias: pub(self) +│ │ ├── trait Trait: pub(self) +│ │ ├── struct Struct: pub(self) +│ │ ├── mod Module: pub(self) +│ │ ├── fn Function: pub(self) +│ │ ├── enum Enum: pub(self) +│ │ ├── const fn ConstFunction: pub(self) +│ │ └── async fn AsyncFunction: pub(self) +│ ├── mod fns: pub(self) +│ │ ├── fn pub_super: pub(super) +│ │ ├── fn pub_public: pub +│ │ ├── fn pub_private: pub(self) +│ │ ├── fn pub_module: pub(in crate::visibility) +│ │ └── fn pub_crate: pub(crate) +│ └── mod enums: pub(self) +│ ├── enum PubSuper: pub(super) +│ ├── enum PubPublic: pub +│ ├── enum PubPrivate: pub(self) +│ ├── enum PubModule: pub(in crate::visibility) +│ └── enum PubCrate: pub(crate) +├── mod uses: pub(crate) +│ └── mod cycle: pub(self) +│ ├── mod node_1: pub(self) +│ │ └── mod node_2: pub(self) +│ └── mod node_0: pub(self) +├── mod orphans: pub(crate) +└── mod hierarchy: pub(crate) + └── mod lorem: pub(self) + ├── mod ipsum: pub(self) + │ └── struct Ipsum: pub(self) + ├── mod dolor: pub(self) + │ ├── mod sit: pub(self) + │ │ ├── mod amet: pub(self) + │ │ │ └── struct Amet: pub(self) + │ │ └── struct Sit: pub(self) + │ └── struct Dolor: pub(self) + ├── mod consectetur: pub(self) + │ ├── mod adipiscing: pub(self) + │ │ ├── mod elit: pub(self) + │ │ │ └── struct Elit: pub(self) + │ │ └── struct Adipiscing: pub(self) + │ └── struct Consectetur: pub(self) + └── struct Lorem: pub(self) +