From 84aa2a237c01e8c3c03bccd4ff3137caaa7b4f25 Mon Sep 17 00:00:00 2001 From: DonIsaac <22823424+DonIsaac@users.noreply.github.com> Date: Wed, 9 Oct 2024 22:05:54 +0000 Subject: [PATCH] test(linter/no-useless-constructor): add cases for initializers in subclass constructors (#6390) --- .../rules/eslint/no_useless_constructor.rs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/crates/oxc_linter/src/rules/eslint/no_useless_constructor.rs b/crates/oxc_linter/src/rules/eslint/no_useless_constructor.rs index cddffa447..f8f9796fe 100644 --- a/crates/oxc_linter/src/rules/eslint/no_useless_constructor.rs +++ b/crates/oxc_linter/src/rules/eslint/no_useless_constructor.rs @@ -287,6 +287,47 @@ fn test() { "class A { constructor(readonly x: number) {} }", "class A { constructor(private readonly x: number) {} }", "class A extends B { constructor(override x: number) { super(x); } }", + " + class A { + protected foo: number | undefined; + constructor(foo?: number) { + this.foo = foo; + } + } + class B extends A { + protected foo: number; + constructor(foo: number = 0) { + super(foo); + } + } + ", + " + class A { + protected foo: number | undefined; + constructor(foo?: number) { + this.foo = foo; + } + } + class B extends A { + constructor(foo?: number) { + super(foo ?? 0); + } + } + ", + // TODO: type aware linting :( + // " + // class A { + // protected foo: string; + // constructor(foo: string) { + // this.foo = foo; + // } + // } + // class B extends A { + // constructor(foo: 'a' | 'b') { + // super(foo); + // } + // } + // ", ]; let fail = vec![