From ecb6faa089271be48325eb7371a3a01a17683ba4 Mon Sep 17 00:00:00 2001 From: Clement Tsang <34804052+ClementTsang@users.noreply.github.com> Date: Mon, 1 Jan 2024 10:19:52 +0000 Subject: [PATCH] refactor: restructure canvas file folder structure (#1368) * refactor: group together some canvas files * rename file * more shuffling around * fmt * more shuffling Going to flatten widgets in another PR. * some docs * naming * fmt --- rustfmt.toml | 1 + src/app.rs | 10 ++++---- src/app/data_farmer.rs | 9 +++---- src/app/layout_manager.rs | 6 +++-- src/app/query.rs | 25 ++++++++++++------- src/args.rs | 3 +-- src/bin/main.rs | 21 +++++++++------- src/canvas.rs | 8 +++--- src/canvas/dialogs/help_dialog.rs | 3 +-- src/canvas/{canvas_styling.rs => styling.rs} | 3 ++- .../colour_utils.rs | 0 src/canvas/tui_widgets.rs | 6 +++++ .../tui_widgets}/data_table.rs | 0 .../tui_widgets}/data_table/column.rs | 0 .../tui_widgets}/data_table/data_type.rs | 0 .../tui_widgets}/data_table/draw.rs | 0 .../tui_widgets}/data_table/props.rs | 0 .../tui_widgets}/data_table/sortable.rs | 0 .../tui_widgets}/data_table/state.rs | 0 .../tui_widgets}/data_table/styling.rs | 2 +- .../tui_widgets}/pipe_gauge.rs | 0 .../tui_widgets}/time_chart.rs | 0 .../tui_widgets}/time_chart/canvas.rs | 0 .../tui_widgets}/time_graph.rs | 4 +-- src/canvas/widgets/basic_table_arrows.rs | 3 +-- src/canvas/widgets/cpu_basic.rs | 6 +++-- src/canvas/widgets/cpu_graph.rs | 11 +++++--- src/canvas/widgets/disk_table.rs | 6 +++-- src/canvas/widgets/mem_basic.rs | 4 ++- src/canvas/widgets/mem_graph.rs | 7 ++++-- src/canvas/widgets/network_graph.rs | 11 +++++--- src/canvas/widgets/process_table.rs | 6 +++-- src/canvas/widgets/temperature_table.rs | 6 +++-- src/components.rs | 3 --- src/components/tui_widget.rs | 2 -- src/data_collection/disks/freebsd.rs | 7 +++--- src/data_collection/disks/other.rs | 3 +-- .../disks/unix/file_systems.rs | 3 ++- .../disks/unix/macos/io_kit/bindings.rs | 9 ++++--- .../disks/unix/macos/io_kit/io_object.rs | 14 ++++++----- src/data_collection/disks/windows.rs | 1 - src/data_collection/nvidia.rs | 18 +++++++------ src/data_collection/processes.rs | 4 +-- src/data_collection/processes/freebsd.rs | 9 ++++--- src/data_collection/processes/linux.rs | 19 ++++++++------ src/data_collection/processes/macos.rs | 4 +-- .../processes/unix/process_ext.rs | 3 +-- src/data_collection/processes/windows.rs | 1 - src/data_conversion.rs | 14 +++++------ src/lib.rs | 4 +-- src/options.rs | 8 +++--- src/options/layout_options.rs | 3 +-- src/options/process_columns.rs | 3 +-- src/widgets/cpu_graph.rs | 11 +++++--- src/widgets/disk_table.rs | 10 +++++--- src/widgets/process_table.rs | 10 +++++--- .../process_table/proc_widget_column.rs | 2 +- src/widgets/process_table/proc_widget_data.rs | 6 +++-- src/widgets/process_table/sort_table.rs | 2 +- src/widgets/temperature_table.rs | 10 +++++--- tests/layout_management_tests.rs | 10 +++++--- 61 files changed, 197 insertions(+), 157 deletions(-) rename src/canvas/{canvas_styling.rs => styling.rs} (99%) rename src/canvas/{canvas_styling => styling}/colour_utils.rs (100%) create mode 100644 src/canvas/tui_widgets.rs rename src/{components => canvas/tui_widgets}/data_table.rs (100%) rename src/{components => canvas/tui_widgets}/data_table/column.rs (100%) rename src/{components => canvas/tui_widgets}/data_table/data_type.rs (100%) rename src/{components => canvas/tui_widgets}/data_table/draw.rs (100%) rename src/{components => canvas/tui_widgets}/data_table/props.rs (100%) rename src/{components => canvas/tui_widgets}/data_table/sortable.rs (100%) rename src/{components => canvas/tui_widgets}/data_table/state.rs (100%) rename src/{components => canvas/tui_widgets}/data_table/styling.rs (93%) rename src/{components/tui_widget => canvas/tui_widgets}/pipe_gauge.rs (100%) rename src/{components/tui_widget => canvas/tui_widgets}/time_chart.rs (100%) rename src/{components/tui_widget => canvas/tui_widgets}/time_chart/canvas.rs (100%) rename src/{components => canvas/tui_widgets}/time_graph.rs (98%) delete mode 100644 src/components.rs delete mode 100644 src/components/tui_widget.rs diff --git a/rustfmt.toml b/rustfmt.toml index 798864da..c4a8b584 100644 --- a/rustfmt.toml +++ b/rustfmt.toml @@ -7,6 +7,7 @@ tab_spaces = 4 max_width = 100 # Unstable options, disabled by default. +# imports_granularity = "Crate" # group_imports = "StdExternalCrate" # wrap_comments = true # format_code_in_doc_comments = true diff --git a/src/app.rs b/src/app.rs index ddbc05af..eea35288 100644 --- a/src/app.rs +++ b/src/app.rs @@ -15,12 +15,12 @@ use crate::{ constants, data_collection::temperature, data_conversion::ConvertedData, - utils::error::{BottomError, Result}, - Pid, -}; -use crate::{ - utils::data_units::DataUnit, + utils::{ + data_units::DataUnit, + error::{BottomError, Result}, + }, widgets::{ProcWidgetColumn, ProcWidgetMode}, + Pid, }; pub mod data_farmer; diff --git a/src/app/data_farmer.rs b/src/app/data_farmer.rs index 4a2e09fe..720092db 100644 --- a/src/app/data_farmer.rs +++ b/src/app/data_farmer.rs @@ -13,7 +13,6 @@ //! memory usage and higher CPU usage - you will be trying to process more and //! more points as this is used! -use crate::data_collection::processes::ProcessHarvest; use std::{collections::BTreeMap, time::Instant, vec::Vec}; use hashbrown::HashMap; @@ -21,9 +20,8 @@ use hashbrown::HashMap; #[cfg(feature = "battery")] use crate::data_collection::batteries; use crate::{ - data_collection::{cpu, disks, memory, network, temperature, Data}, - utils::data_prefixes::*, - utils::gen_util::get_decimal_bytes, + data_collection::{cpu, disks, memory, network, processes::ProcessHarvest, temperature, Data}, + utils::{data_prefixes::*, gen_util::get_decimal_bytes}, Pid, }; @@ -370,9 +368,10 @@ impl DataCollection { let io_device = { #[cfg(target_os = "macos")] { - use regex::Regex; use std::sync::OnceLock; + use regex::Regex; + // Must trim one level further for macOS! static DISK_REGEX: OnceLock = OnceLock::new(); if let Some(new_name) = DISK_REGEX diff --git a/src/app/layout_manager.rs b/src/app/layout_manager.rs index f5ed8eaa..ca353f52 100644 --- a/src/app/layout_manager.rs +++ b/src/app/layout_manager.rs @@ -1,7 +1,9 @@ use std::collections::BTreeMap; -use crate::constants::DEFAULT_WIDGET_ID; -use crate::error::{BottomError, Result}; +use crate::{ + constants::DEFAULT_WIDGET_ID, + error::{BottomError, Result}, +}; /// Represents a more usable representation of the layout, derived from the /// config. diff --git a/src/app/query.rs b/src/app/query.rs index 6f1a2858..5737cbc7 100644 --- a/src/app/query.rs +++ b/src/app/query.rs @@ -1,16 +1,23 @@ -use std::fmt::{Debug, Formatter}; -use std::time::Duration; -use std::{borrow::Cow, collections::VecDeque}; +use std::{ + borrow::Cow, + collections::VecDeque, + fmt::{Debug, Formatter}, + time::Duration, +}; use humantime::parse_duration; use regex::Regex; -use crate::data_collection::processes::ProcessHarvest; -use crate::multi_eq_ignore_ascii_case; -use crate::utils::data_prefixes::*; -use crate::utils::error::{ - BottomError::{self, QueryError}, - Result, +use crate::{ + data_collection::processes::ProcessHarvest, + multi_eq_ignore_ascii_case, + utils::{ + data_prefixes::*, + error::{ + BottomError::{self, QueryError}, + Result, + }, + }, }; const DELIMITER_LIST: [char; 6] = ['=', '>', '<', '(', ')', '\"']; diff --git a/src/args.rs b/src/args.rs index 5da34f85..2c524da8 100644 --- a/src/args.rs +++ b/src/args.rs @@ -1,5 +1,4 @@ -use clap::builder::PossibleValuesParser; -use clap::*; +use clap::{builder::PossibleValuesParser, *}; const TEMPLATE: &str = "\ {name} {version} diff --git a/src/bin/main.rs b/src/bin/main.rs index 5fc02bfe..a5218efe 100644 --- a/src/bin/main.rs +++ b/src/bin/main.rs @@ -13,16 +13,12 @@ use std::{ }; use anyhow::{Context, Result}; -use crossterm::{ - event::{EnableBracketedPaste, EnableMouseCapture}, - execute, - terminal::{enable_raw_mode, EnterAlternateScreen}, -}; -use tui::{backend::CrosstermBackend, Terminal}; - use bottom::{ args, - canvas::{self, canvas_styling::CanvasStyling}, + canvas::{ + styling::CanvasStyling, + {self}, + }, check_if_terminal, cleanup_terminal, create_collection_thread, create_input_thread, create_or_get_config, data_conversion::*, @@ -30,6 +26,12 @@ use bottom::{ options::*, panic_hook, read_config, try_drawing, update_data, BottomEvent, }; +use crossterm::{ + event::{EnableBracketedPaste, EnableMouseCapture}, + execute, + terminal::{enable_raw_mode, EnterAlternateScreen}, +}; +use tui::{backend::CrosstermBackend, Terminal}; // Used for heap allocation debugging purposes. // #[global_allocator] @@ -151,9 +153,10 @@ fn main() -> Result<()> { let _stderr_fd = { // A really ugly band-aid to suppress stderr warnings on FreeBSD due to sysinfo. // For more information, see https://github.com/ClementTsang/bottom/issues/798. - use filedescriptor::{FileDescriptor, StdioDescriptor}; use std::fs::OpenOptions; + use filedescriptor::{FileDescriptor, StdioDescriptor}; + let path = OpenOptions::new().write(true).open("/dev/null")?; FileDescriptor::redirect_stdio(&path, StdioDescriptor::Stderr)? }; diff --git a/src/canvas.rs b/src/canvas.rs index ef5c9ace..8960f0a0 100644 --- a/src/canvas.rs +++ b/src/canvas.rs @@ -1,7 +1,7 @@ use std::str::FromStr; -use canvas_styling::*; use itertools::izip; +use styling::*; use tui::{ backend::Backend, layout::{Constraint, Direction, Layout, Rect}, @@ -16,13 +16,13 @@ use crate::{ App, }, constants::*, - utils::error, - utils::error::BottomError, + utils::{error, error::BottomError}, }; -pub mod canvas_styling; mod dialogs; mod drawing_utils; +pub mod styling; +pub mod tui_widgets; mod widgets; #[derive(Debug)] diff --git a/src/canvas/dialogs/help_dialog.rs b/src/canvas/dialogs/help_dialog.rs index 39bf2575..082aeb6e 100644 --- a/src/canvas/dialogs/help_dialog.rs +++ b/src/canvas/dialogs/help_dialog.rs @@ -3,8 +3,7 @@ use std::cmp::{max, min}; use tui::{ layout::{Alignment, Rect}, terminal::Frame, - text::Line, - text::Span, + text::{Line, Span}, widgets::{Block, Borders, Paragraph, Wrap}, }; use unicode_width::UnicodeWidthStr; diff --git a/src/canvas/canvas_styling.rs b/src/canvas/styling.rs similarity index 99% rename from src/canvas/canvas_styling.rs rename to src/canvas/styling.rs index 93169f37..efd7638f 100644 --- a/src/canvas/canvas_styling.rs +++ b/src/canvas/styling.rs @@ -235,9 +235,10 @@ impl CanvasStyling { #[cfg(test)] mod test { + use tui::style::{Color, Style}; + use super::{CanvasStyling, ColourScheme}; use crate::Config; - use tui::style::{Color, Style}; #[test] fn default_selected_colour_works() { diff --git a/src/canvas/canvas_styling/colour_utils.rs b/src/canvas/styling/colour_utils.rs similarity index 100% rename from src/canvas/canvas_styling/colour_utils.rs rename to src/canvas/styling/colour_utils.rs diff --git a/src/canvas/tui_widgets.rs b/src/canvas/tui_widgets.rs new file mode 100644 index 00000000..8355c7d1 --- /dev/null +++ b/src/canvas/tui_widgets.rs @@ -0,0 +1,6 @@ +//! Cstom ratatui widgets used by the rest of bottom. + +pub mod data_table; +pub mod pipe_gauge; +pub mod time_chart; +pub mod time_graph; diff --git a/src/components/data_table.rs b/src/canvas/tui_widgets/data_table.rs similarity index 100% rename from src/components/data_table.rs rename to src/canvas/tui_widgets/data_table.rs diff --git a/src/components/data_table/column.rs b/src/canvas/tui_widgets/data_table/column.rs similarity index 100% rename from src/components/data_table/column.rs rename to src/canvas/tui_widgets/data_table/column.rs diff --git a/src/components/data_table/data_type.rs b/src/canvas/tui_widgets/data_table/data_type.rs similarity index 100% rename from src/components/data_table/data_type.rs rename to src/canvas/tui_widgets/data_table/data_type.rs diff --git a/src/components/data_table/draw.rs b/src/canvas/tui_widgets/data_table/draw.rs similarity index 100% rename from src/components/data_table/draw.rs rename to src/canvas/tui_widgets/data_table/draw.rs diff --git a/src/components/data_table/props.rs b/src/canvas/tui_widgets/data_table/props.rs similarity index 100% rename from src/components/data_table/props.rs rename to src/canvas/tui_widgets/data_table/props.rs diff --git a/src/components/data_table/sortable.rs b/src/canvas/tui_widgets/data_table/sortable.rs similarity index 100% rename from src/components/data_table/sortable.rs rename to src/canvas/tui_widgets/data_table/sortable.rs diff --git a/src/components/data_table/state.rs b/src/canvas/tui_widgets/data_table/state.rs similarity index 100% rename from src/components/data_table/state.rs rename to src/canvas/tui_widgets/data_table/state.rs diff --git a/src/components/data_table/styling.rs b/src/canvas/tui_widgets/data_table/styling.rs similarity index 93% rename from src/components/data_table/styling.rs rename to src/canvas/tui_widgets/data_table/styling.rs index ddda312a..80ce2b70 100644 --- a/src/components/data_table/styling.rs +++ b/src/canvas/tui_widgets/data_table/styling.rs @@ -1,6 +1,6 @@ use tui::style::Style; -use crate::canvas::canvas_styling::CanvasStyling; +use crate::canvas::styling::CanvasStyling; #[derive(Default)] pub struct DataTableStyling { diff --git a/src/components/tui_widget/pipe_gauge.rs b/src/canvas/tui_widgets/pipe_gauge.rs similarity index 100% rename from src/components/tui_widget/pipe_gauge.rs rename to src/canvas/tui_widgets/pipe_gauge.rs diff --git a/src/components/tui_widget/time_chart.rs b/src/canvas/tui_widgets/time_chart.rs similarity index 100% rename from src/components/tui_widget/time_chart.rs rename to src/canvas/tui_widgets/time_chart.rs diff --git a/src/components/tui_widget/time_chart/canvas.rs b/src/canvas/tui_widgets/time_chart/canvas.rs similarity index 100% rename from src/components/tui_widget/time_chart/canvas.rs rename to src/canvas/tui_widgets/time_chart/canvas.rs diff --git a/src/components/time_graph.rs b/src/canvas/tui_widgets/time_graph.rs similarity index 98% rename from src/components/time_graph.rs rename to src/canvas/tui_widgets/time_graph.rs index 63d7330b..2bbcd652 100644 --- a/src/components/time_graph.rs +++ b/src/canvas/tui_widgets/time_graph.rs @@ -11,7 +11,7 @@ use tui::{ }; use unicode_segmentation::UnicodeSegmentation; -use super::tui_widget::time_chart::{Axis, Dataset, Point, TimeChart, DEFAULT_LEGEND_CONSTRAINTS}; +use super::time_chart::{Axis, Dataset, Point, TimeChart, DEFAULT_LEGEND_CONSTRAINTS}; /// Represents the data required by the [`TimeGraph`]. pub struct GraphData<'a> { @@ -183,7 +183,7 @@ mod test { }; use super::TimeGraph; - use crate::components::tui_widget::time_chart::Axis; + use crate::canvas::tui_widgets::time_chart::Axis; const Y_LABELS: [Cow<'static, str>; 3] = [ Cow::Borrowed("0%"), diff --git a/src/canvas/widgets/basic_table_arrows.rs b/src/canvas/widgets/basic_table_arrows.rs index 352c7f1e..9f7baba7 100644 --- a/src/canvas/widgets/basic_table_arrows.rs +++ b/src/canvas/widgets/basic_table_arrows.rs @@ -1,8 +1,7 @@ use tui::{ layout::{Alignment, Constraint, Direction, Layout, Rect}, terminal::Frame, - text::Line, - text::Span, + text::{Line, Span}, widgets::{Block, Paragraph}, }; diff --git a/src/canvas/widgets/cpu_basic.rs b/src/canvas/widgets/cpu_basic.rs index e04d497f..a2a67c4d 100644 --- a/src/canvas/widgets/cpu_basic.rs +++ b/src/canvas/widgets/cpu_basic.rs @@ -8,8 +8,10 @@ use tui::{ use crate::{ app::App, - canvas::Painter, - components::tui_widget::pipe_gauge::{LabelLimit, PipeGauge}, + canvas::{ + tui_widgets::pipe_gauge::{LabelLimit, PipeGauge}, + Painter, + }, constants::*, data_collection::cpu::CpuDataType, data_conversion::CpuWidgetData, diff --git a/src/canvas/widgets/cpu_graph.rs b/src/canvas/widgets/cpu_graph.rs index 9e9dab2f..7f4e757e 100644 --- a/src/canvas/widgets/cpu_graph.rs +++ b/src/canvas/widgets/cpu_graph.rs @@ -8,10 +8,13 @@ use tui::{ use crate::{ app::{layout_manager::WidgetDirection, App}, - canvas::{drawing_utils::should_hide_x_label, Painter}, - components::{ - data_table::{DrawInfo, SelectionState}, - time_graph::{GraphData, TimeGraph}, + canvas::{ + drawing_utils::should_hide_x_label, + tui_widgets::{ + data_table::{DrawInfo, SelectionState}, + time_graph::{GraphData, TimeGraph}, + }, + Painter, }, data_conversion::CpuWidgetData, widgets::CpuWidgetState, diff --git a/src/canvas/widgets/disk_table.rs b/src/canvas/widgets/disk_table.rs index cfea61b6..5b6b2619 100644 --- a/src/canvas/widgets/disk_table.rs +++ b/src/canvas/widgets/disk_table.rs @@ -2,8 +2,10 @@ use tui::{layout::Rect, terminal::Frame}; use crate::{ app::{self}, - canvas::Painter, - components::data_table::{DrawInfo, SelectionState}, + canvas::{ + tui_widgets::data_table::{DrawInfo, SelectionState}, + Painter, + }, }; impl Painter { diff --git a/src/canvas/widgets/mem_basic.rs b/src/canvas/widgets/mem_basic.rs index d24ae22e..e8ae71b7 100644 --- a/src/canvas/widgets/mem_basic.rs +++ b/src/canvas/widgets/mem_basic.rs @@ -5,7 +5,9 @@ use tui::{ }; use crate::{ - app::App, canvas::Painter, components::tui_widget::pipe_gauge::PipeGauge, constants::*, + app::App, + canvas::{tui_widgets::pipe_gauge::PipeGauge, Painter}, + constants::*, }; impl Painter { diff --git a/src/canvas/widgets/mem_graph.rs b/src/canvas/widgets/mem_graph.rs index 42e05e02..819c2956 100644 --- a/src/canvas/widgets/mem_graph.rs +++ b/src/canvas/widgets/mem_graph.rs @@ -8,8 +8,11 @@ use tui::{ use crate::{ app::App, - canvas::{drawing_utils::should_hide_x_label, Painter}, - components::time_graph::{GraphData, TimeGraph}, + canvas::{ + drawing_utils::should_hide_x_label, + tui_widgets::time_graph::{GraphData, TimeGraph}, + Painter, + }, }; impl Painter { diff --git a/src/canvas/widgets/network_graph.rs b/src/canvas/widgets/network_graph.rs index 8f0885fa..7c8ce913 100644 --- a/src/canvas/widgets/network_graph.rs +++ b/src/canvas/widgets/network_graph.rs @@ -8,10 +8,13 @@ use tui::{ use crate::{ app::{App, AxisScaling}, - canvas::{drawing_utils::should_hide_x_label, Painter}, - components::{ - time_graph::{GraphData, TimeGraph}, - tui_widget::time_chart::Point, + canvas::{ + drawing_utils::should_hide_x_label, + tui_widgets::{ + time_chart::Point, + time_graph::{GraphData, TimeGraph}, + }, + Painter, }, utils::{data_prefixes::*, data_units::DataUnit, gen_util::partial_ordering}, }; diff --git a/src/canvas/widgets/process_table.rs b/src/canvas/widgets/process_table.rs index 8aef6bea..e15f3f09 100644 --- a/src/canvas/widgets/process_table.rs +++ b/src/canvas/widgets/process_table.rs @@ -9,8 +9,10 @@ use unicode_segmentation::UnicodeSegmentation; use crate::{ app::{App, AppSearchState}, - canvas::Painter, - components::data_table::{DrawInfo, SelectionState}, + canvas::{ + tui_widgets::data_table::{DrawInfo, SelectionState}, + Painter, + }, constants::*, }; diff --git a/src/canvas/widgets/temperature_table.rs b/src/canvas/widgets/temperature_table.rs index 6c0475a4..9be34ef1 100644 --- a/src/canvas/widgets/temperature_table.rs +++ b/src/canvas/widgets/temperature_table.rs @@ -2,8 +2,10 @@ use tui::{layout::Rect, terminal::Frame}; use crate::{ app, - canvas::Painter, - components::data_table::{DrawInfo, SelectionState}, + canvas::{ + tui_widgets::data_table::{DrawInfo, SelectionState}, + Painter, + }, }; impl Painter { diff --git a/src/components.rs b/src/components.rs deleted file mode 100644 index c2ee5aae..00000000 --- a/src/components.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod data_table; -pub mod time_graph; -pub mod tui_widget; diff --git a/src/components/tui_widget.rs b/src/components/tui_widget.rs deleted file mode 100644 index 93c0509d..00000000 --- a/src/components/tui_widget.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod pipe_gauge; -pub mod time_chart; diff --git a/src/data_collection/disks/freebsd.rs b/src/data_collection/disks/freebsd.rs index bb44e1ad..2d16e1c5 100644 --- a/src/data_collection/disks/freebsd.rs +++ b/src/data_collection/disks/freebsd.rs @@ -2,15 +2,14 @@ use std::io; +use hashbrown::HashMap; use serde::Deserialize; use super::{keep_disk_entry, DiskHarvest, IoHarvest}; - use crate::{ - data_collection::deserialize_xo, data_collection::disks::IoData, - data_collection::DataCollector, utils::error, + data_collection::{deserialize_xo, disks::IoData, DataCollector}, + utils::error, }; -use hashbrown::HashMap; #[derive(Deserialize, Debug, Default)] #[serde(rename_all = "kebab-case")] diff --git a/src/data_collection/disks/other.rs b/src/data_collection/disks/other.rs index 3e35a6b7..86317160 100644 --- a/src/data_collection/disks/other.rs +++ b/src/data_collection/disks/other.rs @@ -2,9 +2,8 @@ use sysinfo::{DiskExt, SystemExt}; -use crate::data_collection::DataCollector; - use super::{keep_disk_entry, DiskHarvest}; +use crate::data_collection::DataCollector; pub(crate) fn get_disk_usage(collector: &DataCollector) -> anyhow::Result> { let disks = collector.sys.disks(); diff --git a/src/data_collection/disks/unix/file_systems.rs b/src/data_collection/disks/unix/file_systems.rs index 15bdc3ac..88c3c9fe 100644 --- a/src/data_collection/disks/unix/file_systems.rs +++ b/src/data_collection/disks/unix/file_systems.rs @@ -166,9 +166,10 @@ impl FromStr for FileSystem { #[cfg(test)] mod test { - use super::FileSystem; use std::str::FromStr; + use super::FileSystem; + #[test] fn file_system_from_str() { // Something supported diff --git a/src/data_collection/disks/unix/macos/io_kit/bindings.rs b/src/data_collection/disks/unix/macos/io_kit/bindings.rs index decc8a77..36576a60 100644 --- a/src/data_collection/disks/unix/macos/io_kit/bindings.rs +++ b/src/data_collection/disks/unix/macos/io_kit/bindings.rs @@ -5,11 +5,12 @@ //! //! Ideally, we can remove this if sysinfo ever gains disk I/O capabilities. -use core_foundation::base::{mach_port_t, CFAllocatorRef}; -use core_foundation::dictionary::CFMutableDictionaryRef; +use core_foundation::{ + base::{mach_port_t, CFAllocatorRef}, + dictionary::CFMutableDictionaryRef, +}; use libc::c_char; -use mach2::kern_return::kern_return_t; -use mach2::port::MACH_PORT_NULL; +use mach2::{kern_return::kern_return_t, port::MACH_PORT_NULL}; #[allow(non_camel_case_types)] pub type io_object_t = mach_port_t; diff --git a/src/data_collection/disks/unix/macos/io_kit/io_object.rs b/src/data_collection/disks/unix/macos/io_kit/io_object.rs index 0d567a86..af110f0c 100644 --- a/src/data_collection/disks/unix/macos/io_kit/io_object.rs +++ b/src/data_collection/disks/unix/macos/io_kit/io_object.rs @@ -4,13 +4,15 @@ use std::mem; use anyhow::{anyhow, bail}; -use core_foundation::base::{kCFAllocatorDefault, CFType, TCFType, ToVoid}; -use core_foundation::dictionary::{ - CFDictionary, CFDictionaryGetTypeID, CFDictionaryRef, CFMutableDictionary, - CFMutableDictionaryRef, +use core_foundation::{ + base::{kCFAllocatorDefault, CFType, TCFType, ToVoid}, + dictionary::{ + CFDictionary, CFDictionaryGetTypeID, CFDictionaryRef, CFMutableDictionary, + CFMutableDictionaryRef, + }, + number::{CFNumber, CFNumberGetTypeID}, + string::{CFString, CFStringGetTypeID}, }; -use core_foundation::number::{CFNumber, CFNumberGetTypeID}; -use core_foundation::string::{CFString, CFStringGetTypeID}; use mach2::kern_return; use super::bindings::*; diff --git a/src/data_collection/disks/windows.rs b/src/data_collection/disks/windows.rs index ae7bb025..3da4a866 100644 --- a/src/data_collection/disks/windows.rs +++ b/src/data_collection/disks/windows.rs @@ -4,7 +4,6 @@ use itertools::Itertools; use sysinfo::{DiskExt, SystemExt}; use super::{keep_disk_entry, DiskHarvest}; - use crate::data_collection::{disks::IoCounters, DataCollector}; mod bindings; diff --git a/src/data_collection/nvidia.rs b/src/data_collection/nvidia.rs index 7d0b4be5..f4e6aeec 100644 --- a/src/data_collection/nvidia.rs +++ b/src/data_collection/nvidia.rs @@ -1,15 +1,17 @@ use std::sync::OnceLock; use hashbrown::HashMap; -use nvml_wrapper::enum_wrappers::device::TemperatureSensor; -use nvml_wrapper::enums::device::UsedGpuMemory; -use nvml_wrapper::{error::NvmlError, Nvml}; +use nvml_wrapper::{ + enum_wrappers::device::TemperatureSensor, enums::device::UsedGpuMemory, error::NvmlError, Nvml, +}; -use crate::app::filter::Filter; - -use crate::app::layout_manager::UsedWidgets; -use crate::data_collection::memory::MemHarvest; -use crate::data_collection::temperature::{is_temp_filtered, TempHarvest, TemperatureType}; +use crate::{ + app::{filter::Filter, layout_manager::UsedWidgets}, + data_collection::{ + memory::MemHarvest, + temperature::{is_temp_filtered, TempHarvest, TemperatureType}, + }, +}; pub static NVML_DATA: OnceLock> = OnceLock::new(); diff --git a/src/data_collection/processes.rs b/src/data_collection/processes.rs index 7d042635..b6c4522d 100644 --- a/src/data_collection/processes.rs +++ b/src/data_collection/processes.rs @@ -3,11 +3,11 @@ //! For Linux, this is handled by a custom set of functions. //! For Windows, macOS, FreeBSD, Android, and Linux, this is handled by sysinfo. -use cfg_if::cfg_if; use std::{borrow::Cow, time::Duration}; -use super::DataCollector; +use cfg_if::cfg_if; +use super::DataCollector; use crate::{utils::error, Pid}; cfg_if! { diff --git a/src/data_collection/processes/freebsd.rs b/src/data_collection/processes/freebsd.rs index 0da933f5..f0a8262a 100644 --- a/src/data_collection/processes/freebsd.rs +++ b/src/data_collection/processes/freebsd.rs @@ -1,13 +1,14 @@ //! Process data collection for FreeBSD. Uses sysinfo. -use std::io; -use std::process::Command; +use std::{io, process::Command}; use hashbrown::HashMap; use serde::{Deserialize, Deserializer}; -use crate::data_collection::{deserialize_xo, processes::UnixProcessExt}; -use crate::Pid; +use crate::{ + data_collection::{deserialize_xo, processes::UnixProcessExt}, + Pid, +}; #[derive(Deserialize, Debug, Default)] #[serde(rename_all = "kebab-case")] diff --git a/src/data_collection/processes/linux.rs b/src/data_collection/processes/linux.rs index 0a1e9c64..6898f37e 100644 --- a/src/data_collection/processes/linux.rs +++ b/src/data_collection/processes/linux.rs @@ -1,19 +1,22 @@ //! Process data collection for Linux. mod process; -use process::*; - -use std::fs::{self, File}; -use std::io::{BufRead, BufReader}; -use std::time::Duration; +use std::{ + fs::{self, File}, + io::{BufRead, BufReader}, + time::Duration, +}; use hashbrown::HashSet; +use process::*; use sysinfo::ProcessStatus; use super::{ProcessHarvest, UserTable}; -use crate::data_collection::DataCollector; -use crate::utils::error::{self, BottomError}; -use crate::Pid; +use crate::{ + data_collection::DataCollector, + utils::error::{self, BottomError}, + Pid, +}; /// Maximum character length of a /proc//stat process name. /// If it's equal or greater, then we instead refer to the command for the name. diff --git a/src/data_collection/processes/macos.rs b/src/data_collection/processes/macos.rs index b895e1ec..036279c9 100644 --- a/src/data_collection/processes/macos.rs +++ b/src/data_collection/processes/macos.rs @@ -1,14 +1,12 @@ //! Process data collection for macOS. Uses sysinfo and custom bindings. -use std::io; -use std::process::Command; +use std::{io, process::Command}; use hashbrown::HashMap; use itertools::Itertools; use sysinfo::{PidExt, ProcessExt}; use super::UnixProcessExt; - use crate::Pid; mod sysctl_bindings; diff --git a/src/data_collection/processes/unix/process_ext.rs b/src/data_collection/processes/unix/process_ext.rs index c23c9ed3..4087c4da 100644 --- a/src/data_collection/processes/unix/process_ext.rs +++ b/src/data_collection/processes/unix/process_ext.rs @@ -1,7 +1,6 @@ //! Shared process data harvesting code from macOS and FreeBSD via sysinfo. -use std::io; -use std::time::Duration; +use std::{io, time::Duration}; use hashbrown::HashMap; use sysinfo::{CpuExt, PidExt, ProcessExt, ProcessStatus, System, SystemExt}; diff --git a/src/data_collection/processes/windows.rs b/src/data_collection/processes/windows.rs index 08309a55..7ed79580 100644 --- a/src/data_collection/processes/windows.rs +++ b/src/data_collection/processes/windows.rs @@ -5,7 +5,6 @@ use std::time::Duration; use sysinfo::{CpuExt, PidExt, ProcessExt, SystemExt, UserExt}; use super::ProcessHarvest; - use crate::data_collection::DataCollector; pub fn sysinfo_process_data( diff --git a/src/data_conversion.rs b/src/data_conversion.rs index 103e3a97..5d63a395 100644 --- a/src/data_conversion.rs +++ b/src/data_conversion.rs @@ -3,13 +3,13 @@ use kstring::KString; -use crate::app::{data_farmer::DataCollection, AxisScaling}; -use crate::components::tui_widget::time_chart::Point; -use crate::data_collection::{cpu::CpuDataType, memory::MemHarvest, temperature::TemperatureType}; -use crate::utils::data_prefixes::*; -use crate::utils::data_units::DataUnit; -use crate::utils::gen_util::*; -use crate::widgets::{DiskWidgetData, TempWidgetData}; +use crate::{ + app::{data_farmer::DataCollection, AxisScaling}, + canvas::tui_widgets::time_chart::Point, + data_collection::{cpu::CpuDataType, memory::MemHarvest, temperature::TemperatureType}, + utils::{data_prefixes::*, data_units::DataUnit, gen_util::*}, + widgets::{DiskWidgetData, TempWidgetData}, +}; #[derive(Debug, Default)] pub enum BatteryDuration { diff --git a/src/lib.rs b/src/lib.rs index 389143bc..51ed85de 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -16,10 +16,9 @@ use std::{ io::{stderr, stdout, Write}, panic::PanicInfo, path::PathBuf, - sync::Mutex, sync::{ mpsc::{Receiver, Sender}, - Arc, Condvar, + Arc, Condvar, Mutex, }, thread::{self, JoinHandle}, time::{Duration, Instant}, @@ -54,7 +53,6 @@ pub mod utils { } pub mod args; pub mod canvas; -pub mod components; pub mod constants; pub mod data_collection; pub mod data_conversion; diff --git a/src/options.rs b/src/options.rs index 92618400..1f3f46c9 100644 --- a/src/options.rs +++ b/src/options.rs @@ -11,13 +11,12 @@ use indexmap::IndexSet; use layout_options::*; use regex::Regex; use serde::{Deserialize, Serialize}; - #[cfg(feature = "battery")] use starship_battery::Manager; use crate::{ app::{filter::Filter, layout_manager::*, *}, - canvas::{canvas_styling::CanvasStyling, ColourScheme}, + canvas::{styling::CanvasStyling, ColourScheme}, constants::*, data_collection::temperature::TemperatureType, utils::{ @@ -33,9 +32,8 @@ mod process_columns; pub use process_columns::ProcessConfig; mod cpu; -pub use cpu::{CpuConfig, CpuDefault}; - use anyhow::{Context, Result}; +pub use cpu::{CpuConfig, CpuDefault}; #[derive(Clone, Debug, Default, Deserialize)] pub struct Config { @@ -918,7 +916,7 @@ mod test { use super::{get_color_scheme, get_time_interval, get_widget_layout, Config}; use crate::{ app::App, - canvas::canvas_styling::CanvasStyling, + canvas::styling::CanvasStyling, options::{ get_default_time_value, get_retention, get_update_rate, try_parse_ms, ConfigFlags, }, diff --git a/src/options/layout_options.rs b/src/options/layout_options.rs index 54a07f12..4b3e587a 100644 --- a/src/options/layout_options.rs +++ b/src/options/layout_options.rs @@ -1,7 +1,6 @@ use serde::{Deserialize, Serialize}; -use crate::app::layout_manager::*; -use crate::error::Result; +use crate::{app::layout_manager::*, error::Result}; /// Represents a row. This has a length of some sort (optional) and a vector /// of children. diff --git a/src/options/process_columns.rs b/src/options/process_columns.rs index 2ec9b50f..504faaf3 100644 --- a/src/options/process_columns.rs +++ b/src/options/process_columns.rs @@ -10,9 +10,8 @@ pub struct ProcessConfig { #[cfg(test)] mod test { - use crate::widgets::ProcWidgetColumn; - use super::ProcessConfig; + use crate::widgets::ProcWidgetColumn; #[test] fn empty_column_setting() { diff --git a/src/widgets/cpu_graph.rs b/src/widgets/cpu_graph.rs index 7187b2fe..d3a304f0 100644 --- a/src/widgets/cpu_graph.rs +++ b/src/widgets/cpu_graph.rs @@ -5,10 +5,13 @@ use tui::{style::Style, text::Text, widgets::Row}; use crate::{ app::AppConfigFields, - canvas::{canvas_styling::CanvasStyling, Painter}, - components::data_table::{ - Column, ColumnHeader, DataTable, DataTableColumn, DataTableProps, DataTableStyling, - DataToCell, + canvas::{ + styling::CanvasStyling, + tui_widgets::data_table::{ + Column, ColumnHeader, DataTable, DataTableColumn, DataTableProps, DataTableStyling, + DataToCell, + }, + Painter, }, data_collection::cpu::CpuDataType, data_conversion::CpuWidgetData, diff --git a/src/widgets/disk_table.rs b/src/widgets/disk_table.rs index cdbefd19..467abd6d 100644 --- a/src/widgets/disk_table.rs +++ b/src/widgets/disk_table.rs @@ -5,10 +5,12 @@ use tui::text::Text; use crate::{ app::AppConfigFields, - canvas::canvas_styling::CanvasStyling, - components::data_table::{ - ColumnHeader, DataTableColumn, DataTableProps, DataTableStyling, DataToCell, SortColumn, - SortDataTable, SortDataTableProps, SortOrder, SortsRow, + canvas::{ + styling::CanvasStyling, + tui_widgets::data_table::{ + ColumnHeader, DataTableColumn, DataTableProps, DataTableStyling, DataToCell, + SortColumn, SortDataTable, SortDataTableProps, SortOrder, SortsRow, + }, }, utils::gen_util::{get_decimal_bytes, sort_partial_fn, truncate_to_text}, }; diff --git a/src/widgets/process_table.rs b/src/widgets/process_table.rs index cf76d151..2818ad79 100644 --- a/src/widgets/process_table.rs +++ b/src/widgets/process_table.rs @@ -11,10 +11,12 @@ use crate::{ query::*, AppConfigFields, AppSearchState, }, - canvas::canvas_styling::CanvasStyling, - components::data_table::{ - Column, ColumnHeader, ColumnWidthBounds, DataTable, DataTableColumn, DataTableProps, - DataTableStyling, SortColumn, SortDataTable, SortDataTableProps, SortOrder, SortsRow, + canvas::{ + styling::CanvasStyling, + tui_widgets::data_table::{ + Column, ColumnHeader, ColumnWidthBounds, DataTable, DataTableColumn, DataTableProps, + DataTableStyling, SortColumn, SortDataTable, SortDataTableProps, SortOrder, SortsRow, + }, }, data_collection::processes::ProcessHarvest, Pid, diff --git a/src/widgets/process_table/proc_widget_column.rs b/src/widgets/process_table/proc_widget_column.rs index e68cad94..f9ebf18b 100644 --- a/src/widgets/process_table/proc_widget_column.rs +++ b/src/widgets/process_table/proc_widget_column.rs @@ -4,7 +4,7 @@ use serde::{de::Error, Deserialize, Serialize}; use super::ProcWidgetData; use crate::{ - components::data_table::{ColumnHeader, SortsRow}, + canvas::tui_widgets::data_table::{ColumnHeader, SortsRow}, utils::gen_util::sort_partial_fn, }; diff --git a/src/widgets/process_table/proc_widget_data.rs b/src/widgets/process_table/proc_widget_data.rs index c11a6d04..0286a08b 100644 --- a/src/widgets/process_table/proc_widget_data.rs +++ b/src/widgets/process_table/proc_widget_data.rs @@ -9,8 +9,10 @@ use tui::{text::Text, widgets::Row}; use super::proc_widget_column::ProcColumn; use crate::{ - canvas::Painter, - components::data_table::{DataTableColumn, DataToCell}, + canvas::{ + tui_widgets::data_table::{DataTableColumn, DataToCell}, + Painter, + }, data_collection::processes::ProcessHarvest, data_conversion::{binary_byte_string, dec_bytes_per_second_string, dec_bytes_string}, utils::gen_util::truncate_to_text, diff --git a/src/widgets/process_table/sort_table.rs b/src/widgets/process_table/sort_table.rs index 30adb753..53a72b90 100644 --- a/src/widgets/process_table/sort_table.rs +++ b/src/widgets/process_table/sort_table.rs @@ -3,7 +3,7 @@ use std::borrow::Cow; use tui::text::Text; use crate::{ - components::data_table::{ColumnHeader, DataTableColumn, DataToCell}, + canvas::tui_widgets::data_table::{ColumnHeader, DataTableColumn, DataToCell}, utils::gen_util::truncate_to_text, }; diff --git a/src/widgets/temperature_table.rs b/src/widgets/temperature_table.rs index a9bed5ba..1446185d 100644 --- a/src/widgets/temperature_table.rs +++ b/src/widgets/temperature_table.rs @@ -6,10 +6,12 @@ use tui::text::Text; use crate::{ app::AppConfigFields, - canvas::canvas_styling::CanvasStyling, - components::data_table::{ - ColumnHeader, DataTableColumn, DataTableProps, DataTableStyling, DataToCell, SortColumn, - SortDataTable, SortDataTableProps, SortOrder, SortsRow, + canvas::{ + styling::CanvasStyling, + tui_widgets::data_table::{ + ColumnHeader, DataTableColumn, DataTableProps, DataTableStyling, DataToCell, + SortColumn, SortDataTable, SortDataTableProps, SortOrder, SortsRow, + }, }, data_collection::temperature::TemperatureType, utils::gen_util::{sort_partial_fn, truncate_to_text}, diff --git a/tests/layout_management_tests.rs b/tests/layout_management_tests.rs index 811c7315..2d4b617b 100644 --- a/tests/layout_management_tests.rs +++ b/tests/layout_management_tests.rs @@ -1,11 +1,13 @@ //! Mocks layout management, so we can check if we broke anything. -use bottom::app::layout_manager::{BottomLayout, BottomWidgetType}; #[cfg(feature = "battery")] use bottom::constants::DEFAULT_BATTERY_LAYOUT; -use bottom::constants::{DEFAULT_LAYOUT, DEFAULT_WIDGET_ID}; -use bottom::options::{layout_options::Row, Config}; -use bottom::utils::error; +use bottom::{ + app::layout_manager::{BottomLayout, BottomWidgetType}, + constants::{DEFAULT_LAYOUT, DEFAULT_WIDGET_ID}, + options::{layout_options::Row, Config}, + utils::error, +}; use toml_edit::de::from_str; // TODO: Could move these into the library files rather than external tbh.