From ded89e636834231fa17a91f6cc9fcdd757e3e093 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hua=CC=81ng=20Ju=CC=80nlia=CC=80ng?= Date: Sun, 14 Jul 2019 21:36:15 -0400 Subject: [PATCH 01/10] fix: typo --- packages/babel-parser/src/parser/expression.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-parser/src/parser/expression.js b/packages/babel-parser/src/parser/expression.js index 9b48c7129e2f..5aba0020634a 100644 --- a/packages/babel-parser/src/parser/expression.js +++ b/packages/babel-parser/src/parser/expression.js @@ -1944,7 +1944,7 @@ export default class ExpressionParser extends LValParser { node.params[i], BIND_VAR, allowDuplicates ? null : nameHash, - "function paramter list", + "function parameter list", ); } } From e2888a4dbf67958ef9a91ecceb0ede61869c5fa1 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Sat, 15 Jun 2019 23:36:55 +0800 Subject: [PATCH 02/10] declare name for flow interface --- packages/babel-parser/src/plugins/flow.js | 1 + .../implements-exports/input.js | 3 + .../implements-exports/output.json | 160 ++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/output.json diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index 024a21baa5ab..06c3d857c123 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -461,6 +461,7 @@ export default (superClass: Class): Class => isClass?: boolean = false, ): void { node.id = this.flowParseRestrictedIdentifier(/*liberal*/ !isClass); + this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start); if (this.isRelational("<")) { node.typeParameters = this.flowParseTypeParameterDeclaration(); diff --git a/packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/input.js b/packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/input.js new file mode 100644 index 000000000000..6e0495a39c96 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/input.js @@ -0,0 +1,3 @@ +interface Foo {} + +export type { Foo } \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/output.json b/packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/output.json new file mode 100644 index 000000000000..15c57d370772 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/interfaces-module-and-script/implements-exports/output.json @@ -0,0 +1,160 @@ +{ + "type": "File", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "InterfaceDeclaration", + "start": 0, + "end": 16, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "id": { + "type": "Identifier", + "start": 10, + "end": 13, + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 13 + }, + "identifierName": "Foo" + }, + "name": "Foo" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 14, + "end": 16, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + }, + { + "type": "ExportNamedDeclaration", + "start": 18, + "end": 37, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "specifiers": [ + { + "type": "ExportSpecifier", + "start": 32, + "end": 35, + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 17 + } + }, + "local": { + "type": "Identifier", + "start": 32, + "end": 35, + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 17 + }, + "identifierName": "Foo" + }, + "name": "Foo" + }, + "exported": { + "type": "Identifier", + "start": 32, + "end": 35, + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 17 + }, + "identifierName": "Foo" + }, + "name": "Foo" + } + } + ], + "source": null, + "exportKind": "type", + "declaration": null + } + ], + "directives": [] + } +} \ No newline at end of file From 264446de8db793d41d2e543b8f42e81045c2db78 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Sun, 16 Jun 2019 09:33:24 +0800 Subject: [PATCH 03/10] add test case for export overload function, typescript --- .../test/fixtures/function/overloads-exports/input.mjs | 4 ++++ .../test/fixtures/function/overloads-exports/options.json | 4 ++++ .../test/fixtures/function/overloads-exports/output.mjs | 3 +++ 3 files changed, 11 insertions(+) create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/input.mjs create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/options.json create mode 100644 packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/output.mjs diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/input.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/input.mjs new file mode 100644 index 000000000000..d2e9958f6aaf --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/input.mjs @@ -0,0 +1,4 @@ +function f(): void; +function f(): void { +} +export { f } \ No newline at end of file diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/options.json b/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/options.json new file mode 100644 index 000000000000..d5e8a7e4201b --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["transform-typescript"], + "sourceType": "module" +} diff --git a/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/output.mjs b/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/output.mjs new file mode 100644 index 000000000000..a7997dca3a66 --- /dev/null +++ b/packages/babel-plugin-transform-typescript/test/fixtures/function/overloads-exports/output.mjs @@ -0,0 +1,3 @@ +function f() {} + +export { f }; From 67ed024a7f9a01ad6c379d7da737c52d466ec3e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 23 Jul 2019 22:13:32 -0400 Subject: [PATCH 04/10] test: add test Fixes #10044 --- .../flow/regression/issue-10044/input.js | 3 + .../flow/regression/issue-10044/output.json | 160 ++++++++++++++++++ 2 files changed, 163 insertions(+) create mode 100644 packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json diff --git a/packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js new file mode 100644 index 000000000000..56b6af08ad4b --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js @@ -0,0 +1,3 @@ +interface Foo {} + +export type { Foo } diff --git a/packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json new file mode 100644 index 000000000000..15c57d370772 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json @@ -0,0 +1,160 @@ +{ + "type": "File", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "InterfaceDeclaration", + "start": 0, + "end": 16, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "id": { + "type": "Identifier", + "start": 10, + "end": 13, + "loc": { + "start": { + "line": 1, + "column": 10 + }, + "end": { + "line": 1, + "column": 13 + }, + "identifierName": "Foo" + }, + "name": "Foo" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 14, + "end": 16, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 16 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + }, + { + "type": "ExportNamedDeclaration", + "start": 18, + "end": 37, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 19 + } + }, + "specifiers": [ + { + "type": "ExportSpecifier", + "start": 32, + "end": 35, + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 17 + } + }, + "local": { + "type": "Identifier", + "start": 32, + "end": 35, + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 17 + }, + "identifierName": "Foo" + }, + "name": "Foo" + }, + "exported": { + "type": "Identifier", + "start": 32, + "end": 35, + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 17 + }, + "identifierName": "Foo" + }, + "name": "Foo" + } + } + ], + "source": null, + "exportKind": "type", + "declaration": null + } + ], + "directives": [] + } +} \ No newline at end of file From 96ecd034d4b50cf3d90aa16a35a6af9721f4d776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Tue, 23 Jul 2019 22:14:21 -0400 Subject: [PATCH 05/10] test: update test --- .../fixtures/flow/declare-statements/input.js | 8 +- .../flow/declare-statements/output.js | 8 +- .../fixtures/flow/def-site-variance/input.js | 8 +- .../fixtures/flow/def-site-variance/output.js | 8 +- .../test/fixtures/flow/internal-slot/input.js | 4 +- .../fixtures/flow/internal-slot/output.js | 4 +- .../flow/iterator-inside-interface/input.js | 4 +- .../flow/iterator-inside-interface/output.js | 4 +- .../flow/regression/issue-10044/input.js | 9 +- .../flow/regression/issue-10044/output.json | 488 ++++++++++++++++-- .../const-violations/flow-declar/input.js | 2 +- .../const-violations/flow-declar/output.js | 2 +- .../flow-comments/declare-statements/input.js | 18 +- .../declare-statements/output.js | 18 +- .../strip-types/def-site-variance/input.js | 8 +- .../strip-declare-statements/input.js | 18 +- .../input.js | 8 +- .../strip-types/strip-iterator/input.js | 4 +- 18 files changed, 516 insertions(+), 107 deletions(-) diff --git a/packages/babel-generator/test/fixtures/flow/declare-statements/input.js b/packages/babel-generator/test/fixtures/flow/declare-statements/input.js index a0874c4d44a4..3a2d2aa6a74e 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-statements/input.js +++ b/packages/babel-generator/test/fixtures/flow/declare-statements/input.js @@ -11,13 +11,13 @@ declare class A { static [ indexer: number]: string } declare class A { static () : number } declare class B { (): number } declare class A mixins B, C {} -declare type A = string +declare type A1 = string declare type T = { [k:string]: U } -declare type B = { +declare type B1 = { fn?: (foo: string) => void, } -declare interface I { foo: string } -declare interface I { foo: T } +declare interface I1 { foo: string } +declare interface I2 { foo: T } declare module.exports: { foo: string } declare opaque type Foo: Bar; declare opaque type ID; diff --git a/packages/babel-generator/test/fixtures/flow/declare-statements/output.js b/packages/babel-generator/test/fixtures/flow/declare-statements/output.js index 7be6ae40cec7..c5f087d49ab0 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-statements/output.js +++ b/packages/babel-generator/test/fixtures/flow/declare-statements/output.js @@ -22,17 +22,17 @@ declare class B { (): number } declare class A mixins B, C {} -declare type A = string; +declare type A1 = string; declare type T = { [k: string]: U }; -declare type B = { +declare type B1 = { fn?: (foo: string) => void }; -declare interface I { +declare interface I1 { foo: string } -declare interface I { +declare interface I2 { foo: T } declare module.exports: { diff --git a/packages/babel-generator/test/fixtures/flow/def-site-variance/input.js b/packages/babel-generator/test/fixtures/flow/def-site-variance/input.js index 9f00e80993d1..0891ba212de5 100644 --- a/packages/babel-generator/test/fixtures/flow/def-site-variance/input.js +++ b/packages/babel-generator/test/fixtures/flow/def-site-variance/input.js @@ -5,10 +5,10 @@ type T2 = { +p: T }; type T3 = { -p: T }; type T4 = { +[k:K]: V }; type T5 = { -[k:K]: V }; -interface I { +p: T } -interface I { -p: T } -interface I { +[k:K]: V } -interface I { -[k:K]: V } +interface I1 { +p: T } +interface I2 { -p: T } +interface I3 { +[k:K]: V } +interface I4 { -[k:K]: V } declare class I { +p: T } declare class I { -p: T } declare class I { +[k:K]: V } diff --git a/packages/babel-generator/test/fixtures/flow/def-site-variance/output.js b/packages/babel-generator/test/fixtures/flow/def-site-variance/output.js index 5c2b69d1a6dd..66dd195d22e1 100644 --- a/packages/babel-generator/test/fixtures/flow/def-site-variance/output.js +++ b/packages/babel-generator/test/fixtures/flow/def-site-variance/output.js @@ -15,16 +15,16 @@ type T4 = { type T5 = { -[k: K]: V }; -interface I { +interface I1 { +p: T } -interface I { +interface I2 { -p: T } -interface I { +interface I3 { +[k: K]: V } -interface I { +interface I4 { -[k: K]: V } declare class I { diff --git a/packages/babel-generator/test/fixtures/flow/internal-slot/input.js b/packages/babel-generator/test/fixtures/flow/internal-slot/input.js index b00d3bd76f22..6056da54458a 100644 --- a/packages/babel-generator/test/fixtures/flow/internal-slot/input.js +++ b/packages/babel-generator/test/fixtures/flow/internal-slot/input.js @@ -1,7 +1,7 @@ declare class C { static [[foo]]: T } declare class C { [[foo]]: T } -interface I { [[foo]]: X } -interface I { [[foo]](): X } +interface I1 { [[foo]]: X } +interface I2 { [[foo]](): X } type T1 = { [[foo]]: X } type T2 = { [[foo]](): X } type T3 = { [[foo]]?: X } diff --git a/packages/babel-generator/test/fixtures/flow/internal-slot/output.js b/packages/babel-generator/test/fixtures/flow/internal-slot/output.js index 2a48fb9f186a..3b2b5ece1a23 100644 --- a/packages/babel-generator/test/fixtures/flow/internal-slot/output.js +++ b/packages/babel-generator/test/fixtures/flow/internal-slot/output.js @@ -4,10 +4,10 @@ declare class C { declare class C { [[foo]]: T } -interface I { +interface I1 { [[foo]]: X } -interface I { +interface I2 { [[foo]]() => X } type T1 = { diff --git a/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/input.js b/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/input.js index dab9a962acf7..7e5fb6309d97 100644 --- a/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/input.js +++ b/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/input.js @@ -1,7 +1,7 @@ -interface A { +interface A1 { @@iterator(): Iterator; } -interface A { +interface A2 { @@asyncIterator(): Iterator; } diff --git a/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/output.js b/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/output.js index ef726ab2fc5b..57b22ad84495 100644 --- a/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/output.js +++ b/packages/babel-generator/test/fixtures/flow/iterator-inside-interface/output.js @@ -1,6 +1,6 @@ -interface A { +interface A1 { @@iterator(): Iterator } -interface A { +interface A2 { @@asyncIterator(): Iterator } \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js index 56b6af08ad4b..4d3e8c48a837 100644 --- a/packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js +++ b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/input.js @@ -1,3 +1,8 @@ -interface Foo {} +declare class C1 {} +declare interface I1 {} +declare type T1 = number; -export type { Foo } +interface I2 {} +type T2 = number; + +export type { C1, I1, I2, T1, T2 } diff --git a/packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json index 15c57d370772..5df63e757a77 100644 --- a/packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json +++ b/packages/babel-parser/test/fixtures/flow/regression/issue-10044/output.json @@ -1,38 +1,38 @@ { "type": "File", "start": 0, - "end": 37, + "end": 140, "loc": { "start": { "line": 1, "column": 0 }, "end": { - "line": 3, - "column": 19 + "line": 8, + "column": 34 } }, "program": { "type": "Program", "start": 0, - "end": 37, + "end": 140, "loc": { "start": { "line": 1, "column": 0 }, "end": { - "line": 3, - "column": 19 + "line": 8, + "column": 34 } }, "sourceType": "module", "interpreter": null, "body": [ { - "type": "InterfaceDeclaration", + "type": "DeclareClass", "start": 0, - "end": 16, + "end": 19, "loc": { "start": { "line": 1, @@ -40,25 +40,25 @@ }, "end": { "line": 1, - "column": 16 + "column": 19 } }, "id": { "type": "Identifier", - "start": 10, - "end": 13, + "start": 14, + "end": 16, "loc": { "start": { "line": 1, - "column": 10 + "column": 14 }, "end": { "line": 1, - "column": 13 + "column": 16 }, - "identifierName": "Foo" + "identifierName": "C1" }, - "name": "Foo" + "name": "C1" }, "typeParameters": null, "extends": [], @@ -66,16 +66,16 @@ "mixins": [], "body": { "type": "ObjectTypeAnnotation", - "start": 14, - "end": 16, + "start": 17, + "end": 19, "loc": { "start": { "line": 1, - "column": 14 + "column": 17 }, "end": { "line": 1, - "column": 16 + "column": 19 } }, "callProperties": [], @@ -86,9 +86,65 @@ } }, { - "type": "ExportNamedDeclaration", - "start": 18, - "end": 37, + "type": "DeclareInterface", + "start": 20, + "end": 43, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "id": { + "type": "Identifier", + "start": 38, + "end": 40, + "loc": { + "start": { + "line": 2, + "column": 18 + }, + "end": { + "line": 2, + "column": 20 + }, + "identifierName": "I1" + }, + "name": "I1" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 41, + "end": 43, + "loc": { + "start": { + "line": 2, + "column": 21 + }, + "end": { + "line": 2, + "column": 23 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + }, + { + "type": "DeclareTypeAlias", + "start": 44, + "end": 69, "loc": { "start": { "line": 3, @@ -96,57 +152,405 @@ }, "end": { "line": 3, - "column": 19 + "column": 25 + } + }, + "id": { + "type": "Identifier", + "start": 57, + "end": 59, + "loc": { + "start": { + "line": 3, + "column": 13 + }, + "end": { + "line": 3, + "column": 15 + }, + "identifierName": "T1" + }, + "name": "T1" + }, + "typeParameters": null, + "right": { + "type": "NumberTypeAnnotation", + "start": 62, + "end": 68, + "loc": { + "start": { + "line": 3, + "column": 18 + }, + "end": { + "line": 3, + "column": 24 + } + } + } + }, + { + "type": "InterfaceDeclaration", + "start": 71, + "end": 86, + "loc": { + "start": { + "line": 5, + "column": 0 + }, + "end": { + "line": 5, + "column": 15 + } + }, + "id": { + "type": "Identifier", + "start": 81, + "end": 83, + "loc": { + "start": { + "line": 5, + "column": 10 + }, + "end": { + "line": 5, + "column": 12 + }, + "identifierName": "I2" + }, + "name": "I2" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 84, + "end": 86, + "loc": { + "start": { + "line": 5, + "column": 13 + }, + "end": { + "line": 5, + "column": 15 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + }, + { + "type": "TypeAlias", + "start": 87, + "end": 104, + "loc": { + "start": { + "line": 6, + "column": 0 + }, + "end": { + "line": 6, + "column": 17 + } + }, + "id": { + "type": "Identifier", + "start": 92, + "end": 94, + "loc": { + "start": { + "line": 6, + "column": 5 + }, + "end": { + "line": 6, + "column": 7 + }, + "identifierName": "T2" + }, + "name": "T2" + }, + "typeParameters": null, + "right": { + "type": "NumberTypeAnnotation", + "start": 97, + "end": 103, + "loc": { + "start": { + "line": 6, + "column": 10 + }, + "end": { + "line": 6, + "column": 16 + } + } + } + }, + { + "type": "ExportNamedDeclaration", + "start": 106, + "end": 140, + "loc": { + "start": { + "line": 8, + "column": 0 + }, + "end": { + "line": 8, + "column": 34 } }, "specifiers": [ { "type": "ExportSpecifier", - "start": 32, - "end": 35, + "start": 120, + "end": 122, "loc": { "start": { - "line": 3, + "line": 8, "column": 14 }, "end": { - "line": 3, - "column": 17 + "line": 8, + "column": 16 } }, "local": { "type": "Identifier", - "start": 32, - "end": 35, + "start": 120, + "end": 122, "loc": { "start": { - "line": 3, + "line": 8, "column": 14 }, "end": { - "line": 3, - "column": 17 + "line": 8, + "column": 16 }, - "identifierName": "Foo" + "identifierName": "C1" }, - "name": "Foo" + "name": "C1" }, "exported": { "type": "Identifier", - "start": 32, - "end": 35, + "start": 120, + "end": 122, "loc": { "start": { - "line": 3, + "line": 8, "column": 14 }, "end": { - "line": 3, - "column": 17 + "line": 8, + "column": 16 + }, + "identifierName": "C1" + }, + "name": "C1" + } + }, + { + "type": "ExportSpecifier", + "start": 124, + "end": 126, + "loc": { + "start": { + "line": 8, + "column": 18 + }, + "end": { + "line": 8, + "column": 20 + } + }, + "local": { + "type": "Identifier", + "start": 124, + "end": 126, + "loc": { + "start": { + "line": 8, + "column": 18 + }, + "end": { + "line": 8, + "column": 20 + }, + "identifierName": "I1" + }, + "name": "I1" + }, + "exported": { + "type": "Identifier", + "start": 124, + "end": 126, + "loc": { + "start": { + "line": 8, + "column": 18 + }, + "end": { + "line": 8, + "column": 20 + }, + "identifierName": "I1" + }, + "name": "I1" + } + }, + { + "type": "ExportSpecifier", + "start": 128, + "end": 130, + "loc": { + "start": { + "line": 8, + "column": 22 + }, + "end": { + "line": 8, + "column": 24 + } + }, + "local": { + "type": "Identifier", + "start": 128, + "end": 130, + "loc": { + "start": { + "line": 8, + "column": 22 + }, + "end": { + "line": 8, + "column": 24 + }, + "identifierName": "I2" + }, + "name": "I2" + }, + "exported": { + "type": "Identifier", + "start": 128, + "end": 130, + "loc": { + "start": { + "line": 8, + "column": 22 + }, + "end": { + "line": 8, + "column": 24 + }, + "identifierName": "I2" + }, + "name": "I2" + } + }, + { + "type": "ExportSpecifier", + "start": 132, + "end": 134, + "loc": { + "start": { + "line": 8, + "column": 26 + }, + "end": { + "line": 8, + "column": 28 + } + }, + "local": { + "type": "Identifier", + "start": 132, + "end": 134, + "loc": { + "start": { + "line": 8, + "column": 26 + }, + "end": { + "line": 8, + "column": 28 + }, + "identifierName": "T1" + }, + "name": "T1" + }, + "exported": { + "type": "Identifier", + "start": 132, + "end": 134, + "loc": { + "start": { + "line": 8, + "column": 26 + }, + "end": { + "line": 8, + "column": 28 + }, + "identifierName": "T1" + }, + "name": "T1" + } + }, + { + "type": "ExportSpecifier", + "start": 136, + "end": 138, + "loc": { + "start": { + "line": 8, + "column": 30 + }, + "end": { + "line": 8, + "column": 32 + } + }, + "local": { + "type": "Identifier", + "start": 136, + "end": 138, + "loc": { + "start": { + "line": 8, + "column": 30 + }, + "end": { + "line": 8, + "column": 32 + }, + "identifierName": "T2" + }, + "name": "T2" + }, + "exported": { + "type": "Identifier", + "start": 136, + "end": 138, + "loc": { + "start": { + "line": 8, + "column": 30 + }, + "end": { + "line": 8, + "column": 32 }, - "identifierName": "Foo" + "identifierName": "T2" }, - "name": "Foo" + "name": "T2" } } ], diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/input.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/input.js index e9ca299ae87e..666d38e3a4ed 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/input.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/input.js @@ -1,2 +1,2 @@ declare class foo {} -const foo = 1; +const foo1 = 1; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/output.js index 9375fc4abd22..0332cc0604b1 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/const-violations/flow-declar/output.js @@ -1 +1 @@ -var foo = 1; +var foo1 = 1; diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/input.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/input.js index 7c2826479454..64db78b233dc 100644 --- a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/input.js +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/input.js @@ -4,13 +4,13 @@ declare function foo(): void declare function foo(): void; declare function foo(): void; declare function foo(x: number, y: string): void; -declare class A {} -declare class A extends B { x: number } -declare class A { static foo(): number, static x : string } -declare class A { static [ indexer: number]: string } -declare class A { static () : number } -declare class A mixins B, C {} -declare type A = string +declare class A1 {} +declare class A1 extends B { x: number } +declare class A1 { static foo(): number, static x : string } +declare class A1 { static [ indexer: number]: string } +declare class A1 { static () : number } +declare class A1 mixins B, C {} +declare type A2 = string declare type T = { [k:string]: U } -declare interface I { foo: string } -declare interface I { foo: T } +declare interface I1 { foo: string } +declare interface I2 { foo: T } diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/output.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/output.js index 3be48955c146..3feecb2a9347 100644 --- a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/output.js +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/declare-statements/output.js @@ -10,22 +10,22 @@ /*:: declare function foo(x: number, y: string): void;*/ -/*:: declare class A {}*/ +/*:: declare class A1 {}*/ -/*:: declare class A extends B { x: number }*/ +/*:: declare class A1 extends B { x: number }*/ -/*:: declare class A { static foo(): number, static x : string }*/ +/*:: declare class A1 { static foo(): number, static x : string }*/ -/*:: declare class A { static [ indexer: number]: string }*/ +/*:: declare class A1 { static [ indexer: number]: string }*/ -/*:: declare class A { static () : number }*/ +/*:: declare class A1 { static () : number }*/ -/*:: declare class A mixins B, C {}*/ +/*:: declare class A1 mixins B, C {}*/ -/*:: declare type A = string*/ +/*:: declare type A2 = string*/ /*:: declare type T = { [k:string]: U }*/ -/*:: declare interface I { foo: string }*/ +/*:: declare interface I1 { foo: string }*/ -/*:: declare interface I { foo: T }*/ +/*:: declare interface I2 { foo: T }*/ diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/def-site-variance/input.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/def-site-variance/input.js index eb188c5c908a..9cc374a5d523 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/def-site-variance/input.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/def-site-variance/input.js @@ -5,10 +5,10 @@ type T1 = { +p: T } type T2 = { -p: T } type T3 = { +[k:K]: V } type T4 = { -[k:K]: V } -interface I { +p: T } -interface I { -p: T } -interface I { +[k:K]: V } -interface I { -[k:K]: V } +interface I1 { +p: T } +interface I2 { -p: T } +interface I3 { +[k:K]: V } +interface I4 { -[k:K]: V } declare class I { +p: T } declare class I { -p: T } declare class I { +[k:K]: V } diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-statements/input.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-statements/input.js index 75b24828392c..10cce21e41f8 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-statements/input.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-statements/input.js @@ -4,14 +4,14 @@ declare function foo(): void declare function foo(): void; declare function foo(): void; declare function foo(x: number, y: string): void; -declare class A {} -declare class A extends B { x: number } -declare class A { static foo(): number; static x : string } -declare class A { static [ indexer: number]: string } -declare class A { static () : number } -declare class A mixins B, C {} -declare type A = string +declare class A1 {} +declare class A1 extends B { x: number } +declare class A1 { static foo(): number; static x : string } +declare class A1 { static [ indexer: number]: string } +declare class A1 { static () : number } +declare class A1 mixins B, C {} +declare type A2 = string declare type T = { [k:string]: U } -declare interface I { foo: string } -declare interface I { foo: T } +declare interface I1 { foo: string } +declare interface I2 { foo: T } declare module.exports: string; diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-interfaces-module-and-script/input.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-interfaces-module-and-script/input.js index 2e37dfaf618d..1ee5de6c9ea3 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-interfaces-module-and-script/input.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-interfaces-module-and-script/input.js @@ -1,7 +1,7 @@ -interface A {} -interface A extends B {} -interface A extends B, C {} -interface A { foo: () => number; } +interface A1 {} +interface A2 extends B {} +interface A3 extends B, C {} +interface A4 { foo: () => number; } interface Dictionary { [index: string]: string; length: number; } class Foo implements Bar {} class Foo2 extends Bar implements Bat, Man {} diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-iterator/input.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-iterator/input.js index 741c23987d23..7a1d4011b35a 100644 --- a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-iterator/input.js +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-iterator/input.js @@ -6,10 +6,10 @@ declare class A { @@asyncIterator(): Iterator; } -interface A { +interface A1 { @@iterator(): Iterator; } -interface A { +interface A2 { @@asyncIterator(): Iterator; } From 274cdede2401499ae336e738e2e05e02d345e4df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hua=CC=81ng=20Ju=CC=80nlia=CC=80ng?= Date: Tue, 16 Jul 2019 10:05:47 -0400 Subject: [PATCH 06/10] test(flow): add multiple declarations regression test --- .../flow/multiple-declarations/class/input.js | 2 + .../multiple-declarations/class/options.json | 8 + .../declare-class/input.js | 6 + .../declare-class/output.json | 253 ++++++++++++++++++ .../declare-function/input.js | 3 + .../declare-function/output.json | 249 +++++++++++++++++ .../declare-var/input.js | 3 + .../declare-var/output.json | 150 +++++++++++ .../multiple-declarations/interface/input.js | 2 + .../interface/options.json | 8 + .../flow/multiple-declarations/type/input.js | 2 + .../multiple-declarations/type/options.json | 8 + 12 files changed, 694 insertions(+) create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/class/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/class/options.json create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/output.json create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/output.json create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/output.json create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/options.json create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/type/input.js create mode 100644 packages/babel-parser/test/fixtures/flow/multiple-declarations/type/options.json diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/class/input.js b/packages/babel-parser/test/fixtures/flow/multiple-declarations/class/input.js new file mode 100644 index 000000000000..fa5ff14cb9be --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/class/input.js @@ -0,0 +1,2 @@ +declare class C1 {} +class C1 {} diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/class/options.json b/packages/babel-parser/test/fixtures/flow/multiple-declarations/class/options.json new file mode 100644 index 000000000000..06ad6ded6032 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/class/options.json @@ -0,0 +1,8 @@ +{ + "sourceType": "module", + "plugins": [ + "jsx", + "flow" + ], + "throws": "Identifier 'C1' has already been declared (2:6)" +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/input.js b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/input.js new file mode 100644 index 000000000000..d9470b0fd596 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/input.js @@ -0,0 +1,6 @@ +declare class C1{} +declare class C1{} + +declare module M1 { + declare class C1 {} +} diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/output.json b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/output.json new file mode 100644 index 000000000000..149ca744eb22 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-class/output.json @@ -0,0 +1,253 @@ +{ + "type": "File", + "start": 0, + "end": 82, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 82, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "DeclareClass", + "start": 0, + "end": 18, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "id": { + "type": "Identifier", + "start": 14, + "end": 16, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 16 + }, + "identifierName": "C1" + }, + "name": "C1" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 16, + "end": 18, + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + }, + { + "type": "DeclareClass", + "start": 19, + "end": 37, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "id": { + "type": "Identifier", + "start": 33, + "end": 35, + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 16 + }, + "identifierName": "C1" + }, + "name": "C1" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 35, + "end": 37, + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + }, + { + "type": "DeclareModule", + "start": 39, + "end": 82, + "loc": { + "start": { + "line": 4, + "column": 0 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "id": { + "type": "Identifier", + "start": 54, + "end": 56, + "loc": { + "start": { + "line": 4, + "column": 15 + }, + "end": { + "line": 4, + "column": 17 + }, + "identifierName": "M1" + }, + "name": "M1" + }, + "body": { + "type": "BlockStatement", + "start": 57, + "end": 82, + "loc": { + "start": { + "line": 4, + "column": 18 + }, + "end": { + "line": 6, + "column": 1 + } + }, + "body": [ + { + "type": "DeclareClass", + "start": 61, + "end": 80, + "loc": { + "start": { + "line": 5, + "column": 2 + }, + "end": { + "line": 5, + "column": 21 + } + }, + "id": { + "type": "Identifier", + "start": 75, + "end": 77, + "loc": { + "start": { + "line": 5, + "column": 16 + }, + "end": { + "line": 5, + "column": 18 + }, + "identifierName": "C1" + }, + "name": "C1" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 78, + "end": 80, + "loc": { + "start": { + "line": 5, + "column": 19 + }, + "end": { + "line": 5, + "column": 21 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + } + ] + }, + "kind": "CommonJS" + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/input.js b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/input.js new file mode 100644 index 000000000000..fb98eb970189 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/input.js @@ -0,0 +1,3 @@ +declare function F1(): void +declare function F1(): void +function F1() {} diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/output.json b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/output.json new file mode 100644 index 000000000000..ad507ae14079 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-function/output.json @@ -0,0 +1,249 @@ +{ + "type": "File", + "start": 0, + "end": 72, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 72, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "DeclareFunction", + "start": 0, + "end": 27, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 27 + } + }, + "id": { + "type": "Identifier", + "start": 17, + "end": 27, + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 27 + }, + "identifierName": "F1" + }, + "name": "F1", + "typeAnnotation": { + "type": "TypeAnnotation", + "start": 19, + "end": 27, + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 27 + } + }, + "typeAnnotation": { + "type": "FunctionTypeAnnotation", + "start": 19, + "end": 27, + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 27 + } + }, + "typeParameters": null, + "params": [], + "rest": null, + "returnType": { + "type": "VoidTypeAnnotation", + "start": 23, + "end": 27, + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 27 + } + } + } + } + } + }, + "predicate": null + }, + { + "type": "DeclareFunction", + "start": 28, + "end": 55, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 27 + } + }, + "id": { + "type": "Identifier", + "start": 45, + "end": 55, + "loc": { + "start": { + "line": 2, + "column": 17 + }, + "end": { + "line": 2, + "column": 27 + }, + "identifierName": "F1" + }, + "name": "F1", + "typeAnnotation": { + "type": "TypeAnnotation", + "start": 47, + "end": 55, + "loc": { + "start": { + "line": 2, + "column": 19 + }, + "end": { + "line": 2, + "column": 27 + } + }, + "typeAnnotation": { + "type": "FunctionTypeAnnotation", + "start": 47, + "end": 55, + "loc": { + "start": { + "line": 2, + "column": 19 + }, + "end": { + "line": 2, + "column": 27 + } + }, + "typeParameters": null, + "params": [], + "rest": null, + "returnType": { + "type": "VoidTypeAnnotation", + "start": 51, + "end": 55, + "loc": { + "start": { + "line": 2, + "column": 23 + }, + "end": { + "line": 2, + "column": 27 + } + } + } + } + } + }, + "predicate": null + }, + { + "type": "FunctionDeclaration", + "start": 56, + "end": 72, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "id": { + "type": "Identifier", + "start": 65, + "end": 67, + "loc": { + "start": { + "line": 3, + "column": 9 + }, + "end": { + "line": 3, + "column": 11 + }, + "identifierName": "F1" + }, + "name": "F1" + }, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "start": 70, + "end": 72, + "loc": { + "start": { + "line": 3, + "column": 14 + }, + "end": { + "line": 3, + "column": 16 + } + }, + "body": [], + "directives": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/input.js b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/input.js new file mode 100644 index 000000000000..21b4f11b204c --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/input.js @@ -0,0 +1,3 @@ +declare var V1; +declare var V1; +var V1; diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/output.json b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/output.json new file mode 100644 index 000000000000..b96badb7fe54 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/declare-var/output.json @@ -0,0 +1,150 @@ +{ + "type": "File", + "start": 0, + "end": 39, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 39, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "DeclareVariable", + "start": 0, + "end": 15, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 15 + } + }, + "id": { + "type": "Identifier", + "start": 12, + "end": 14, + "loc": { + "start": { + "line": 1, + "column": 12 + }, + "end": { + "line": 1, + "column": 14 + }, + "identifierName": "V1" + }, + "name": "V1" + } + }, + { + "type": "DeclareVariable", + "start": 16, + "end": 31, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "id": { + "type": "Identifier", + "start": 28, + "end": 30, + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 14 + }, + "identifierName": "V1" + }, + "name": "V1" + } + }, + { + "type": "VariableDeclaration", + "start": 32, + "end": 39, + "loc": { + "start": { + "line": 3, + "column": 0 + }, + "end": { + "line": 3, + "column": 7 + } + }, + "declarations": [ + { + "type": "VariableDeclarator", + "start": 36, + "end": 38, + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 6 + } + }, + "id": { + "type": "Identifier", + "start": 36, + "end": 38, + "loc": { + "start": { + "line": 3, + "column": 4 + }, + "end": { + "line": 3, + "column": 6 + }, + "identifierName": "V1" + }, + "name": "V1" + }, + "init": null + } + ], + "kind": "var" + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/input.js b/packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/input.js new file mode 100644 index 000000000000..bca93948ce50 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/input.js @@ -0,0 +1,2 @@ +interface I {}; +interface I {}; diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/options.json b/packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/options.json new file mode 100644 index 000000000000..5672ce1b6444 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/interface/options.json @@ -0,0 +1,8 @@ +{ + "sourceType": "module", + "plugins": [ + "jsx", + "flow" + ], + "throws": "Identifier 'I' has already been declared (2:10)" +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/type/input.js b/packages/babel-parser/test/fixtures/flow/multiple-declarations/type/input.js new file mode 100644 index 000000000000..273aa1c7176c --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/type/input.js @@ -0,0 +1,2 @@ +type T1 = string; +type T1 = number; diff --git a/packages/babel-parser/test/fixtures/flow/multiple-declarations/type/options.json b/packages/babel-parser/test/fixtures/flow/multiple-declarations/type/options.json new file mode 100644 index 000000000000..946261f4e872 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/multiple-declarations/type/options.json @@ -0,0 +1,8 @@ +{ + "sourceType": "module", + "plugins": [ + "jsx", + "flow" + ], + "throws": "Identifier 'T1' has already been declared (2:5)" +} \ No newline at end of file From 81f0c8b7dd7cedac477530bc0fbc997a78e67848 Mon Sep 17 00:00:00 2001 From: Tan Li Hau Date: Sun, 23 Jun 2019 23:17:58 +0800 Subject: [PATCH 07/10] re-enable flow test case # Conflicts: # packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/def-site-variance/input.js # packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-declare-statements/input.js # packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-interfaces-module-and-script/input.js # packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-iterator/input.js --- packages/babel-parser/src/plugins/flow.js | 11 +- .../options.json | 3 - .../.dupl-decl-declare-func-func/options.json | 3 - .../.dupl-decl-declare-var-let/options.json | 3 - .../.dupl-decl-var-declare-class/options.json | 3 - .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../output.json | 147 +++++++++++++++ .../input.js | 0 .../options.json | 0 .../input.js | 0 .../output.json | 0 .../input.js | 0 .../output.json | 178 ++++++++++++++++++ .../input.js | 0 .../dupl-decl-declare-func-func/options.json | 8 + .../input.js | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../output.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../input.js | 0 .../options.json | 0 .../input.js | 0 .../options.json | 0 43 files changed, 343 insertions(+), 13 deletions(-) delete mode 100644 packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-var/options.json delete mode 100644 packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-func/options.json delete mode 100644 packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-let/options.json delete mode 100644 packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/options.json rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-const-declare-class => dupl-decl-const-declare-class}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-const-declare-class => dupl-decl-const-declare-class}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-const-declare-interface => dupl-decl-const-declare-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-const-declare-interface => dupl-decl-const-declare-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-const-interface => dupl-decl-const-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-const-interface => dupl-decl-const-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-class-declare-class => dupl-decl-declare-class-declare-class}/input.js (100%) create mode 100644 packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-class/output.json rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-class-declare-interface => dupl-decl-declare-class-declare-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-class-declare-interface => dupl-decl-declare-class-declare-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-func-declare-func => dupl-decl-declare-func-declare-func}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-func-declare-func => dupl-decl-declare-func-declare-func}/output.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-func-declare-var => dupl-decl-declare-func-declare-var}/input.js (100%) create mode 100644 packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-var/output.json rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-func-func => dupl-decl-declare-func-func}/input.js (100%) create mode 100644 packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-func-let => dupl-decl-declare-func-let}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-interface-declare-class => dupl-decl-declare-interface-declare-class}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-interface-declare-class => dupl-decl-declare-interface-declare-class}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-var-declare-var => dupl-decl-declare-var-declare-var}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-var-declare-var => dupl-decl-declare-var-declare-var}/output.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-var-let => dupl-decl-declare-var-let}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-declare-func-let => dupl-decl-declare-var-let}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-interface-interface => dupl-decl-interface-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-interface-interface => dupl-decl-interface-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-let-declare-class => dupl-decl-let-declare-class}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-let-declare-class => dupl-decl-let-declare-class}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-let-declare-interface => dupl-decl-let-declare-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-let-declare-interface => dupl-decl-let-declare-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-let-interface => dupl-decl-let-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-let-interface => dupl-decl-let-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-type-interface => dupl-decl-type-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-type-interface => dupl-decl-type-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-var-declare-class => dupl-decl-var-declare-class}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-var-declare-interface => dupl-decl-var-declare-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-var-declare-interface => dupl-decl-var-declare-interface}/options.json (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-var-interface => dupl-decl-var-interface}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{.dupl-decl-var-interface => dupl-decl-var-interface}/options.json (100%) diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index 06c3d857c123..4a9bdf297987 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -14,6 +14,8 @@ import { type BindingTypes, BIND_NONE, BIND_LEXICAL, + BIND_VAR, + BIND_FUNCTION, SCOPE_ARROW, SCOPE_OTHER, } from "../util/scopeflags"; @@ -192,6 +194,7 @@ export default (superClass: Class): Class => this.next(); const id = (node.id = this.parseIdentifier()); + this.scope.declareName(node.id.name, BIND_VAR, node.id.start); const typeNode = this.startNode(); const typeContainer = this.startNode(); @@ -270,6 +273,7 @@ export default (superClass: Class): Class => node.id = this.flowParseTypeAnnotatableIdentifier( /*allowPrimitiveOverride*/ true, ); + this.scope.declareName(node.id.name, BIND_VAR, node.id.start); this.semicolon(); return this.finishNode(node, "DeclareVariable"); } @@ -461,7 +465,12 @@ export default (superClass: Class): Class => isClass?: boolean = false, ): void { node.id = this.flowParseRestrictedIdentifier(/*liberal*/ !isClass); - this.scope.declareName(node.id.name, BIND_LEXICAL, node.id.start); + + this.scope.declareName( + node.id.name, + isClass ? BIND_FUNCTION : BIND_LEXICAL, + node.id.start, + ); if (this.isRelational("<")) { node.typeParameters = this.flowParseTypeParameterDeclaration(); diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-var/options.json b/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-var/options.json deleted file mode 100644 index 81dc2c90799f..000000000000 --- a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-var/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "throws": "Identifier 'A' has already been declared (2:12)" -} diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-func/options.json b/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-func/options.json deleted file mode 100644 index 5f6027f8dd3b..000000000000 --- a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-func/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "throws": "Identifier 'A' has already been declared (2:9)" -} diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-let/options.json b/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-let/options.json deleted file mode 100644 index b6ff3a4b0987..000000000000 --- a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-let/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "throws": "Identifier 'A' has already been declared (2:4)" -} diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/options.json b/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/options.json deleted file mode 100644 index 4a1b4e5c5cd4..000000000000 --- a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "throws": "Identifier 'A' has already been declared (2:14)" -} diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-class/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-class/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-class/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-class/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-class/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-class/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-class/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-class/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-declare-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-declare-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-const-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-const-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-class-declare-class/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-class/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-class-declare-class/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-class/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-class/output.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-class/output.json new file mode 100644 index 000000000000..25358ef97ae7 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-class/output.json @@ -0,0 +1,147 @@ +{ + "type": "File", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 37, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "DeclareClass", + "start": 0, + "end": 18, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "id": { + "type": "Identifier", + "start": 14, + "end": 15, + "loc": { + "start": { + "line": 1, + "column": 14 + }, + "end": { + "line": 1, + "column": 15 + }, + "identifierName": "A" + }, + "name": "A" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 16, + "end": 18, + "loc": { + "start": { + "line": 1, + "column": 16 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + }, + { + "type": "DeclareClass", + "start": 19, + "end": 37, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "id": { + "type": "Identifier", + "start": 33, + "end": 34, + "loc": { + "start": { + "line": 2, + "column": 14 + }, + "end": { + "line": 2, + "column": 15 + }, + "identifierName": "A" + }, + "name": "A" + }, + "typeParameters": null, + "extends": [], + "implements": [], + "mixins": [], + "body": { + "type": "ObjectTypeAnnotation", + "start": 35, + "end": 37, + "loc": { + "start": { + "line": 2, + "column": 16 + }, + "end": { + "line": 2, + "column": 18 + } + }, + "callProperties": [], + "properties": [], + "indexers": [], + "internalSlots": [], + "exact": false + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-class-declare-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-class-declare-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-class-declare-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-class-declare-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-class-declare-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-func/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-func/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-func/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-func/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-func/output.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-func/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-func/output.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-func/output.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-var/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-var/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-declare-var/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-var/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-var/output.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-var/output.json new file mode 100644 index 000000000000..5e5c135d5908 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-declare-var/output.json @@ -0,0 +1,178 @@ +{ + "type": "File", + "start": 0, + "end": 50, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 50, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "DeclareFunction", + "start": 0, + "end": 27, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 27 + } + }, + "id": { + "type": "Identifier", + "start": 17, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 26 + }, + "identifierName": "A" + }, + "name": "A", + "typeAnnotation": { + "type": "TypeAnnotation", + "start": 18, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "typeAnnotation": { + "type": "FunctionTypeAnnotation", + "start": 18, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "typeParameters": null, + "params": [], + "rest": null, + "returnType": { + "type": "VoidTypeAnnotation", + "start": 22, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 26 + } + } + } + } + } + }, + "predicate": null + }, + { + "type": "DeclareVariable", + "start": 28, + "end": 50, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 22 + } + }, + "id": { + "type": "Identifier", + "start": 40, + "end": 49, + "loc": { + "start": { + "line": 2, + "column": 12 + }, + "end": { + "line": 2, + "column": 21 + }, + "identifierName": "A" + }, + "name": "A", + "typeAnnotation": { + "type": "TypeAnnotation", + "start": 41, + "end": 49, + "loc": { + "start": { + "line": 2, + "column": 13 + }, + "end": { + "line": 2, + "column": 21 + } + }, + "typeAnnotation": { + "type": "NumberTypeAnnotation", + "start": 43, + "end": 49, + "loc": { + "start": { + "line": 2, + "column": 15 + }, + "end": { + "line": 2, + "column": 21 + } + } + } + } + } + } + ], + "directives": [] + } +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-func/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-func/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json new file mode 100644 index 000000000000..e6924bc0cda3 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json @@ -0,0 +1,8 @@ +{ + "sourceType": "module", + "plugins": [ + "jsx", + "flow" + ], + "throws": "Identifier 'A' has already been declared (2:9)" +} \ No newline at end of file diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-let/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-let/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-let/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-let/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-interface-declare-class/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-interface-declare-class/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-interface-declare-class/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-interface-declare-class/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-interface-declare-class/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-interface-declare-class/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-interface-declare-class/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-interface-declare-class/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-declare-var/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-declare-var/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-declare-var/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-declare-var/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-declare-var/output.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-declare-var/output.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-declare-var/output.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-declare-var/output.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-let/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-let/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-var-let/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-let/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-let/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-let/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-let/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-var-let/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-interface-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-interface-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-interface-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-interface-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-interface-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-interface-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-interface-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-interface-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-class/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-class/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-class/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-class/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-class/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-class/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-class/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-class/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-declare-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-declare-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-let-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-let-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-type-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-type-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-type-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-type-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-type-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-type-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-type-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-type-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-class/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-class/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-interface/options.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-interface/input.js b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-interface/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-interface/input.js rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-interface/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-interface/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-interface/options.json similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-interface/options.json rename to packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-interface/options.json From ccc3975076a0e2e385866e9a35c1e4a77e534e2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 24 Jul 2019 10:30:43 -0400 Subject: [PATCH 08/10] test: disable two flow dupl-decl test --- .../input.js | 0 .../input.js | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename packages/babel-parser/test/fixtures/flow/scope/{dupl-decl-declare-func-let => .dupl-decl-declare-func-let}/input.js (100%) rename packages/babel-parser/test/fixtures/flow/scope/{dupl-decl-var-declare-class => .dupl-decl-var-declare-class}/input.js (100%) diff --git a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-let/input.js b/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-let/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-let/input.js rename to packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-declare-func-let/input.js diff --git a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-class/input.js b/packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/input.js similarity index 100% rename from packages/babel-parser/test/fixtures/flow/scope/dupl-decl-var-declare-class/input.js rename to packages/babel-parser/test/fixtures/flow/scope/.dupl-decl-var-declare-class/input.js From a61fa147bbd4a6c67c3fefd8cdaab9d82111c795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 24 Jul 2019 10:31:24 -0400 Subject: [PATCH 09/10] fix: do not declare name for declare function until we figure out a better way --- packages/babel-parser/src/plugins/flow.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/babel-parser/src/plugins/flow.js b/packages/babel-parser/src/plugins/flow.js index 4a9bdf297987..e1a9e72a291c 100644 --- a/packages/babel-parser/src/plugins/flow.js +++ b/packages/babel-parser/src/plugins/flow.js @@ -194,7 +194,6 @@ export default (superClass: Class): Class => this.next(); const id = (node.id = this.parseIdentifier()); - this.scope.declareName(node.id.name, BIND_VAR, node.id.start); const typeNode = this.startNode(); const typeContainer = this.startNode(); From 1bf302bede54e5b15a33f90a473df049c8a2858b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Wed, 24 Jul 2019 10:31:50 -0400 Subject: [PATCH 10/10] test: duplicate declare function and function would not throw --- .../dupl-decl-declare-func-func/options.json | 5 +- .../dupl-decl-declare-func-func/output.json | 168 ++++++++++++++++++ 2 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/output.json diff --git a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json index e6924bc0cda3..7c91792f0e9c 100644 --- a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json +++ b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/options.json @@ -3,6 +3,5 @@ "plugins": [ "jsx", "flow" - ], - "throws": "Identifier 'A' has already been declared (2:9)" -} \ No newline at end of file + ] +} diff --git a/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/output.json b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/output.json new file mode 100644 index 000000000000..44114ec35913 --- /dev/null +++ b/packages/babel-parser/test/fixtures/flow/scope/dupl-decl-declare-func-func/output.json @@ -0,0 +1,168 @@ +{ + "type": "File", + "start": 0, + "end": 43, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "program": { + "type": "Program", + "start": 0, + "end": 43, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "sourceType": "module", + "interpreter": null, + "body": [ + { + "type": "DeclareFunction", + "start": 0, + "end": 27, + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 27 + } + }, + "id": { + "type": "Identifier", + "start": 17, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 17 + }, + "end": { + "line": 1, + "column": 26 + }, + "identifierName": "A" + }, + "name": "A", + "typeAnnotation": { + "type": "TypeAnnotation", + "start": 18, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "typeAnnotation": { + "type": "FunctionTypeAnnotation", + "start": 18, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 26 + } + }, + "typeParameters": null, + "params": [], + "rest": null, + "returnType": { + "type": "VoidTypeAnnotation", + "start": 22, + "end": 26, + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 26 + } + } + } + } + } + }, + "predicate": null + }, + { + "type": "FunctionDeclaration", + "start": 28, + "end": 43, + "loc": { + "start": { + "line": 2, + "column": 0 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "id": { + "type": "Identifier", + "start": 37, + "end": 38, + "loc": { + "start": { + "line": 2, + "column": 9 + }, + "end": { + "line": 2, + "column": 10 + }, + "identifierName": "A" + }, + "name": "A" + }, + "generator": false, + "async": false, + "params": [], + "body": { + "type": "BlockStatement", + "start": 41, + "end": 43, + "loc": { + "start": { + "line": 2, + "column": 13 + }, + "end": { + "line": 2, + "column": 15 + } + }, + "body": [], + "directives": [] + } + } + ], + "directives": [] + } +} \ No newline at end of file