mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
feat(codegen): print TSClassImplements and TSThisParameter (#3786)
close: https://github.com/oxc-project/oxc/issues/3692#issuecomment-2178994839
This commit is contained in:
parent
497769cb60
commit
97575d8cab
3 changed files with 41 additions and 14 deletions
|
|
@ -656,6 +656,13 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for Function<'a> {
|
||||||
type_parameters.gen(p, ctx);
|
type_parameters.gen(p, ctx);
|
||||||
}
|
}
|
||||||
p.print(b'(');
|
p.print(b'(');
|
||||||
|
if let Some(this_param) = &self.this_param {
|
||||||
|
this_param.gen(p, ctx);
|
||||||
|
if !self.params.is_empty() || self.params.rest.is_some() {
|
||||||
|
p.print_str(b",");
|
||||||
|
}
|
||||||
|
p.print_soft_space();
|
||||||
|
}
|
||||||
self.params.gen(p, ctx);
|
self.params.gen(p, ctx);
|
||||||
p.print(b')');
|
p.print(b')');
|
||||||
if let Some(return_type) = &self.return_type {
|
if let Some(return_type) = &self.return_type {
|
||||||
|
|
@ -2098,6 +2105,13 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for Class<'a> {
|
||||||
if let Some(super_class) = self.super_class.as_ref() {
|
if let Some(super_class) = self.super_class.as_ref() {
|
||||||
p.print_str(b" extends ");
|
p.print_str(b" extends ");
|
||||||
super_class.gen_expr(p, Precedence::Call, Context::default());
|
super_class.gen_expr(p, Precedence::Call, Context::default());
|
||||||
|
if let Some(super_type_parameters) = &self.super_type_parameters {
|
||||||
|
super_type_parameters.gen(p, ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(implements) = self.implements.as_ref() {
|
||||||
|
p.print_str(b" implements ");
|
||||||
|
p.print_list(implements, ctx);
|
||||||
}
|
}
|
||||||
p.print_soft_space();
|
p.print_soft_space();
|
||||||
self.body.gen(p, ctx);
|
self.body.gen(p, ctx);
|
||||||
|
|
@ -2628,6 +2642,15 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for Decorator<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a, const MINIFY: bool> Gen<MINIFY> for TSClassImplements<'a> {
|
||||||
|
fn gen(&self, p: &mut Codegen<{ MINIFY }>, ctx: Context) {
|
||||||
|
self.expression.gen(p, ctx);
|
||||||
|
if let Some(type_parameters) = self.type_parameters.as_ref() {
|
||||||
|
type_parameters.gen(p, ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a, const MINIFY: bool> Gen<MINIFY> for TSTypeParameterDeclaration<'a> {
|
impl<'a, const MINIFY: bool> Gen<MINIFY> for TSTypeParameterDeclaration<'a> {
|
||||||
fn gen(&self, p: &mut Codegen<{ MINIFY }>, ctx: Context) {
|
fn gen(&self, p: &mut Codegen<{ MINIFY }>, ctx: Context) {
|
||||||
p.print_str(b"<");
|
p.print_str(b"<");
|
||||||
|
|
@ -2971,13 +2994,7 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for TSFunctionType<'a> {
|
||||||
}
|
}
|
||||||
p.print_str(b"(");
|
p.print_str(b"(");
|
||||||
if let Some(this_param) = &self.this_param {
|
if let Some(this_param) = &self.this_param {
|
||||||
this_param.this.gen(p, ctx);
|
this_param.gen(p, ctx);
|
||||||
p.print_str(b":");
|
|
||||||
if let Some(type_annotation) = &this_param.type_annotation {
|
|
||||||
type_annotation.gen(p, ctx);
|
|
||||||
} else {
|
|
||||||
p.print_str(b"unknown");
|
|
||||||
}
|
|
||||||
if !self.params.is_empty() || self.params.rest.is_some() {
|
if !self.params.is_empty() || self.params.rest.is_some() {
|
||||||
p.print_str(b",");
|
p.print_str(b",");
|
||||||
}
|
}
|
||||||
|
|
@ -2992,6 +3009,16 @@ impl<'a, const MINIFY: bool> Gen<MINIFY> for TSFunctionType<'a> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'a, const MINIFY: bool> Gen<MINIFY> for TSThisParameter<'a> {
|
||||||
|
fn gen(&self, p: &mut Codegen<{ MINIFY }>, ctx: Context) {
|
||||||
|
self.this.gen(p, ctx);
|
||||||
|
if let Some(type_annotation) = &self.type_annotation {
|
||||||
|
p.print_str(b": ");
|
||||||
|
type_annotation.gen(p, ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<'a, const MINIFY: bool> Gen<MINIFY> for TSSignature<'a> {
|
impl<'a, const MINIFY: bool> Gen<MINIFY> for TSSignature<'a> {
|
||||||
fn gen(&self, p: &mut Codegen<{ MINIFY }>, ctx: Context) {
|
fn gen(&self, p: &mut Codegen<{ MINIFY }>, ctx: Context) {
|
||||||
match self {
|
match self {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import { AExtend, BExtend, Type, CImplements, CType, ThisType1, ThisType2, Unused } from 'mod';
|
import { AExtend, BExtend, Type, CImplements1, CImplements2, CType, ThisType1, ThisType2, Unused } from 'mod';
|
||||||
|
|
||||||
export interface A extends AExtend<Type> {}
|
export interface A extends AExtend<Type> {}
|
||||||
export class B extends BExtend<Type> {}
|
export class B extends BExtend<Type> {}
|
||||||
export class C implements CImplements<CType> {}
|
export class C implements CImplements1<CType>, CImplements2<CType> {}
|
||||||
export function foo(this: ThisType1): void {}
|
export function foo(this: ThisType1): void {}
|
||||||
export const bar: (this: ThisType2) => void = function() {}
|
export const bar: (this: ThisType2) => void = function() {}
|
||||||
|
|
@ -4,9 +4,9 @@ input_file: crates/oxc_isolated_declarations/tests/fixtures/eliminate-imports.ts
|
||||||
---
|
---
|
||||||
==================== .D.TS ====================
|
==================== .D.TS ====================
|
||||||
|
|
||||||
import { AExtend, BExtend, Type, CImplements, CType, ThisType1, ThisType2 } from 'mod';
|
import { AExtend, BExtend, Type, CImplements1, CImplements2, CType, ThisType1, ThisType2 } from 'mod';
|
||||||
export interface A extends AExtend<Type> {}
|
export interface A extends AExtend<Type> {}
|
||||||
export declare class B extends BExtend {}
|
export declare class B extends BExtend<Type> {}
|
||||||
export declare class C {}
|
export declare class C implements CImplements1<CType>, CImplements2<CType> {}
|
||||||
export declare function foo(): void;
|
export declare function foo(this: ThisType1 ): void;
|
||||||
export declare const bar: (this:ThisType2 ) => void;
|
export declare const bar: (this: ThisType2 ) => void;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue