bytebraise_syntax/syntax/ast/
tokens.rs1use crate::syntax::ast::{AstToken, SyntaxKind, SyntaxToken};
2
3use std::fmt::Debug;
4
5use crate::ast_token;
6
7ast_token!(Identifier, Identifier);
8ast_token!(Task, Task);
9ast_token!(Python, Python);
10ast_token!(Fakeroot, Fakeroot);
11ast_token!(DoubleQuotedValue, DoubleQuotedValue);
12ast_token!(SingleQuotedValue, SingleQuotedValue);
13ast_token!(Export, Export);
14ast_token!(UnquotedValue, UnquotedValue);
15ast_token!(DirectiveArgument, DirectiveArgument);
16
17ast_token!(Equals, Equals);
18ast_token!(EqualsPlus, EqualsPlus);
19ast_token!(EqualsDot, EqualsDot);
20ast_token!(DotEquals, DotEquals);
21ast_token!(PlusEquals, PlusEquals);
22ast_token!(DefaultEquals, DefaultEquals);
23ast_token!(WeakEquals, WeakEquals);
24ast_token!(ColonEquals, ColonEquals);
25
26ast_token!(PythonDefKeyword, PythonDefKeyword);
27ast_token!(PythonDefFunctionName, PythonDefFunctionName);
28ast_token!(PythonDefFunctionArgs, PythonDefFunctionArgs);
29ast_token!(Colon, Colon);
30ast_token!(PythonDefFunctionBody, PythonDefFunctionBody);
31
32ast_token!(Varflag, Varflag);
33impl Varflag {
34 pub fn value(&self) -> &str {
35 let len = self.text().len();
37 &self.text()[1..len - 1]
38 }
39}
40
41#[derive(Debug, Clone, PartialEq, Eq, Hash)]
42pub enum AssignmentOperator {
43 Equals(Equals),
44 EqualsPlus(EqualsPlus),
45 EqualsDot(EqualsDot),
46 DotEquals(DotEquals),
47 PlusEquals(PlusEquals),
48 DefaultEquals(DefaultEquals),
49 WeakEquals(WeakEquals),
50 ColonEquals(ColonEquals),
51}
52
53impl AstToken for AssignmentOperator {
54 fn can_cast(token: SyntaxKind) -> bool
55 where
56 Self: Sized,
57 {
58 token.is_assignment_operator()
59 }
60
61 fn cast(syntax: SyntaxToken) -> Option<Self>
62 where
63 Self: Sized,
64 {
65 let ret = match syntax.kind() {
66 SyntaxKind::ColonEquals => AssignmentOperator::ColonEquals(ColonEquals { syntax }),
67 SyntaxKind::DefaultEquals => {
68 AssignmentOperator::DefaultEquals(DefaultEquals { syntax })
69 }
70 SyntaxKind::DotEquals => AssignmentOperator::DotEquals(DotEquals { syntax }),
71 SyntaxKind::Equals => AssignmentOperator::Equals(Equals { syntax }),
72 SyntaxKind::EqualsDot => AssignmentOperator::EqualsDot(EqualsDot { syntax }),
73 SyntaxKind::EqualsPlus => AssignmentOperator::EqualsPlus(EqualsPlus { syntax }),
74 SyntaxKind::PlusEquals => AssignmentOperator::PlusEquals(PlusEquals { syntax }),
75 SyntaxKind::WeakEquals => AssignmentOperator::WeakEquals(WeakEquals { syntax }),
76 _ => return None,
77 };
78
79 Some(ret)
80 }
81
82 fn syntax(&self) -> &SyntaxToken {
83 match self {
84 AssignmentOperator::Equals(it) => &it.syntax,
85 AssignmentOperator::EqualsPlus(it) => &it.syntax,
86 AssignmentOperator::EqualsDot(it) => &it.syntax,
87 AssignmentOperator::DotEquals(it) => &it.syntax,
88 AssignmentOperator::PlusEquals(it) => &it.syntax,
89 AssignmentOperator::DefaultEquals(it) => &it.syntax,
90 AssignmentOperator::WeakEquals(it) => &it.syntax,
91 AssignmentOperator::ColonEquals(it) => &it.syntax,
92 }
93 }
94}