Skip to main content

rustidy_ast/expr/without_block/
range.rs

1//! Range
2
3
4// Imports
5use {
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/// `RangeExpression`
15#[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/// `RangeExpr`
37#[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/// `RangeFromExpr`
53#[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/// `RangeToExpr`
67#[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/// `RangeFullExpr`
80#[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/// `RangeInclusiveExpr`
87#[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/// `RangeToInclusiveExpr`
103#[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}