rustidy_util/
whitespace.rs1use crate::{ArenaData, ArenaIdx, AstStr};
5
6#[derive(PartialEq, Eq, Clone, Debug)]
8#[derive(serde::Serialize, serde::Deserialize)]
9pub struct Whitespace(pub ArenaIdx<WhitespaceInner>);
10
11impl Whitespace {
12 #[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 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#[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#[derive(PartialEq, Eq, Clone, Debug)]
50#[derive(serde::Serialize, serde::Deserialize)]
51pub struct BlockComment(pub AstStr);
52
53#[derive(PartialEq, Eq, Clone, Debug)]
55#[derive(serde::Serialize, serde::Deserialize)]
56pub struct LineComment(pub AstStr);
57
58#[derive(PartialEq, Eq, Clone, Debug)]
60#[derive(serde::Serialize, serde::Deserialize)]
61pub struct PureWhitespace(pub AstStr);