From 07bec55b7d55fab338f9ab8571a80277d4890753 Mon Sep 17 00:00:00 2001 From: Edwin Burwell <81470842+ed-2100@users.noreply.github.com> Date: Tue, 15 Apr 2025 11:14:25 -0500 Subject: [PATCH] refactor(no_std): Make usages of std explicit in ratatui-core. (#1782) ### This commit does the following: - Adds `#[no_std]` to `lib.rs`. - Adds `extern crate std;` to `lib.rs`. - Updates `ratatui-core` to explicitly `use` items from std and alloc. - Prefers `use`-ing alloc over std when possible. ### Explanation: This allows usages of `std` in `ratatui-core` to be clearly pointed out and dealt with individually. Eventually, when `std` is to be feature gated, the associated commit will be much cleaner. --- ratatui-core/src/backend.rs | 3 +++ ratatui-core/src/backend/test.rs | 4 ++++ ratatui-core/src/buffer/assert.rs | 4 ++-- ratatui-core/src/buffer/buffer.rs | 5 +++++ ratatui-core/src/layout/alignment.rs | 2 ++ ratatui-core/src/layout/constraint.rs | 4 ++++ ratatui-core/src/layout/direction.rs | 2 ++ ratatui-core/src/layout/layout.rs | 9 +++++++++ ratatui-core/src/layout/margin.rs | 2 ++ ratatui-core/src/layout/position.rs | 2 ++ ratatui-core/src/layout/rect.rs | 4 ++++ ratatui-core/src/layout/size.rs | 2 ++ ratatui-core/src/lib.rs | 3 +++ ratatui-core/src/style.rs | 2 ++ ratatui-core/src/style/color.rs | 7 +++++++ ratatui-core/src/style/stylize.rs | 3 +++ ratatui-core/src/symbols/border.rs | 3 +++ ratatui-core/src/symbols/line.rs | 3 +++ ratatui-core/src/symbols/marker.rs | 2 ++ ratatui-core/src/terminal/terminal.rs | 2 +- ratatui-core/src/terminal/viewport.rs | 2 ++ ratatui-core/src/text/line.rs | 5 +++++ ratatui-core/src/text/masked.rs | 2 ++ ratatui-core/src/text/span.rs | 4 ++++ ratatui-core/src/text/text.rs | 6 +++++- ratatui-core/src/widgets/stateful_widget.rs | 3 +++ ratatui-core/src/widgets/widget.rs | 2 ++ 27 files changed, 88 insertions(+), 4 deletions(-) diff --git a/ratatui-core/src/backend.rs b/ratatui-core/src/backend.rs index 67b5ed71..403e50f1 100644 --- a/ratatui-core/src/backend.rs +++ b/ratatui-core/src/backend.rs @@ -100,6 +100,7 @@ //! [Examples]: https://github.com/ratatui/ratatui/tree/main/ratatui/examples/README.md //! [Backend Comparison]: https://ratatui.rs/concepts/backends/comparison/ //! [Ratatui Website]: https://ratatui.rs +use alloc::format; use std::io; use strum::{Display, EnumString}; @@ -375,6 +376,8 @@ pub trait Backend { #[cfg(test)] mod tests { + use alloc::string::ToString; + use strum::ParseError; use super::*; diff --git a/ratatui-core/src/backend/test.rs b/ratatui-core/src/backend/test.rs index e451139c..8b6814a5 100644 --- a/ratatui-core/src/backend/test.rs +++ b/ratatui-core/src/backend/test.rs @@ -1,6 +1,8 @@ //! This module provides the `TestBackend` implementation for the [`Backend`] trait. //! It is used in the integration tests to verify the correctness of the library. +use alloc::string::String; +use alloc::vec; use core::fmt::{self, Write}; use core::iter; use std::io; @@ -456,6 +458,8 @@ fn append_to_scrollback(scrollback: &mut Buffer, cells: impl IntoIterator>() + .collect::<::alloc::vec::Vec<::alloc::string::String>>() .join("\n"); assert!( nice_diff.is_empty(), diff --git a/ratatui-core/src/buffer/buffer.rs b/ratatui-core/src/buffer/buffer.rs index 1a0cbf6b..c27b4950 100644 --- a/ratatui-core/src/buffer/buffer.rs +++ b/ratatui-core/src/buffer/buffer.rs @@ -1,3 +1,5 @@ +use alloc::vec; +use alloc::vec::Vec; use core::ops::{Index, IndexMut}; use core::{cmp, fmt}; @@ -638,7 +640,10 @@ impl fmt::Debug for Buffer { #[cfg(test)] mod tests { + use alloc::format; + use alloc::string::ToString; use core::iter; + use std::{dbg, println}; use itertools::Itertools; use rstest::{fixture, rstest}; diff --git a/ratatui-core/src/layout/alignment.rs b/ratatui-core/src/layout/alignment.rs index 7b6553cb..849c9850 100644 --- a/ratatui-core/src/layout/alignment.rs +++ b/ratatui-core/src/layout/alignment.rs @@ -31,6 +31,8 @@ pub enum VerticalAlignment { #[cfg(test)] mod tests { + use alloc::string::ToString; + use strum::ParseError; use super::*; diff --git a/ratatui-core/src/layout/constraint.rs b/ratatui-core/src/layout/constraint.rs index 14add10e..57aaa4d6 100644 --- a/ratatui-core/src/layout/constraint.rs +++ b/ratatui-core/src/layout/constraint.rs @@ -1,3 +1,4 @@ +use alloc::vec::Vec; use core::fmt; use strum::EnumIs; @@ -382,6 +383,9 @@ impl fmt::Display for Constraint { #[cfg(test)] mod tests { + use alloc::string::ToString; + use alloc::vec; + use super::*; #[test] diff --git a/ratatui-core/src/layout/direction.rs b/ratatui-core/src/layout/direction.rs index 7cebfb9f..a4c663e3 100644 --- a/ratatui-core/src/layout/direction.rs +++ b/ratatui-core/src/layout/direction.rs @@ -9,6 +9,8 @@ pub enum Direction { #[cfg(test)] mod tests { + use alloc::string::ToString; + use strum::ParseError; use super::*; diff --git a/ratatui-core/src/layout/layout.rs b/ratatui-core/src/layout/layout.rs index c3bc8b88..a4a58775 100644 --- a/ratatui-core/src/layout/layout.rs +++ b/ratatui-core/src/layout/layout.rs @@ -1,7 +1,10 @@ +use alloc::format; use alloc::rc::Rc; +use alloc::vec::Vec; use core::cell::RefCell; use core::iter; use core::num::NonZeroUsize; +use std::{dbg, thread_local}; use hashbrown::HashMap; use itertools::Itertools; @@ -1172,6 +1175,10 @@ mod strengths { #[cfg(test)] mod tests { + use alloc::borrow::ToOwned; + use alloc::vec; + use alloc::vec::Vec; + use super::*; #[test] @@ -1403,12 +1410,14 @@ mod tests { /// - underflow: constraint is for less than the full space /// - overflow: constraint is for more than the full space mod split { + use alloc::string::ToString; use core::ops::Range; use itertools::Itertools; use pretty_assertions::assert_eq; use rstest::rstest; + use super::*; use crate::buffer::Buffer; use crate::layout::Constraint::{self, *}; use crate::layout::{Direction, Flex, Layout, Rect}; diff --git a/ratatui-core/src/layout/margin.rs b/ratatui-core/src/layout/margin.rs index cc60fd45..1b220dc1 100644 --- a/ratatui-core/src/layout/margin.rs +++ b/ratatui-core/src/layout/margin.rs @@ -24,6 +24,8 @@ impl fmt::Display for Margin { #[cfg(test)] mod tests { + use alloc::string::ToString; + use super::*; #[test] diff --git a/ratatui-core/src/layout/position.rs b/ratatui-core/src/layout/position.rs index 462ce941..9b3a7d2b 100644 --- a/ratatui-core/src/layout/position.rs +++ b/ratatui-core/src/layout/position.rs @@ -75,6 +75,8 @@ impl fmt::Display for Position { #[cfg(test)] mod tests { + use alloc::string::ToString; + use super::*; #[test] diff --git a/ratatui-core/src/layout/rect.rs b/ratatui-core/src/layout/rect.rs index cb7d0664..d572b3aa 100644 --- a/ratatui-core/src/layout/rect.rs +++ b/ratatui-core/src/layout/rect.rs @@ -377,6 +377,10 @@ impl From<(Position, Size)> for Rect { #[cfg(test)] mod tests { + use alloc::string::ToString; + use alloc::vec; + use alloc::vec::Vec; + use rstest::rstest; use super::*; diff --git a/ratatui-core/src/layout/size.rs b/ratatui-core/src/layout/size.rs index 776c7fbd..688efac6 100644 --- a/ratatui-core/src/layout/size.rs +++ b/ratatui-core/src/layout/size.rs @@ -46,6 +46,8 @@ impl fmt::Display for Size { #[cfg(test)] mod tests { + use alloc::string::ToString; + use super::*; #[test] diff --git a/ratatui-core/src/lib.rs b/ratatui-core/src/lib.rs index eeab199b..22bb65d9 100644 --- a/ratatui-core/src/lib.rs +++ b/ratatui-core/src/lib.rs @@ -1,3 +1,4 @@ +#![no_std] // show the feature flags in the generated documentation #![cfg_attr(docsrs, feature(doc_cfg))] #![cfg_attr(docsrs, feature(doc_auto_cfg))] @@ -42,6 +43,8 @@ #![warn(clippy::std_instead_of_alloc)] #![warn(clippy::alloc_instead_of_core)] +extern crate std; + extern crate alloc; pub mod backend; diff --git a/ratatui-core/src/style.rs b/ratatui-core/src/style.rs index 15450828..d62f1dbf 100644 --- a/ratatui-core/src/style.rs +++ b/ratatui-core/src/style.rs @@ -632,6 +632,8 @@ impl From<(Color, Color, Modifier, Modifier)> for Style { #[cfg(test)] mod tests { + use alloc::format; + use rstest::rstest; use super::*; diff --git a/ratatui-core/src/style/color.rs b/ratatui-core/src/style/color.rs index 9a3709fe..17f32c55 100644 --- a/ratatui-core/src/style/color.rs +++ b/ratatui-core/src/style/color.rs @@ -145,6 +145,8 @@ impl serde::Serialize for Color { where S: serde::Serializer, { + use alloc::string::ToString; + serializer.serialize_str(&self.to_string()) } } @@ -206,6 +208,9 @@ impl<'de> serde::Deserialize<'de> for Color { where D: serde::Deserializer<'de>, { + use alloc::format; + use alloc::string::String; + /// Colors are currently serialized with the `Display` implementation, so /// RGB values are serialized via hex, for example "#FFFFFF". /// @@ -505,6 +510,8 @@ impl From<(u8, u8, u8, u8)> for Color { #[cfg(test)] mod tests { + use alloc::boxed::Box; + use alloc::format; use core::error::Error; #[cfg(feature = "palette")] diff --git a/ratatui-core/src/style/stylize.rs b/ratatui-core/src/style/stylize.rs index 4196360f..05e6adaa 100644 --- a/ratatui-core/src/style/stylize.rs +++ b/ratatui-core/src/style/stylize.rs @@ -1,4 +1,5 @@ use alloc::borrow::Cow; +use alloc::string::{String, ToString}; use core::fmt; use crate::style::{Color, Modifier, Style}; @@ -369,6 +370,8 @@ styled!(usize); #[cfg(test)] mod tests { + use alloc::format; + use itertools::Itertools; use rstest::rstest; diff --git a/ratatui-core/src/symbols/border.rs b/ratatui-core/src/symbols/border.rs index 092ae89c..73831d06 100644 --- a/ratatui-core/src/symbols/border.rs +++ b/ratatui-core/src/symbols/border.rs @@ -365,6 +365,9 @@ pub const EMPTY: Set = Set { #[cfg(test)] mod tests { + use alloc::format; + use alloc::string::String; + use indoc::{formatdoc, indoc}; use super::*; diff --git a/ratatui-core/src/symbols/line.rs b/ratatui-core/src/symbols/line.rs index 54e4c0a9..d6224111 100644 --- a/ratatui-core/src/symbols/line.rs +++ b/ratatui-core/src/symbols/line.rs @@ -167,6 +167,9 @@ pub const HEAVY_QUADRUPLE_DASHED: Set = Set { #[cfg(test)] mod tests { + use alloc::format; + use alloc::string::String; + use indoc::{formatdoc, indoc}; use super::*; diff --git a/ratatui-core/src/symbols/marker.rs b/ratatui-core/src/symbols/marker.rs index 0505eb60..08d2ac1c 100644 --- a/ratatui-core/src/symbols/marker.rs +++ b/ratatui-core/src/symbols/marker.rs @@ -29,6 +29,8 @@ pub enum Marker { #[cfg(test)] mod tests { + use alloc::string::ToString; + use strum::ParseError; use super::*; diff --git a/ratatui-core/src/terminal/terminal.rs b/ratatui-core/src/terminal/terminal.rs index b9975bec..aa43faf0 100644 --- a/ratatui-core/src/terminal/terminal.rs +++ b/ratatui-core/src/terminal/terminal.rs @@ -1,4 +1,4 @@ -use std::io; +use std::{eprintln, io}; use crate::backend::{Backend, ClearType}; use crate::buffer::{Buffer, Cell}; diff --git a/ratatui-core/src/terminal/viewport.rs b/ratatui-core/src/terminal/viewport.rs index 71307464..2fee7508 100644 --- a/ratatui-core/src/terminal/viewport.rs +++ b/ratatui-core/src/terminal/viewport.rs @@ -42,6 +42,8 @@ impl fmt::Display for Viewport { #[cfg(test)] mod tests { + use alloc::string::ToString; + use super::*; #[test] diff --git a/ratatui-core/src/text/line.rs b/ratatui-core/src/text/line.rs index 4e4b3ab4..629e56a8 100644 --- a/ratatui-core/src/text/line.rs +++ b/ratatui-core/src/text/line.rs @@ -1,6 +1,9 @@ #![deny(missing_docs)] #![warn(clippy::pedantic, clippy::nursery, clippy::arithmetic_side_effects)] use alloc::borrow::Cow; +use alloc::string::{String, ToString}; +use alloc::vec; +use alloc::vec::Vec; use core::fmt; use unicode_truncate::UnicodeTruncateStr; @@ -831,7 +834,9 @@ impl Styled for Line<'_> { #[cfg(test)] mod tests { + use alloc::format; use core::iter; + use std::dbg; use rstest::{fixture, rstest}; diff --git a/ratatui-core/src/text/masked.rs b/ratatui-core/src/text/masked.rs index 4c9d4355..c6c4b47c 100644 --- a/ratatui-core/src/text/masked.rs +++ b/ratatui-core/src/text/masked.rs @@ -88,6 +88,8 @@ impl<'a> From> for Text<'a> { #[cfg(test)] mod tests { + use alloc::format; + use super::*; use crate::text::Line; diff --git a/ratatui-core/src/text/span.rs b/ratatui-core/src/text/span.rs index dba6fe78..592582e5 100644 --- a/ratatui-core/src/text/span.rs +++ b/ratatui-core/src/text/span.rs @@ -1,4 +1,5 @@ use alloc::borrow::Cow; +use alloc::string::ToString; use core::fmt; use unicode_segmentation::UnicodeSegmentation; @@ -494,6 +495,9 @@ impl fmt::Display for Span<'_> { #[cfg(test)] mod tests { + use alloc::string::String; + use alloc::{format, vec}; + use rstest::{fixture, rstest}; use super::*; diff --git a/ratatui-core/src/text/text.rs b/ratatui-core/src/text/text.rs index 35cbc454..f7ee5eef 100644 --- a/ratatui-core/src/text/text.rs +++ b/ratatui-core/src/text/text.rs @@ -1,5 +1,8 @@ #![warn(missing_docs)] -use alloc::borrow::Cow; +use alloc::borrow::{Cow, ToOwned}; +use alloc::string::{String, ToString}; +use alloc::vec; +use alloc::vec::Vec; use core::fmt; use crate::buffer::Buffer; @@ -743,6 +746,7 @@ impl Styled for Text<'_> { #[cfg(test)] mod tests { + use alloc::format; use core::iter; use rstest::{fixture, rstest}; diff --git a/ratatui-core/src/widgets/stateful_widget.rs b/ratatui-core/src/widgets/stateful_widget.rs index 2f973d53..0b4fd4fd 100644 --- a/ratatui-core/src/widgets/stateful_widget.rs +++ b/ratatui-core/src/widgets/stateful_widget.rs @@ -130,6 +130,9 @@ pub trait StatefulWidget { #[cfg(test)] mod tests { + use alloc::format; + use alloc::string::{String, ToString}; + use rstest::{fixture, rstest}; use super::*; diff --git a/ratatui-core/src/widgets/widget.rs b/ratatui-core/src/widgets/widget.rs index f88350aa..4169d887 100644 --- a/ratatui-core/src/widgets/widget.rs +++ b/ratatui-core/src/widgets/widget.rs @@ -1,3 +1,5 @@ +use alloc::string::String; + use crate::buffer::Buffer; use crate::layout::Rect; use crate::style::Style;