Skip to content

swc_ecma_codegen not rendering ArrowExpr return_type #4305

@Dionysusnu

Description

@Dionysusnu

Describe the bug

swc_ecma_codegen does not render the return_type property of ArrowExpr

Input code

let cm = Lrc::new(SourceMap::default());
let code = {
	let mut buf = vec![];

	{
		let mut emitter = Emitter {
			cfg: swc_ecma_codegen::Config {
				..Default::default()
			},
			cm: cm.clone(),
			comments: None,
			wr: JsWriter::new(cm.clone(), "\n", &mut buf, None),
		};

		emitter
			.emit_module(&Module {
				body: vec![ModuleItem::Stmt(Stmt::Expr(ExprStmt {
					span: Default::default(),
					expr: boxed(Expr::Arrow(ArrowExpr {
						span: Default::default(),
						params: vec![],
						type_params: None,
						is_async: false,
						is_generator: false,
						body: BlockStmtOrExpr::Expr(boxed(Expr::Lit(Lit::Bool(Bool {
							span: Default::default(),
							value: true,
						})))),
						return_type: Some(TsTypeAnn {
							span: Default::default(),
							type_ann: boxed(TsType::TsLitType(TsLitType {
								span: Default::default(),
								lit: TsLit::Bool(Bool {
									span: Default::default(),
									value: true,
								}),
							})),
						}),
					})),
				}))],
				span: Default::default(),
				shebang: None,
			})
			.unwrap();
	}

	String::from_utf8_lossy(&buf).to_string()
};

Config

N/A

Playground link

No response

Expected behavior

The return type should be rendered if given, like it is for normal functions.

Actual behavior

The return type is not rendered.

Version

0.96.0 local, but issue also exists on the source of main branch

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions