galvan_ast/item/
assignment.rs1use galvan_ast_macro::AstNode;
2
3use crate::{AstNode, PrintAst, Span};
4
5use super::*;
6
7#[derive(Clone, Debug, PartialEq, Eq, AstNode)]
8pub struct Assignment {
9 pub target: Expression,
10 pub operator: AssignmentOperator,
11 pub expression: Expression,
12 pub span: Span,
13}
14
15#[derive(Clone, Debug, PartialEq, Eq)]
16pub enum AssignmentOperator {
17 Assign,
18 AddAssign,
19 SubAssign,
20 MulAssign,
21 DivAssign,
22 RemAssign,
23 PowAssign,
24 ConcatAssign,
25}
26
27impl PrintAst for AssignmentOperator {
28 fn print_ast(&self, indent: usize) -> String {
29 let indent_str = " ".repeat(indent);
30 let op = match self {
31 AssignmentOperator::Assign => "=",
32 AssignmentOperator::AddAssign => "+=",
33 AssignmentOperator::SubAssign => "-=",
34 AssignmentOperator::MulAssign => "*=",
35 AssignmentOperator::DivAssign => "/=",
36 AssignmentOperator::RemAssign => "%=",
37 AssignmentOperator::PowAssign => "**=",
38 AssignmentOperator::ConcatAssign => "++=",
39 };
40
41 format!("{indent_str}{op}")
42 }
43}