galvan_ast/item/
assignment.rs

1use 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}