Skip to main content

rustidy_util/
whitespace.rs

1//! Whitespace
2
3// Imports
4use crate::{ArenaData, ArenaIdx, AstStr};
5
6/// Whitespace
7#[derive(PartialEq, Eq, Clone, Debug)]
8#[derive(serde::Serialize, serde::Deserialize)]
9pub struct Whitespace(pub ArenaIdx<WhitespaceInner>);
10
11impl Whitespace {
12	/// Creates an empty whitespace
13	#[must_use]
14	pub fn empty() -> Self {
15		let inner = WhitespaceInner {
16			first: PureWhitespace(AstStr::new("")),
17			rest: vec![],
18		};
19		let idx = ArenaIdx::new(inner);
20
21		Self(idx)
22	}
23
24	/// Clears this whitespace
25	pub fn clear(&mut self) {
26		self.0.first.0.replace("");
27		self.0.rest.clear();
28	}
29}
30
31#[derive(PartialEq, Eq, Clone, Debug)]
32#[derive(ArenaData)]
33#[derive(serde::Serialize, serde::Deserialize)]
34pub struct WhitespaceInner {
35	pub first: PureWhitespace,
36	pub rest:  Vec<(Comment, PureWhitespace)>,
37}
38
39/// Comment
40#[derive(PartialEq, Eq, Clone, Debug)]
41#[derive(strum::EnumIs)]
42#[derive(serde::Serialize, serde::Deserialize)]
43pub enum Comment {
44	Line(LineComment),
45	Block(BlockComment),
46}
47
48/// Block Comment
49#[derive(PartialEq, Eq, Clone, Debug)]
50#[derive(serde::Serialize, serde::Deserialize)]
51pub struct BlockComment(pub AstStr);
52
53/// Line comment
54#[derive(PartialEq, Eq, Clone, Debug)]
55#[derive(serde::Serialize, serde::Deserialize)]
56pub struct LineComment(pub AstStr);
57
58/// Pure whitespace
59#[derive(PartialEq, Eq, Clone, Debug)]
60#[derive(serde::Serialize, serde::Deserialize)]
61pub struct PureWhitespace(pub AstStr);