Skip to main content

mago_syntax/ast/ast/
echo.rs

1use serde::Serialize;
2
3use mago_span::HasSpan;
4use mago_span::Span;
5
6use crate::ast::ast::expression::Expression;
7use crate::ast::ast::keyword::Keyword;
8use crate::ast::ast::terminator::Terminator;
9use crate::ast::sequence::TokenSeparatedSequence;
10
11/// Represents a PHP `<?=` statement.
12///
13/// # Examples
14///
15/// ```php
16/// <?= "Hello, World!" ?>
17/// <?= $a, $b, $c;
18/// ```
19#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, PartialOrd, Ord)]
20pub struct EchoTag<'arena> {
21    pub tag: Span,
22    pub values: TokenSeparatedSequence<'arena, &'arena Expression<'arena>>,
23    pub terminator: Terminator<'arena>,
24}
25
26/// Represents a PHP `echo` statement.
27///
28/// # Examples
29///
30/// ```php
31/// <?php
32///
33/// echo "Hello, World!";
34/// echo $a, $b, $c;
35/// ```
36#[derive(Debug, Clone, Eq, PartialEq, Hash, Serialize, PartialOrd, Ord)]
37pub struct Echo<'arena> {
38    pub echo: Keyword<'arena>,
39    pub values: TokenSeparatedSequence<'arena, &'arena Expression<'arena>>,
40    pub terminator: Terminator<'arena>,
41}
42
43impl HasSpan for EchoTag<'_> {
44    fn span(&self) -> Span {
45        self.tag.join(self.terminator.span())
46    }
47}
48
49impl HasSpan for Echo<'_> {
50    fn span(&self) -> Span {
51        self.echo.span().join(self.terminator.span())
52    }
53}