Fix type definitions to fully support Typescript (#6939)

This commit is contained in:
Daniel Poindexter
2017-12-08 17:03:01 -06:00
committed by Brian Ng
parent 82357d79a7
commit 12ac1bccd7
5 changed files with 127 additions and 84 deletions

View File

@@ -80,7 +80,7 @@ Aliases: `Scopable`, `Function`, `BlockParent`, `FunctionParent`, `Expression`,
- `expression`: `boolean` (default: `null`)
- `generator`: `boolean` (default: `false`)
- `returnType`: `TypeAnnotation | TSTypeAnnotation | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | TSTypeParameterDeclaration | Noop` (default: `null`)
---
@@ -233,7 +233,7 @@ Aliases: `Expression`
- `callee`: `Expression` (required)
- `arguments`: `Array<Expression | SpreadElement | JSXNamespacedName>` (required)
- `optional`: `true | false` (default: `null`)
- `typeParameters`: `TypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TypeParameterInstantiation | TSTypeParameterInstantiation` (default: `null`)
---
@@ -279,8 +279,8 @@ Aliases: `Scopable`, `Class`, `Statement`, `Declaration`, `Pureish`
- `declare`: `boolean` (default: `null`)
- `implements`: `Array<TSExpressionWithTypeArguments | FlowClassImplements>` (default: `null`)
- `mixins` (default: `null`)
- `superTypeParameters`: `TypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `superTypeParameters`: `TypeParameterInstantiation | TSTypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | TSTypeParameterDeclaration | Noop` (default: `null`)
---
@@ -299,8 +299,8 @@ Aliases: `Scopable`, `Class`, `Expression`, `Pureish`
- `decorators`: `Array<Decorator>` (default: `null`)
- `implements`: `Array<TSExpressionWithTypeArguments | FlowClassImplements>` (default: `null`)
- `mixins` (default: `null`)
- `superTypeParameters`: `TypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `superTypeParameters`: `TypeParameterInstantiation | TSTypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | TSTypeParameterDeclaration | Noop` (default: `null`)
---
@@ -341,7 +341,7 @@ Aliases: `Function`, `Scopable`, `BlockParent`, `FunctionParent`, `Method`
- `generator`: `boolean` (default: `false`)
- `optional`: `boolean` (default: `null`)
- `returnType`: `TypeAnnotation | TSTypeAnnotation | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | TSTypeParameterDeclaration | Noop` (default: `null`)
---
@@ -829,7 +829,7 @@ Aliases: `Scopable`, `Function`, `BlockParent`, `FunctionParent`, `Statement`, `
- `async`: `boolean` (default: `false`)
- `declare`: `boolean` (default: `null`)
- `returnType`: `TypeAnnotation | TSTypeAnnotation | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | TSTypeParameterDeclaration | Noop` (default: `null`)
---
@@ -848,7 +848,7 @@ Aliases: `Scopable`, `Function`, `BlockParent`, `FunctionParent`, `Expression`,
- `generator`: `boolean` (default: `false`)
- `async`: `boolean` (default: `false`)
- `returnType`: `TypeAnnotation | TSTypeAnnotation | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | TSTypeParameterDeclaration | Noop` (default: `null`)
---
@@ -1334,7 +1334,7 @@ Aliases: `Expression`
- `callee`: `Expression` (required)
- `arguments`: `Array<Expression | SpreadElement | JSXNamespacedName>` (required)
- `optional`: `true | false` (default: `null`)
- `typeParameters`: `TypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TypeParameterInstantiation | TSTypeParameterInstantiation` (default: `null`)
---
@@ -1453,7 +1453,7 @@ Aliases: `UserWhitespacable`, `Function`, `Scopable`, `BlockParent`, `FunctionPa
- `decorators`: `Array<Decorator>` (default: `null`)
- `generator`: `boolean` (default: `false`)
- `returnType`: `TypeAnnotation | TSTypeAnnotation | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | TSTypeParameterDeclaration | Noop` (default: `null`)
---
@@ -1821,7 +1821,7 @@ See also `t.isTSCallSignatureDeclaration(node, opts)` and `t.assertTSCallSignatu
Aliases: `TSTypeElement`
- `typeParameters`: `TypeParameterDeclaration` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration` (default: `null`)
- `parameters`: `Array<Identifier | RestElement>` (default: `null`)
- `typeAnnotation`: `TSTypeAnnotation` (default: `null`)
@@ -1836,7 +1836,7 @@ See also `t.isTSConstructSignatureDeclaration(node, opts)` and `t.assertTSConstr
Aliases: `TSTypeElement`
- `typeParameters`: `TypeParameterDeclaration` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration` (default: `null`)
- `parameters`: `Array<Identifier | RestElement>` (default: `null`)
- `typeAnnotation`: `TSTypeAnnotation` (default: `null`)
@@ -1851,7 +1851,7 @@ See also `t.isTSConstructorType(node, opts)` and `t.assertTSConstructorType(node
Aliases: `TSType`
- `typeParameters`: `TypeParameterDeclaration` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration` (default: `null`)
- `typeAnnotation`: `TSTypeAnnotation` (default: `null`)
- `parameters`: `Array<Identifier | RestElement>` (default: `null`)
@@ -1867,9 +1867,9 @@ See also `t.isTSDeclareFunction(node, opts)` and `t.assertTSDeclareFunction(node
Aliases: `Statement`, `Declaration`
- `id`: `Identifier` (default: `null`)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration | Noop` (default: `null`)
- `params`: `Array<LVal>` (required)
- `returnType`: `TypeAnnotation | TSTypeAnnotation | Noop` (default: `null`)
- `returnType`: `TSTypeAnnotation | Noop` (default: `null`)
- `async`: `boolean` (default: `false`)
- `declare`: `boolean` (default: `null`)
- `generator`: `boolean` (default: `false`)
@@ -1885,9 +1885,9 @@ See also `t.isTSDeclareMethod(node, opts)` and `t.assertTSDeclareMethod(node, op
- `decorators`: `Array<Decorator>` (default: `null`)
- `key` (required)
- `typeParameters`: `TypeParameterDeclaration | Noop` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration | Noop` (default: `null`)
- `params`: `Array<LVal>` (required)
- `returnType`: `TypeAnnotation | TSTypeAnnotation | Noop` (default: `null`)
- `returnType`: `TSTypeAnnotation | Noop` (default: `null`)
- `abstract`: `boolean` (default: `null`)
- `access`: `"public" | "private" | "protected"` (default: `null`)
- `accessibility`: `"public" | "private" | "protected"` (default: `null`)
@@ -1952,7 +1952,7 @@ See also `t.isTSExpressionWithTypeArguments(node, opts)` and `t.assertTSExpressi
Aliases: `TSType`
- `expression`: `TSEntityName` (required)
- `typeParameters`: `TypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TSTypeParameterInstantiation` (default: `null`)
---
@@ -1976,7 +1976,7 @@ See also `t.isTSFunctionType(node, opts)` and `t.assertTSFunctionType(node, opts
Aliases: `TSType`
- `typeParameters`: `TypeParameterDeclaration` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration` (default: `null`)
- `typeAnnotation`: `TSTypeAnnotation` (default: `null`)
- `parameters`: `Array<Identifier | RestElement>` (default: `null`)
@@ -2047,7 +2047,7 @@ See also `t.isTSInterfaceDeclaration(node, opts)` and `t.assertTSInterfaceDeclar
Aliases: `Statement`, `Declaration`
- `id`: `Identifier` (required)
- `typeParameters`: `TypeParameterDeclaration` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration` (default: `null`)
- `extends`: `Array<TSExpressionWithTypeArguments>` (default: `null`)
- `body`: `TSInterfaceBody` (required)
- `declare`: `boolean` (default: `null`)
@@ -2089,7 +2089,7 @@ See also `t.isTSMappedType(node, opts)` and `t.assertTSMappedType(node, opts)`.
Aliases: `TSType`
- `typeParameter`: `TypeParameter` (required)
- `typeParameter`: `TSTypeParameter` (required)
- `typeAnnotation`: `TSType` (default: `null`)
- `optional`: `boolean` (default: `null`)
- `readonly`: `boolean` (default: `null`)
@@ -2106,7 +2106,7 @@ See also `t.isTSMethodSignature(node, opts)` and `t.assertTSMethodSignature(node
Aliases: `TSTypeElement`
- `key`: `Expression` (required)
- `typeParameters`: `TypeParameterDeclaration` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration` (default: `null`)
- `parameters`: `Array<Identifier | RestElement>` (default: `null`)
- `typeAnnotation`: `TSTypeAnnotation` (default: `null`)
- `computed`: `boolean` (default: `null`)
@@ -2334,7 +2334,7 @@ See also `t.isTSTypeAliasDeclaration(node, opts)` and `t.assertTSTypeAliasDeclar
Aliases: `Statement`, `Declaration`
- `id`: `Identifier` (required)
- `typeParameters`: `TypeParameterDeclaration` (default: `null`)
- `typeParameters`: `TSTypeParameterDeclaration` (default: `null`)
- `typeAnnotation`: `TSType` (required)
- `declare`: `boolean` (default: `null`)
@@ -2464,7 +2464,7 @@ See also `t.isTSTypeReference(node, opts)` and `t.assertTSTypeReference(node, op
Aliases: `TSType`
- `typeName`: `TSEntityName` (required)
- `typeParameters`: `TypeParameterInstantiation` (default: `null`)
- `typeParameters`: `TSTypeParameterInstantiation` (default: `null`)
---

View File

@@ -138,7 +138,10 @@ defineType("CallExpression", {
optional: true,
},
typeParameters: {
validate: assertNodeType("TypeParameterInstantiation"),
validate: assertNodeType(
"TypeParameterInstantiation",
"TSTypeParameterInstantiation",
),
optional: true,
},
},
@@ -286,12 +289,19 @@ export const functionCommon = {
validate: assertValueType("boolean"),
default: false,
},
};
export const functionTypeAnnotationCommon = {
returnType: {
validate: assertNodeType("TypeAnnotation", "TSTypeAnnotation", "Noop"),
optional: true,
},
typeParameters: {
validate: assertNodeType("TypeParameterDeclaration", "Noop"),
validate: assertNodeType(
"TypeParameterDeclaration",
"TSTypeParameterDeclaration",
"Noop",
),
optional: true,
},
};
@@ -313,6 +323,7 @@ defineType("FunctionDeclaration", {
visitor: ["id", "params", "body", "returnType", "typeParameters"],
fields: {
...functionDeclarationCommon,
...functionTypeAnnotationCommon,
body: {
validate: assertNodeType("BlockStatement"),
},
@@ -340,6 +351,7 @@ defineType("FunctionExpression", {
],
fields: {
...functionCommon,
...functionTypeAnnotationCommon,
id: {
validate: assertNodeType("Identifier"),
optional: true,
@@ -559,6 +571,7 @@ defineType("ObjectMethod", {
builder: ["kind", "key", "params", "body", "computed"],
fields: {
...functionCommon,
...functionTypeAnnotationCommon,
kind: {
validate: chain(
assertValueType("string"),

View File

@@ -6,7 +6,11 @@ import defineType, {
assertEach,
assertOneOf,
} from "./utils";
import { functionCommon, patternLikeCommon } from "./core";
import {
functionCommon,
functionTypeAnnotationCommon,
patternLikeCommon,
} from "./core";
defineType("AssignmentPattern", {
visitor: ["left", "right"],
@@ -63,6 +67,7 @@ defineType("ArrowFunctionExpression", {
],
fields: {
...functionCommon,
...functionTypeAnnotationCommon,
expression: {
// https://github.com/babel/babylon/issues/505
validate: assertValueType("boolean"),
@@ -94,7 +99,11 @@ defineType("ClassBody", {
const classCommon = {
typeParameters: {
validate: assertNodeType("TypeParameterDeclaration", "Noop"),
validate: assertNodeType(
"TypeParameterDeclaration",
"TSTypeParameterDeclaration",
"Noop",
),
optional: true,
},
body: {
@@ -105,7 +114,10 @@ const classCommon = {
validate: assertNodeType("Expression"),
},
superTypeParameters: {
validate: assertNodeType("TypeParameterInstantiation"),
validate: assertNodeType(
"TypeParameterInstantiation",
"TSTypeParameterInstantiation",
),
optional: true,
},
implements: {
@@ -442,6 +454,7 @@ defineType("ClassMethod", {
],
fields: {
...classMethodOrDeclareMethodCommon,
...functionTypeAnnotationCommon,
body: {
validate: assertNodeType("BlockStatement"),
},

View File

@@ -45,6 +45,17 @@ function validateArrayOfType(nodeTypeName) {
return validate(arrayOfType(nodeTypeName));
}
const tSFunctionTypeAnnotationCommon = {
returnType: {
validate: assertNodeType("TSTypeAnnotation", "Noop"),
optional: true,
},
typeParameters: {
validate: assertNodeType("TSTypeParameterDeclaration", "Noop"),
optional: true,
},
};
defineType("TSParameterProperty", {
aliases: ["LVal"], // TODO: This isn't usable in general as an LVal. Should have a "Parameter" alias.
visitor: ["parameter"],
@@ -66,12 +77,18 @@ defineType("TSParameterProperty", {
defineType("TSDeclareFunction", {
aliases: ["Statement", "Declaration"],
visitor: ["id", "typeParameters", "params", "returnType"],
fields: functionDeclarationCommon,
fields: {
...functionDeclarationCommon,
...tSFunctionTypeAnnotationCommon,
},
});
defineType("TSDeclareMethod", {
visitor: ["decorators", "key", "typeParameters", "params", "returnType"],
fields: classMethodOrDeclareMethodCommon,
fields: {
...classMethodOrDeclareMethodCommon,
...tSFunctionTypeAnnotationCommon,
},
});
defineType("TSQualifiedName", {
@@ -84,7 +101,7 @@ defineType("TSQualifiedName", {
});
const signatureDeclarationCommon = {
typeParameters: validateOptionalType("TypeParameterDeclaration"),
typeParameters: validateOptionalType("TSTypeParameterDeclaration"),
parameters: validateArrayOfType(["Identifier", "RestElement"]),
typeAnnotation: validateOptionalType("TSTypeAnnotation"),
};
@@ -178,7 +195,7 @@ defineType("TSTypeReference", {
visitor: ["typeName", "typeParameters"],
fields: {
typeName: validateType("TSEntityName"),
typeParameters: validateOptionalType("TypeParameterInstantiation"),
typeParameters: validateOptionalType("TSTypeParameterInstantiation"),
},
});
@@ -265,7 +282,7 @@ defineType("TSMappedType", {
visitor: ["typeParameter", "typeAnnotation"],
fields: {
readonly: validateOptional(bool),
typeParameter: validateType("TypeParameter"),
typeParameter: validateType("TSTypeParameter"),
optional: validateOptional(bool),
typeAnnotation: validateOptionalType("TSType"),
},
@@ -288,7 +305,7 @@ defineType("TSExpressionWithTypeArguments", {
visitor: ["expression", "typeParameters"],
fields: {
expression: validateType("TSEntityName"),
typeParameters: validateOptionalType("TypeParameterInstantiation"),
typeParameters: validateOptionalType("TSTypeParameterInstantiation"),
},
});
@@ -299,7 +316,7 @@ defineType("TSInterfaceDeclaration", {
fields: {
declare: validateOptional(bool),
id: validateType("Identifier"),
typeParameters: validateOptionalType("TypeParameterDeclaration"),
typeParameters: validateOptionalType("TSTypeParameterDeclaration"),
extends: validateOptional(arrayOfType("TSExpressionWithTypeArguments")),
body: validateType("TSInterfaceBody"),
},
@@ -318,7 +335,7 @@ defineType("TSTypeAliasDeclaration", {
fields: {
declare: validateOptional(bool),
id: validateType("Identifier"),
typeParameters: validateOptionalType("TypeParameterDeclaration"),
typeParameters: validateOptionalType("TSTypeParameterDeclaration"),
typeAnnotation: validateType("TSType"),
},
});