0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-03-06 11:18:57 -05:00

chore: support more nodes

This commit is contained in:
Marvin Hagemeister 2025-01-03 14:22:24 +01:00
parent b972fc996b
commit 9124e0a0df
2 changed files with 61 additions and 27 deletions

View file

@ -266,7 +266,20 @@ fn serialize_stmt(
let raw = ctx.header(AstNode::DebuggerStatement, parent, &node.span);
ctx.commit_schema(raw)
}
Stmt::With(_) => todo!(),
Stmt::With(node) => {
let raw = ctx.header(AstNode::WithStatement, parent, &node.span);
let obj_pos = ctx.ref_field(AstProp::Object);
let body_pos = ctx.ref_field(AstProp::Body);
let pos = ctx.commit_schema(raw);
let obj = serialize_expr(ctx, &node.obj, pos);
let body = serialize_stmt(ctx, &node.body, pos);
ctx.write_ref(obj_pos, obj);
ctx.write_ref(body_pos, body);
pos
}
Stmt::Return(node) => {
let raw = ctx.header(AstNode::ReturnStatement, parent, &node.span);
let arg_pos = ctx.ref_field(AstProp::Argument);
@ -842,6 +855,24 @@ fn serialize_expr(
pos
}
Expr::Call(node) => {
if let Callee::Import(_) = node.callee {
let raw = ctx.header(AstNode::ImportExpression, parent, &node.span);
let source_pos = ctx.ref_field(AstProp::Source);
let options_pos = ctx.ref_field(AstProp::Options);
let pos = ctx.commit_schema(raw);
if let Some(arg) = node.args.first() {
let source = serialize_expr_or_spread(ctx, arg, pos);
ctx.write_ref(source_pos, source);
}
if let Some(arg) = node.args.get(1) {
let obj = serialize_expr_or_spread(ctx, arg, pos);
ctx.write_ref(options_pos, obj);
}
pos
} else {
let raw = ctx.header(AstNode::CallExpression, parent, &node.span);
let opt_pos = ctx.bool_field(AstProp::Optional);
let callee_pos = ctx.ref_field(AstProp::Callee);
@ -854,7 +885,7 @@ fn serialize_expr(
let raw = ctx.header(AstNode::Super, pos, &super_node.span);
ctx.commit_schema(raw)
}
Callee::Import(_) => todo!(),
Callee::Import(_) => unreachable!("Already handled"),
Callee::Expr(expr) => serialize_expr(ctx, expr, pos),
};
@ -875,6 +906,7 @@ fn serialize_expr(
pos
}
}
Expr::New(node) => {
let raw = ctx.header(AstNode::NewExpression, parent, &node.span);
let callee_pos = ctx.ref_field(AstProp::Callee);

View file

@ -277,6 +277,7 @@ pub enum AstProp {
OpeningFragment,
Operator,
Optional,
Options,
Out,
Param,
ParameterName,
@ -391,6 +392,7 @@ impl Display for AstProp {
AstProp::OpeningFragment => "openingFragment",
AstProp::Operator => "operator",
AstProp::Optional => "optional",
AstProp::Options => "options",
AstProp::Out => "out",
AstProp::Param => "param",
AstProp::ParameterName => "parameterName",