Make bodiless declarations an error in JS (#54439)

This commit is contained in:
Joshua Chen 2023-07-01 07:53:51 +08:00 committed by GitHub
parent a437de66b6
commit e4cc532e14
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 106 additions and 0 deletions

View File

@ -6556,6 +6556,10 @@
"category": "Error",
"code": 8016
},
"Signature declarations can only be used in TypeScript files.": {
"category": "Error",
"code": 8017
},
"Report errors in .js files.": {
"category": "Message",
"code": 8019

View File

@ -3022,6 +3022,14 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
case SyntaxKind.TypeAliasDeclaration:
diagnostics.push(createDiagnosticForNode(node, Diagnostics.Type_aliases_can_only_be_used_in_TypeScript_files));
return "skip";
case SyntaxKind.Constructor:
case SyntaxKind.MethodDeclaration:
case SyntaxKind.FunctionDeclaration:
if (!(node as FunctionLikeDeclaration).body) {
diagnostics.push(createDiagnosticForNode(node, Diagnostics.Signature_declarations_can_only_be_used_in_TypeScript_files));
return "skip";
}
return;
case SyntaxKind.EnumDeclaration:
const enumKeyword = Debug.checkDefined(tokenToString(SyntaxKind.EnumKeyword));
diagnostics.push(createDiagnosticForNode(node, Diagnostics._0_declarations_can_only_be_used_in_TypeScript_files, enumKeyword));

View File

@ -0,0 +1,10 @@
a.js(2,3): error TS8017: Signature declarations can only be used in TypeScript files.
==== a.js (1 errors) ====
class A {
constructor();
~~~~~~~~~~~~~~
!!! error TS8017: Signature declarations can only be used in TypeScript files.
}

View File

@ -0,0 +1,9 @@
//// [tests/cases/compiler/jsFileCompilationConstructorOverloadSyntax.ts] ////
=== a.js ===
class A {
>A : Symbol(A, Decl(a.js, 0, 0))
constructor();
}

View File

@ -0,0 +1,9 @@
//// [tests/cases/compiler/jsFileCompilationConstructorOverloadSyntax.ts] ////
=== a.js ===
class A {
>A : A
constructor();
}

View File

@ -0,0 +1,8 @@
a.js(1,10): error TS8017: Signature declarations can only be used in TypeScript files.
==== a.js (1 errors) ====
function foo();
~~~
!!! error TS8017: Signature declarations can only be used in TypeScript files.

View File

@ -0,0 +1,6 @@
//// [tests/cases/compiler/jsFileCompilationFunctionOverloadSyntax.ts] ////
=== a.js ===
function foo();
>foo : Symbol(foo, Decl(a.js, 0, 0))

View File

@ -0,0 +1,6 @@
//// [tests/cases/compiler/jsFileCompilationFunctionOverloadSyntax.ts] ////
=== a.js ===
function foo();
>foo : () => any

View File

@ -0,0 +1,10 @@
a.js(2,3): error TS8017: Signature declarations can only be used in TypeScript files.
==== a.js (1 errors) ====
class A {
foo();
~~~
!!! error TS8017: Signature declarations can only be used in TypeScript files.
}

View File

@ -0,0 +1,10 @@
//// [tests/cases/compiler/jsFileCompilationMethodOverloadSyntax.ts] ////
=== a.js ===
class A {
>A : Symbol(A, Decl(a.js, 0, 0))
foo();
>foo : Symbol(A.foo, Decl(a.js, 0, 9))
}

View File

@ -0,0 +1,10 @@
//// [tests/cases/compiler/jsFileCompilationMethodOverloadSyntax.ts] ////
=== a.js ===
class A {
>A : A
foo();
>foo : () => any
}

View File

@ -0,0 +1,6 @@
// @allowJs: true
// @noEmit: true
// @filename: a.js
class A {
constructor();
}

View File

@ -0,0 +1,4 @@
// @allowJs: true
// @noEmit: true
// @filename: a.js
function foo();

View File

@ -0,0 +1,6 @@
// @allowJs: true
// @noEmit: true
// @filename: a.js
class A {
foo();
}