fix: report missing plugins on type exports (#11417)

* fix: report missing plugins on type exports

* nit refactors

* Update packages/babel-parser/src/parser/statement.js [skip ci]
This commit is contained in:
Huáng Jùnliàng 2020-04-14 09:23:54 -04:00 committed by GitHub
parent 070ec201bb
commit a466f9c310
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 70 additions and 4 deletions

View File

@ -1834,10 +1834,28 @@ export default class StatementParser extends ExpressionParser {
isExportDefaultSpecifier(): boolean { isExportDefaultSpecifier(): boolean {
if (this.match(tt.name)) { if (this.match(tt.name)) {
return this.state.value !== "async" && this.state.value !== "let"; const value = this.state.value;
if (value === "async" || value === "let") {
return false;
} }
if (
if (!this.match(tt._default)) { (value === "type" || value === "interface") &&
!this.state.containsEsc
) {
const l = this.lookahead();
// If we see any variable name other than `from` after `type` keyword,
// we consider it as flow/typescript type exports
// note that this approach may fail on some pedantic cases
// export type from = number
if (
(l.type === tt.name && l.value !== "from") ||
l.type === tt.braceL
) {
this.expectOnePlugin(["flow", "typescript"]);
return false;
}
}
} else if (!this.match(tt._default)) {
return false; return false;
} }

View File

@ -0,0 +1 @@
export interface Foo {}

View File

@ -0,0 +1,7 @@
{
"sourceType": "module",
"plugins": [
"jsx"
],
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'flow, typescript' (1:7)"
}

View File

@ -0,0 +1,2 @@
var Foo;
export type { Foo };

View File

@ -0,0 +1,7 @@
{
"sourceType": "module",
"plugins": [
"jsx"
],
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'flow, typescript' (2:7)"
}

View File

@ -0,0 +1 @@
export type Foo = number;

View File

@ -0,0 +1,7 @@
{
"sourceType": "module",
"plugins": [
"jsx"
],
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'flow, typescript' (1:7)"
}

View File

@ -0,0 +1,4 @@
{
"sourceType": "module",
"plugins": ["jsx"]
}

View File

@ -0,0 +1 @@
export interface Foo {}

View File

@ -0,0 +1,4 @@
{
"sourceType": "module",
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'flow, typescript' (1:7)"
}

View File

@ -0,0 +1,2 @@
var Foo;
export type { Foo };

View File

@ -0,0 +1,4 @@
{
"sourceType": "module",
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'flow, typescript' (2:7)"
}

View File

@ -0,0 +1 @@
export type Foo = number;

View File

@ -0,0 +1,4 @@
{
"sourceType": "module",
"throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'flow, typescript' (1:7)"
}

View File

@ -0,0 +1,3 @@
{
"sourceType": "module"
}