From b88db587f284cb5406dfbb3a930ac28a4ff320b4 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:13:27 +0000 Subject: [PATCH 1/3] Initial plan From a78d8dcb594b22dffeb3832b96c402e0d37796ff Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 21:27:04 +0000 Subject: [PATCH 2/3] Fix missing TS2385 error for constructor overload visibility disagreement Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- internal/checker/checker.go | 2 +- ...nstructorOverloadsAccessibility.errors.txt | 45 +++++++++++ .../classConstructorOverloadsAccessibility.js | 75 +++++++++++++++++++ ...sConstructorOverloadsAccessibility.symbols | 62 +++++++++++++++ ...assConstructorOverloadsAccessibility.types | 62 +++++++++++++++ ...nstructorOverloadsAccessibility.errors.txt | 13 +++- ...ctorOverloadsAccessibility.errors.txt.diff | 33 -------- .../classConstructorOverloadsAccessibility.ts | 35 +++++++++ 8 files changed, 290 insertions(+), 37 deletions(-) create mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt create mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js create mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols create mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types delete mode 100644 testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt.diff create mode 100644 testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts diff --git a/internal/checker/checker.go b/internal/checker/checker.go index 7044bae704a..2fe58720bd7 100644 --- a/internal/checker/checker.go +++ b/internal/checker/checker.go @@ -3428,7 +3428,7 @@ func (c *Checker) checkFunctionOrConstructorSymbol(symbol *ast.Symbol) { // to a non-ambient function in an implementation file. c.error(ast.GetNameOfDeclaration(overload), diagnostics.Overload_signatures_must_all_be_ambient_or_non_ambient) case deviation&(ast.ModifierFlagsPrivate|ast.ModifierFlagsProtected) != 0: - c.error(ast.GetNameOfDeclaration(overload), diagnostics.Overload_signatures_must_all_be_public_private_or_protected) + c.error(core.OrElse(ast.GetNameOfDeclaration(overload), overload), diagnostics.Overload_signatures_must_all_be_public_private_or_protected) case deviation&ast.ModifierFlagsAbstract != 0: c.error(ast.GetNameOfDeclaration(overload), diagnostics.Overload_signatures_must_all_be_abstract_or_non_abstract) } diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt new file mode 100644 index 00000000000..e65fabfdd3c --- /dev/null +++ b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt @@ -0,0 +1,45 @@ +classConstructorOverloadsAccessibility.ts(2,2): error TS2385: Overload signatures must all be public, private or protected. +classConstructorOverloadsAccessibility.ts(3,2): error TS2385: Overload signatures must all be public, private or protected. +classConstructorOverloadsAccessibility.ts(11,2): error TS2385: Overload signatures must all be public, private or protected. + + +==== classConstructorOverloadsAccessibility.ts (3 errors) ==== + class A { + public constructor(a: boolean) // error + ~~~~~~~~~~~~~~~~~~ +!!! error TS2385: Overload signatures must all be public, private or protected. + protected constructor(a: number) // error + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2385: Overload signatures must all be public, private or protected. + private constructor(a: string) + private constructor() { + + } + } + + class B { + protected constructor(a: number) // error + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2385: Overload signatures must all be public, private or protected. + constructor(a: string) + constructor() { + + } + } + + class C { + protected constructor(a: number) + protected constructor(a: string) + protected constructor() { + + } + } + + class D { + constructor(a: number) + constructor(a: string) + public constructor() { + + } + } + \ No newline at end of file diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js new file mode 100644 index 00000000000..3dc59d60858 --- /dev/null +++ b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js @@ -0,0 +1,75 @@ +//// [tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts] //// + +//// [classConstructorOverloadsAccessibility.ts] +class A { + public constructor(a: boolean) // error + protected constructor(a: number) // error + private constructor(a: string) + private constructor() { + + } +} + +class B { + protected constructor(a: number) // error + constructor(a: string) + constructor() { + + } +} + +class C { + protected constructor(a: number) + protected constructor(a: string) + protected constructor() { + + } +} + +class D { + constructor(a: number) + constructor(a: string) + public constructor() { + + } +} + + +//// [classConstructorOverloadsAccessibility.js] +"use strict"; +class A { + constructor() { + } +} +class B { + constructor() { + } +} +class C { + constructor() { + } +} +class D { + constructor() { + } +} + + +//// [classConstructorOverloadsAccessibility.d.ts] +declare class A { + constructor(a: boolean); + protected constructor(a: number); + private constructor(); +} +declare class B { + protected constructor(a: number); + constructor(a: string); +} +declare class C { + protected constructor(a: number); + protected constructor(a: string); +} +declare class D { + constructor(a: number); + constructor(a: string); +} diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols new file mode 100644 index 00000000000..4dee6f04b37 --- /dev/null +++ b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols @@ -0,0 +1,62 @@ +//// [tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts] //// + +=== classConstructorOverloadsAccessibility.ts === +class A { +>A : Symbol(A, Decl(classConstructorOverloadsAccessibility.ts, 0, 0)) + + public constructor(a: boolean) // error +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 1, 20)) + + protected constructor(a: number) // error +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 2, 23)) + + private constructor(a: string) +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 3, 21)) + + private constructor() { + + } +} + +class B { +>B : Symbol(B, Decl(classConstructorOverloadsAccessibility.ts, 7, 1)) + + protected constructor(a: number) // error +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 10, 23)) + + constructor(a: string) +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 11, 13)) + + constructor() { + + } +} + +class C { +>C : Symbol(C, Decl(classConstructorOverloadsAccessibility.ts, 15, 1)) + + protected constructor(a: number) +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 18, 23)) + + protected constructor(a: string) +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 19, 23)) + + protected constructor() { + + } +} + +class D { +>D : Symbol(D, Decl(classConstructorOverloadsAccessibility.ts, 23, 1)) + + constructor(a: number) +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 26, 13)) + + constructor(a: string) +>a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 27, 13)) + + public constructor() { + + } +} + diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types new file mode 100644 index 00000000000..23fc0ac7cd4 --- /dev/null +++ b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types @@ -0,0 +1,62 @@ +//// [tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts] //// + +=== classConstructorOverloadsAccessibility.ts === +class A { +>A : A + + public constructor(a: boolean) // error +>a : boolean + + protected constructor(a: number) // error +>a : number + + private constructor(a: string) +>a : string + + private constructor() { + + } +} + +class B { +>B : B + + protected constructor(a: number) // error +>a : number + + constructor(a: string) +>a : string + + constructor() { + + } +} + +class C { +>C : C + + protected constructor(a: number) +>a : number + + protected constructor(a: string) +>a : string + + protected constructor() { + + } +} + +class D { +>D : D + + constructor(a: number) +>a : number + + constructor(a: string) +>a : string + + public constructor() { + + } +} + diff --git a/testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt b/testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt index 15745f2677e..e939262b027 100644 --- a/testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt +++ b/testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt @@ -1,11 +1,16 @@ -error TS2385: Overload signatures must all be public, private or protected. +classConstructorOverloadsAccessibility.ts(2,2): error TS2385: Overload signatures must all be public, private or protected. +classConstructorOverloadsAccessibility.ts(3,2): error TS2385: Overload signatures must all be public, private or protected. +classConstructorOverloadsAccessibility.ts(11,2): error TS2385: Overload signatures must all be public, private or protected. -!!! error TS2385: Overload signatures must all be public, private or protected. -==== classConstructorOverloadsAccessibility.ts (0 errors) ==== +==== classConstructorOverloadsAccessibility.ts (3 errors) ==== class A { public constructor(a: boolean) // error + ~~~~~~~~~~~~~~~~~~ +!!! error TS2385: Overload signatures must all be public, private or protected. protected constructor(a: number) // error + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2385: Overload signatures must all be public, private or protected. private constructor(a: string) private constructor() { @@ -14,6 +19,8 @@ error TS2385: Overload signatures must all be public, private or protected. class B { protected constructor(a: number) // error + ~~~~~~~~~~~~~~~~~~~~~ +!!! error TS2385: Overload signatures must all be public, private or protected. constructor(a: string) constructor() { diff --git a/testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt.diff b/testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt.diff deleted file mode 100644 index e1837b6099e..00000000000 --- a/testdata/baselines/reference/submodule/conformance/classConstructorOverloadsAccessibility.errors.txt.diff +++ /dev/null @@ -1,33 +0,0 @@ ---- old.classConstructorOverloadsAccessibility.errors.txt -+++ new.classConstructorOverloadsAccessibility.errors.txt -@@= skipped -0, +0 lines =@@ --classConstructorOverloadsAccessibility.ts(2,2): error TS2385: Overload signatures must all be public, private or protected. --classConstructorOverloadsAccessibility.ts(3,2): error TS2385: Overload signatures must all be public, private or protected. --classConstructorOverloadsAccessibility.ts(11,2): error TS2385: Overload signatures must all be public, private or protected. -- -- --==== classConstructorOverloadsAccessibility.ts (3 errors) ==== -+error TS2385: Overload signatures must all be public, private or protected. -+ -+ -+!!! error TS2385: Overload signatures must all be public, private or protected. -+==== classConstructorOverloadsAccessibility.ts (0 errors) ==== - class A { - public constructor(a: boolean) // error -- ~~~~~~~~~~~~~~~~~~ --!!! error TS2385: Overload signatures must all be public, private or protected. - protected constructor(a: number) // error -- ~~~~~~~~~~~~~~~~~~~~~ --!!! error TS2385: Overload signatures must all be public, private or protected. - private constructor(a: string) - private constructor() { - -@@= skipped -18, +13 lines =@@ - - class B { - protected constructor(a: number) // error -- ~~~~~~~~~~~~~~~~~~~~~ --!!! error TS2385: Overload signatures must all be public, private or protected. - constructor(a: string) - constructor() { - \ No newline at end of file diff --git a/testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts b/testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts new file mode 100644 index 00000000000..a35eb48f463 --- /dev/null +++ b/testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts @@ -0,0 +1,35 @@ +// @target: es2015 +// @declaration: true + +class A { + public constructor(a: boolean) // error + protected constructor(a: number) // error + private constructor(a: string) + private constructor() { + + } +} + +class B { + protected constructor(a: number) // error + constructor(a: string) + constructor() { + + } +} + +class C { + protected constructor(a: number) + protected constructor(a: string) + protected constructor() { + + } +} + +class D { + constructor(a: number) + constructor(a: string) + public constructor() { + + } +} From 4f1f721bf1649ee4e5f88e3bc4b85ba3a356fcee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Feb 2026 23:23:24 +0000 Subject: [PATCH 3/3] Remove unnecessary new test files, use existing submodule test Co-authored-by: andrewbranch <3277153+andrewbranch@users.noreply.github.com> --- ...nstructorOverloadsAccessibility.errors.txt | 45 ----------- .../classConstructorOverloadsAccessibility.js | 75 ------------------- ...sConstructorOverloadsAccessibility.symbols | 62 --------------- ...assConstructorOverloadsAccessibility.types | 62 --------------- .../classConstructorOverloadsAccessibility.ts | 35 --------- 5 files changed, 279 deletions(-) delete mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt delete mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js delete mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols delete mode 100644 testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types delete mode 100644 testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt deleted file mode 100644 index e65fabfdd3c..00000000000 --- a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.errors.txt +++ /dev/null @@ -1,45 +0,0 @@ -classConstructorOverloadsAccessibility.ts(2,2): error TS2385: Overload signatures must all be public, private or protected. -classConstructorOverloadsAccessibility.ts(3,2): error TS2385: Overload signatures must all be public, private or protected. -classConstructorOverloadsAccessibility.ts(11,2): error TS2385: Overload signatures must all be public, private or protected. - - -==== classConstructorOverloadsAccessibility.ts (3 errors) ==== - class A { - public constructor(a: boolean) // error - ~~~~~~~~~~~~~~~~~~ -!!! error TS2385: Overload signatures must all be public, private or protected. - protected constructor(a: number) // error - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2385: Overload signatures must all be public, private or protected. - private constructor(a: string) - private constructor() { - - } - } - - class B { - protected constructor(a: number) // error - ~~~~~~~~~~~~~~~~~~~~~ -!!! error TS2385: Overload signatures must all be public, private or protected. - constructor(a: string) - constructor() { - - } - } - - class C { - protected constructor(a: number) - protected constructor(a: string) - protected constructor() { - - } - } - - class D { - constructor(a: number) - constructor(a: string) - public constructor() { - - } - } - \ No newline at end of file diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js deleted file mode 100644 index 3dc59d60858..00000000000 --- a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.js +++ /dev/null @@ -1,75 +0,0 @@ -//// [tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts] //// - -//// [classConstructorOverloadsAccessibility.ts] -class A { - public constructor(a: boolean) // error - protected constructor(a: number) // error - private constructor(a: string) - private constructor() { - - } -} - -class B { - protected constructor(a: number) // error - constructor(a: string) - constructor() { - - } -} - -class C { - protected constructor(a: number) - protected constructor(a: string) - protected constructor() { - - } -} - -class D { - constructor(a: number) - constructor(a: string) - public constructor() { - - } -} - - -//// [classConstructorOverloadsAccessibility.js] -"use strict"; -class A { - constructor() { - } -} -class B { - constructor() { - } -} -class C { - constructor() { - } -} -class D { - constructor() { - } -} - - -//// [classConstructorOverloadsAccessibility.d.ts] -declare class A { - constructor(a: boolean); - protected constructor(a: number); - private constructor(); -} -declare class B { - protected constructor(a: number); - constructor(a: string); -} -declare class C { - protected constructor(a: number); - protected constructor(a: string); -} -declare class D { - constructor(a: number); - constructor(a: string); -} diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols deleted file mode 100644 index 4dee6f04b37..00000000000 --- a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.symbols +++ /dev/null @@ -1,62 +0,0 @@ -//// [tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts] //// - -=== classConstructorOverloadsAccessibility.ts === -class A { ->A : Symbol(A, Decl(classConstructorOverloadsAccessibility.ts, 0, 0)) - - public constructor(a: boolean) // error ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 1, 20)) - - protected constructor(a: number) // error ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 2, 23)) - - private constructor(a: string) ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 3, 21)) - - private constructor() { - - } -} - -class B { ->B : Symbol(B, Decl(classConstructorOverloadsAccessibility.ts, 7, 1)) - - protected constructor(a: number) // error ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 10, 23)) - - constructor(a: string) ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 11, 13)) - - constructor() { - - } -} - -class C { ->C : Symbol(C, Decl(classConstructorOverloadsAccessibility.ts, 15, 1)) - - protected constructor(a: number) ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 18, 23)) - - protected constructor(a: string) ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 19, 23)) - - protected constructor() { - - } -} - -class D { ->D : Symbol(D, Decl(classConstructorOverloadsAccessibility.ts, 23, 1)) - - constructor(a: number) ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 26, 13)) - - constructor(a: string) ->a : Symbol(a, Decl(classConstructorOverloadsAccessibility.ts, 27, 13)) - - public constructor() { - - } -} - diff --git a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types b/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types deleted file mode 100644 index 23fc0ac7cd4..00000000000 --- a/testdata/baselines/reference/conformance/classConstructorOverloadsAccessibility.types +++ /dev/null @@ -1,62 +0,0 @@ -//// [tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts] //// - -=== classConstructorOverloadsAccessibility.ts === -class A { ->A : A - - public constructor(a: boolean) // error ->a : boolean - - protected constructor(a: number) // error ->a : number - - private constructor(a: string) ->a : string - - private constructor() { - - } -} - -class B { ->B : B - - protected constructor(a: number) // error ->a : number - - constructor(a: string) ->a : string - - constructor() { - - } -} - -class C { ->C : C - - protected constructor(a: number) ->a : number - - protected constructor(a: string) ->a : string - - protected constructor() { - - } -} - -class D { ->D : D - - constructor(a: number) ->a : number - - constructor(a: string) ->a : string - - public constructor() { - - } -} - diff --git a/testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts b/testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts deleted file mode 100644 index a35eb48f463..00000000000 --- a/testdata/tests/cases/conformance/classes/constructorDeclarations/classConstructorOverloadsAccessibility.ts +++ /dev/null @@ -1,35 +0,0 @@ -// @target: es2015 -// @declaration: true - -class A { - public constructor(a: boolean) // error - protected constructor(a: number) // error - private constructor(a: string) - private constructor() { - - } -} - -class B { - protected constructor(a: number) // error - constructor(a: string) - constructor() { - - } -} - -class C { - protected constructor(a: number) - protected constructor(a: string) - protected constructor() { - - } -} - -class D { - constructor(a: number) - constructor(a: string) - public constructor() { - - } -}