Allow export default abstract class. Related to issue 3792.
This commit is contained in:
parent
ea57fbc59f
commit
f9356b960f
|
@ -1267,6 +1267,7 @@ namespace ts {
|
|||
function nextTokenIsClassOrFunctionOrAsync(): boolean {
|
||||
nextToken();
|
||||
return token() === SyntaxKind.ClassKeyword || token() === SyntaxKind.FunctionKeyword ||
|
||||
(token() === SyntaxKind.AbstractKeyword && lookAhead(nextTokenIsClassKeywordOnSameLine)) ||
|
||||
(token() === SyntaxKind.AsyncKeyword && lookAhead(nextTokenIsFunctionKeywordOnSameLine));
|
||||
}
|
||||
|
||||
|
@ -4658,6 +4659,11 @@ namespace ts {
|
|||
return tokenIsIdentifierOrKeyword(token()) && !scanner.hasPrecedingLineBreak();
|
||||
}
|
||||
|
||||
function nextTokenIsClassKeywordOnSameLine() {
|
||||
nextToken();
|
||||
return token() === SyntaxKind.ClassKeyword && !scanner.hasPrecedingLineBreak();
|
||||
}
|
||||
|
||||
function nextTokenIsFunctionKeywordOnSameLine() {
|
||||
nextToken();
|
||||
return token() === SyntaxKind.FunctionKeyword && !scanner.hasPrecedingLineBreak();
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractManyKeywords.ts(1,25): error TS1005: ';' expected.
|
||||
tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractManyKeywords.ts(3,1): error TS1128: Declaration or statement expected.
|
||||
tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractManyKeywords.ts(4,17): error TS1005: '=' expected.
|
||||
|
||||
|
||||
==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractManyKeywords.ts (3 errors) ====
|
||||
==== tests/cases/conformance/classes/classDeclarations/classAbstractKeyword/classAbstractManyKeywords.ts (2 errors) ====
|
||||
export default abstract class A {}
|
||||
~~~~~
|
||||
!!! error TS1005: ';' expected.
|
||||
export abstract class B {}
|
||||
default abstract class C {}
|
||||
~~~~~~~
|
||||
|
|
|
@ -7,12 +7,12 @@ import abstract class D {}
|
|||
//// [classAbstractManyKeywords.js]
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
||||
exports["default"] = abstract;
|
||||
var A = (function () {
|
||||
function A() {
|
||||
}
|
||||
return A;
|
||||
}());
|
||||
exports["default"] = A;
|
||||
var B = (function () {
|
||||
function B() {
|
||||
}
|
||||
|
@ -24,7 +24,6 @@ var C = (function () {
|
|||
}
|
||||
return C;
|
||||
}());
|
||||
var abstract = ;
|
||||
var D = (function () {
|
||||
function D() {
|
||||
}
|
||||
|
|
21
tests/baselines/reference/exportDefaultAbstractClass.js
Normal file
21
tests/baselines/reference/exportDefaultAbstractClass.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
//// [tests/cases/compiler/exportDefaultAbstractClass.ts] ////
|
||||
|
||||
//// [a.ts]
|
||||
export default abstract class A {}
|
||||
|
||||
//// [b.ts]
|
||||
import A from './a'
|
||||
|
||||
|
||||
//// [a.js]
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
||||
var A = (function () {
|
||||
function A() {
|
||||
}
|
||||
return A;
|
||||
}());
|
||||
exports["default"] = A;
|
||||
//// [b.js]
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
|
@ -0,0 +1,8 @@
|
|||
=== tests/cases/compiler/a.ts ===
|
||||
export default abstract class A {}
|
||||
>A : Symbol(A, Decl(a.ts, 0, 0))
|
||||
|
||||
=== tests/cases/compiler/b.ts ===
|
||||
import A from './a'
|
||||
>A : Symbol(A, Decl(b.ts, 0, 6))
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
=== tests/cases/compiler/a.ts ===
|
||||
export default abstract class A {}
|
||||
>A : A
|
||||
|
||||
=== tests/cases/compiler/b.ts ===
|
||||
import A from './a'
|
||||
>A : typeof A
|
||||
|
5
tests/cases/compiler/exportDefaultAbstractClass.ts
Normal file
5
tests/cases/compiler/exportDefaultAbstractClass.ts
Normal file
|
@ -0,0 +1,5 @@
|
|||
// @filename: a.ts
|
||||
export default abstract class A {}
|
||||
|
||||
// @filename: b.ts
|
||||
import A from './a'
|
Loading…
Reference in a new issue