rustidy_ast/expr/without_block/
range.rs1use {
6 crate::{expr::{Expression, ExpressionInner}, token},
7 super::ExpressionWithoutBlockInner,
8 rustidy_format::{Format, Formattable, WhitespaceFormat},
9 rustidy_parse::{Parse, ParseRecursive, ParserTag},
10 rustidy_print::Print,
11 rustidy_util::Whitespace,
12};
13
14#[derive(PartialEq, Eq, Clone, Debug)]
16#[derive(derive_more::From, derive_more::TryInto)]
17#[derive(serde::Serialize, serde::Deserialize)]
18#[derive(ParseRecursive, Formattable, Format, Print)]
19#[parse_recursive(root = ExpressionInner)]
20#[parse_recursive(into_root = ExpressionWithoutBlockInner)]
21pub enum RangeExpression {
22 #[parse_recursive(recursive)]
23 Inclusive(RangeInclusiveExpr),
24 #[parse_recursive(recursive)]
25 ToInclusive(RangeToInclusiveExpr),
26
27 #[parse_recursive(recursive)]
28 Both(RangeExpr),
29 #[parse_recursive(recursive)]
30 From(RangeFromExpr),
31 #[parse_recursive(recursive)]
32 To(RangeToExpr),
33 Full(RangeFullExpr),
34}
35
36#[derive(PartialEq, Eq, Clone, Debug)]
38#[derive(serde::Serialize, serde::Deserialize)]
39#[derive(ParseRecursive, Formattable, Format, Print)]
40#[parse_recursive(root = ExpressionInner)]
41#[parse_recursive(into_root = RangeExpression)]
42#[parse_recursive(kind = "fully")]
43#[parse_recursive(skip_if_tag = ParserTag::SkipRangeExpr)]
44pub struct RangeExpr {
45 pub lhs: Expression,
46 #[format(prefix_ws = Whitespace::REMOVE)]
47 pub dot_dot: token::DotDot,
48 #[format(prefix_ws = Whitespace::REMOVE)]
49 pub rhs: Expression,
50}
51
52#[derive(PartialEq, Eq, Clone, Debug)]
54#[derive(serde::Serialize, serde::Deserialize)]
55#[derive(ParseRecursive, Formattable, Format, Print)]
56#[parse_recursive(root = ExpressionInner)]
57#[parse_recursive(into_root = RangeExpression)]
58#[parse_recursive(kind = "left")]
59#[parse_recursive(skip_if_tag = ParserTag::SkipRangeFromExpr)]
60pub struct RangeFromExpr {
61 pub lhs: Expression,
62 #[format(prefix_ws = Whitespace::REMOVE)]
63 pub dot_dot: token::DotDot,
64}
65
66#[derive(PartialEq, Eq, Clone, Debug)]
68#[derive(serde::Serialize, serde::Deserialize)]
69#[derive(ParseRecursive, Formattable, Format, Print)]
70#[parse_recursive(root = ExpressionInner)]
71#[parse_recursive(into_root = RangeExpression)]
72#[parse_recursive(kind = "right")]
73pub struct RangeToExpr {
74 pub dot_dot: token::DotDot,
75 #[format(prefix_ws = Whitespace::REMOVE)]
76 pub rhs: Expression,
77}
78
79#[derive(PartialEq, Eq, Clone, Debug)]
81#[derive(serde::Serialize, serde::Deserialize)]
82#[derive(Parse, Formattable, Format, Print)]
83pub struct RangeFullExpr(token::DotDot);
84
85
86#[derive(PartialEq, Eq, Clone, Debug)]
88#[derive(serde::Serialize, serde::Deserialize)]
89#[derive(ParseRecursive, Formattable, Format, Print)]
90#[parse_recursive(root = ExpressionInner)]
91#[parse_recursive(into_root = RangeExpression)]
92#[parse_recursive(kind = "fully")]
93#[parse_recursive(skip_if_tag = ParserTag::SkipRangeInclusiveExpr)]
94pub struct RangeInclusiveExpr {
95 pub lhs: Expression,
96 #[format(prefix_ws = Whitespace::REMOVE)]
97 pub dot_dot_eq: token::DotDotEq,
98 #[format(prefix_ws = Whitespace::REMOVE)]
99 pub rhs: Expression,
100}
101
102#[derive(PartialEq, Eq, Clone, Debug)]
104#[derive(serde::Serialize, serde::Deserialize)]
105#[derive(ParseRecursive, Formattable, Format, Print)]
106#[parse_recursive(root = ExpressionInner)]
107#[parse_recursive(into_root = RangeExpression)]
108#[parse_recursive(kind = "right")]
109pub struct RangeToInclusiveExpr {
110 pub dot_dot_eq: token::DotDotEq,
111 #[format(prefix_ws = Whitespace::REMOVE)]
112 pub rhs: Expression,
113}