diff --git a/packages/babel-plugin-flow-runtime/src/__tests__/__fixtures__/bugs/180-type-parameter-assert-false.js b/packages/babel-plugin-flow-runtime/src/__tests__/__fixtures__/bugs/180-type-parameter-assert-false.js new file mode 100644 index 0000000..ef08d39 --- /dev/null +++ b/packages/babel-plugin-flow-runtime/src/__tests__/__fixtures__/bugs/180-type-parameter-assert-false.js @@ -0,0 +1,40 @@ +/* @flow */ + +export const input = ` + function foo() { + let bar: X; + } +`; + +export const expected = ` + import t from "flow-runtime"; + function foo() { + const X = t.typeParameter("X"); + let _barType = X, + bar; + } +`; + +export const annotated = ` + import t from "flow-runtime"; + function foo() { + let bar; + } + t.annotate(foo, t.function(_fn => { + const X = _fn.typeParameter("X"); + return []; + })); +`; + +export const combined = ` + import t from "flow-runtime"; + function foo() { + const X = t.typeParameter("X"); + let _barType = X, + bar; + } + t.annotate(foo, t.function(_fn => { + const X = _fn.typeParameter("X"); + return []; + })); +`; diff --git a/packages/babel-plugin-flow-runtime/src/transformVisitors.js b/packages/babel-plugin-flow-runtime/src/transformVisitors.js index e88d0f7..90d1ca3 100644 --- a/packages/babel-plugin-flow-runtime/src/transformVisitors.js +++ b/packages/babel-plugin-flow-runtime/src/transformVisitors.js @@ -233,6 +233,10 @@ export default function transformVisitors (context: ConversionContext): Object { } const {name} = id.node; + if (!shouldCheck) { + return; + } + if (!path.has('init') || path.parentPath.node.kind !== 'const') { const valueUid = path.scope.generateUidIdentifier(`${name}Type`); path.scope.setData(`valueUid:${name}`, valueUid); @@ -263,7 +267,7 @@ export default function transformVisitors (context: ConversionContext): Object { )); } - if (shouldCheck && path.has('init')) { + if (path.has('init')) { const wrapped = context.assert( valueUid, path.get('init').node @@ -276,7 +280,7 @@ export default function transformVisitors (context: ConversionContext): Object { )); } } - else if (shouldCheck) { + else { const wrapped = context.assert( convert(context, id.get('typeAnnotation')), path.get('init').node