Enum ezno_parser::expressions::Expression
source · pub enum Expression {
Show 38 variants
NumberLiteral(NumberStructure, Span, ExpressionId),
StringLiteral(String, Quoted, Span, ExpressionId),
BooleanLiteral(bool, Span, ExpressionId),
ArrayLiteral(Vec<SpreadExpression>, Span, ExpressionId),
ObjectLiteral(ObjectLiteral),
TemplateLiteral(TemplateLiteral),
ParenthesizedExpression(Box<MultipleExpression>, Span, ExpressionId),
BinaryOperation {
lhs: Box<Expression>,
operator: BinaryOperator,
rhs: Box<Expression>,
id: ExpressionId,
},
SpecialOperators(SpecialOperators, Span, ExpressionId),
UnaryOperation {
operator: UnaryOperator,
operand: Box<Expression>,
position: Span,
id: ExpressionId,
},
Assignment {
lhs: LHSOfAssignment,
rhs: Box<Expression>,
id: ExpressionId,
},
BinaryAssignmentOperation {
lhs: VariableOrPropertyAccess,
operator: BinaryAssignmentOperator,
rhs: Box<Expression>,
id: ExpressionId,
},
UnaryPrefixAssignmentOperation {
operator: UnaryPrefixAssignmentOperator,
operand: VariableOrPropertyAccess,
position: Span,
id: ExpressionId,
},
UnaryPostfixAssignmentOperation {
operand: VariableOrPropertyAccess,
operator: UnaryPostfixAssignmentOperator,
position: Span,
id: ExpressionId,
},
VariableReference(String, Span, ExpressionId),
ThisReference(Span, ExpressionId),
SuperExpression(SuperReference, Span, ExpressionId),
NewTarget(Span, ExpressionId),
DynamicImport {
path: Box<Expression>,
position: Span,
expression_id: ExpressionId,
},
PropertyAccess {
parent: Box<Expression>,
property: PropertyReference,
position: Span,
expression_id: ExpressionId,
is_optional: bool,
},
Index {
indexee: Box<Expression>,
indexer: Box<MultipleExpression>,
position: Span,
expression_id: ExpressionId,
},
FunctionCall {
function: Box<Expression>,
type_arguments: Option<Vec<TypeReference>>,
arguments: Vec<SpreadExpression>,
position: Span,
expression_id: ExpressionId,
},
ConstructorCall {
constructor: Box<Expression>,
type_arguments: Option<Vec<TypeReference>>,
arguments: Option<Vec<SpreadExpression>>,
position: Span,
expression_id: ExpressionId,
},
TernaryExpression {
condition: Box<Expression>,
truthy_result: Box<Expression>,
falsy_result: Box<Expression>,
id: ExpressionId,
},
Throw(Box<Expression>, Span, ExpressionId),
ArrowFunction(ArrowFunction),
ExpressionFunction(ExpressionFunction),
ExtractedArrowFunction(ExtractedFunction<ArrowFunctionBase>),
ExtractedExpressionFunction(ExtractedFunction<ExpressionFunctionBase>),
ClassExpression(ClassDeclaration<ExpressionPosition>, ExpressionId),
Null(Span, ExpressionId),
PrefixComment(String, Box<Expression>, Span, ExpressionId),
PostfixComment(Box<Expression>, String, Span, ExpressionId),
Comment(String, Span),
JSXRoot(JSXRoot),
IsExpression(IsExpression),
CustomBlock(CustomBlock, ExpressionId),
Cursor {
cursor_id: CursorId<Expression>,
position: Span,
expression_id: ExpressionId,
},
}
Expand description
Expression structures
Comma is implemented as a BinaryOperator
Variants§
NumberLiteral(NumberStructure, Span, ExpressionId)
StringLiteral(String, Quoted, Span, ExpressionId)
BooleanLiteral(bool, Span, ExpressionId)
ArrayLiteral(Vec<SpreadExpression>, Span, ExpressionId)
ObjectLiteral(ObjectLiteral)
TemplateLiteral(TemplateLiteral)
ParenthesizedExpression(Box<MultipleExpression>, Span, ExpressionId)
BinaryOperation
SpecialOperators(SpecialOperators, Span, ExpressionId)
UnaryOperation
Assignment
BinaryAssignmentOperation
Modified assignment cannot have destructured thingies
UnaryPrefixAssignmentOperation
UnaryPostfixAssignmentOperation
VariableReference(String, Span, ExpressionId)
e.g x
or (...).hi
ThisReference(Span, ExpressionId)
SuperExpression(SuperReference, Span, ExpressionId)
NewTarget(Span, ExpressionId)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new.target
DynamicImport
PropertyAccess
Index
e.g ...[4]
FunctionCall
Fields
§
function: Box<Expression>
§
type_arguments: Option<Vec<TypeReference>>
§
arguments: Vec<SpreadExpression>
§
expression_id: ExpressionId
ConstructorCall
Fields
§
constructor: Box<Expression>
§
type_arguments: Option<Vec<TypeReference>>
§
arguments: Option<Vec<SpreadExpression>>
§
expression_id: ExpressionId
TernaryExpression
Fields
§
condition: Box<Expression>
§
truthy_result: Box<Expression>
§
falsy_result: Box<Expression>
§
id: ExpressionId
e.g ... ? ... ? ...
Throw(Box<Expression>, Span, ExpressionId)
e.g throw ...
JS treats these as statements
ArrowFunction(ArrowFunction)
ExpressionFunction(ExpressionFunction)
ExtractedArrowFunction(ExtractedFunction<ArrowFunctionBase>)
ExtractedExpressionFunction(ExtractedFunction<ExpressionFunctionBase>)
ClassExpression(ClassDeclaration<ExpressionPosition>, ExpressionId)
Yes classes can exist in expr position :?
Null(Span, ExpressionId)
PrefixComment(String, Box<Expression>, Span, ExpressionId)
PostfixComment(Box<Expression>, String, Span, ExpressionId)
Comment(String, Span)
Allowed in trailing functions and JSX for some reason
JSXRoot(JSXRoot)
TODO under cfg A start of a JSXNode
IsExpression(IsExpression)
Not to be confused with binary operator is
CustomBlock(CustomBlock, ExpressionId)
TODO under cfg
Cursor
TODO under cfg
Implementations§
source§impl Expression
impl Expression
pub fn get_precedence(&self) -> u8
source§impl Expression
impl Expression
pub fn get_expression_id(&self) -> Option<ExpressionId>
sourcepub fn build_iife(block: Block) -> Self
pub fn build_iife(block: Block) -> Self
IIFE = immediate invoked function execution
pub fn is_iife<'a>( &self, functions: &'a ExtractedFunctions ) -> Option<&'a ExpressionOrBlock>
sourcepub fn get_non_parenthesized(&self) -> &Self
pub fn get_non_parenthesized(&self) -> &Self
Recurses to find first non parenthesized expression
Trait Implementations§
source§impl ASTNode for Expression
impl ASTNode for Expression
fn from_reader( reader: &mut impl TokenReader<TSXToken, Span>, state: &mut ParsingState, settings: &ParseSettings ) -> ParseResult<Expression>
fn to_string_from_buffer<T: ToString>( &self, buf: &mut T, settings: &ToStringSettingsAndData, depth: u8 )
source§fn get_position(&self) -> Cow<'_, Span>
fn get_position(&self) -> Cow<'_, Span>
Returns position of node as span AS IT WAS PARSED. May be none if AST was doesn’t match anything in source
source§fn from_string(
source: String,
settings: ParseSettings,
source_id: SourceId,
offset: Option<usize>,
cursors: Vec<(usize, EmptyCursorId)>
) -> ParseResult<ParseOutput<Self>>
fn from_string( source: String, settings: ParseSettings, source_id: SourceId, offset: Option<usize>, cursors: Vec<(usize, EmptyCursorId)> ) -> ParseResult<ParseOutput<Self>>
From string, with default impl to call abstract method from_reader
source§fn to_string(&self, settings: &ToStringSettingsAndData) -> String
fn to_string(&self, settings: &ToStringSettingsAndData) -> String
Returns structure as valid string
source§impl Clone for Expression
impl Clone for Expression
source§fn clone(&self) -> Expression
fn clone(&self) -> Expression
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl Debug for Expression
impl Debug for Expression
source§impl DeclarationExpression for Expression
impl DeclarationExpression for Expression
fn decl_from_reader( reader: &mut impl TokenReader<TSXToken, Span>, state: &mut ParsingState, settings: &ParseSettings ) -> ParseResult<Self>
fn decl_to_string_from_buffer<T: ToString>( &self, buf: &mut T, settings: &ToStringSettingsAndData, depth: u8 )
fn get_decl_position(&self) -> Option<Cow<'_, Span>>
fn as_option_mut_expr(&mut self) -> Option<&mut Expression>
source§impl From<Expression> for MultipleExpression
impl From<Expression> for MultipleExpression
source§fn from(expr: Expression) -> Self
fn from(expr: Expression) -> Self
Converts to this type from the input type.
source§impl From<Expression> for SpreadExpression
impl From<Expression> for SpreadExpression
source§fn from(value: Expression) -> Self
fn from(value: Expression) -> Self
Converts to this type from the input type.
source§impl From<VariableOrPropertyAccess> for Expression
impl From<VariableOrPropertyAccess> for Expression
source§fn from(this: VariableOrPropertyAccess) -> Self
fn from(this: VariableOrPropertyAccess) -> Self
Converts to this type from the input type.
source§impl<'a> IntoAST<Expression> for &'a str
impl<'a> IntoAST<Expression> for &'a str
fn into_ast(self) -> Expression
source§impl IntoAST<Expression> for f64
impl IntoAST<Expression> for f64
fn into_ast(self) -> Expression
source§impl IntoAST<Expression> for usize
impl IntoAST<Expression> for usize
fn into_ast(self) -> Expression
source§impl PartialEq<Expression> for Expression
impl PartialEq<Expression> for Expression
source§impl SelfRustTokenize for Expression
impl SelfRustTokenize for Expression
fn append_to_token_stream(&self, token_stream: &mut TokenStream)
source§fn to_tokens(&self) -> TokenStream
fn to_tokens(&self) -> TokenStream
Returns the tokens used to construct self
source§impl TryFrom<Expression> for VariableOrPropertyAccess
impl TryFrom<Expression> for VariableOrPropertyAccess
§type Error = ParseError
type Error = ParseError
The type returned in the event of a conversion error.