speedskater / babel-plugin-rewire

A babel plugin adding the ability to rewire module dependencies. This enables to mock modules for testing purposes.
843 stars 90 forks source link

Babel warning with Flow bindings. #208

Open AndrewSouthpaw opened 6 years ago

AndrewSouthpaw commented 6 years ago

I'm reopening the closed issue #108 because it's not actually resolved and the old one isn't getting any attention.

The warning, as from before:

You or one of the Babel plugins you are using are using Flow declarations as bindings.
Support for this will be removed in version 6.8. To find out the caller, grep for this
message and change it to a `console.trace()`.

Here's a typical stack trace:

at Scope.warnOnFlowBinding (node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js:1020:15)
at Scope.getBinding (node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js:1030:32)
at getVariableNameAndBinding (node_modules/babel-plugin-rewire/lib/babel-plugin-rewire.js:47:83)
at RewireState.Identifier (node_modules/babel-plugin-rewire/lib/babel-plugin-rewire.js:176:33)
at NodePath._call (node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js:76:18)
at NodePath.call (node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js:48:17)
at NodePath.visit (node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js:105:12)
at TraversalContext.visitQueue (node_modules/babel-core/node_modules/babel-traverse/lib/context.js:150:16)
at TraversalContext.visitSingle (node_modules/babel-core/node_modules/babel-traverse/lib/context.js:108:19)
at TraversalContext.visit (node_modules/babel-core/node_modules/babel-traverse/lib/context.js:192:19)
at Function.traverse.node (node_modules/babel-core/node_modules/babel-traverse/lib/index.js:114:17)
at NodePath.visit (node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js:115:19)
at TraversalContext.visitQueue (node_modules/babel-core/node_modules/babel-traverse/lib/context.js:150:16)
at TraversalContext.visitMultiple (node_modules/babel-core/node_modules/babel-traverse/lib/context.js:103:17)
at TraversalContext.visit (node_modules/babel-core/node_modules/babel-traverse/lib/context.js:190:19)
at Function.traverse.node (node_modules/babel-core/node_modules/babel-traverse/lib/index.js:114:17)

It would be great to get some input from @speedskater on the issue, since it appears to be have been fixed previously. Support for flow bindings is dropped for v7, so I want to make sure rewire isn't accidentally doing flow bindings. From what I can tell of the original fix in rewire that is the case, but I'm having trouble making much sense of the repo, as I'm unfamiliar with Babel plugins. 😞

tjmehta commented 6 years ago

You or one of the Babel plugins you are using are using Flow declarations as bindings.
        Support for this will be removed in version 6.8. To find out the caller, grep for this
        message and change it to a `console.trace()`.

    at Scope.warnOnFlowBinding (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js:1019:15)
    at Scope.getOwnBinding (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js:1034:17)
    at Scope.getBinding (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/scope/index.js:1028:27)
    at getVariableNameAndBinding (<project>/node_modules/babel-plugin-rewire/lib/babel-plugin-rewire.js:47:83)
    at RewireState.Identifier (<project>/node_modules/babel-plugin-rewire/lib/babel-plugin-rewire.js:61:32)
    at NodePath._call (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js:76:18)
    at NodePath.call (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js:48:17)
    at NodePath.visit (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/path/context.js:105:12)
    at TraversalContext.visitQueue (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/context.js:150:16)
    at TraversalContext.visitSingle (<project>/node_modules/babel-core/node_modules/babel-traverse/lib/context.js:108:19)```
AndrewSouthpaw commented 6 years ago

Well, I finally figured out what's causing it... any code that uses a type importing shorthand, e.g. import React, { type Node } from 'react' will trigger the warning. The problem goes away when you split the type imports from the regular imports, e.g.

import React from 'react'
import type { Node } from 'react'

I'm not sure if that lies in the court of rewire or babel... thoughts?

SanCoder-Q commented 5 years ago

@AndrewSouthpaw That is very helpful. Thank you.

SanCoder-Q commented 5 years ago

One more case is when there is a name of the entry in the root file same as the one being imported.

import type { Props as AnotherProps } from './another';
type Props = ...