Skip to content

[Bug]: referencesImport is always false for JSXMemberExpression #14375

@swandir

Description

@swandir

💻

  • Would you like to work on a fix?

How are you using Babel?

Programmatic API (babel.transform, babel.parse)

Input code

import { parse } from "@babel/parser";
import traverse from "@babel/traverse";

const ast = parse(
  `\
import * as mod from "mod";
mod.name();
<mod.name />;
`,
  {
    sourceType: "module",
    plugins: ["jsx"],
  }
);

traverse.default(ast, {
  MemberExpression(path) {
    if (path.referencesImport("mod", "name")) {
      // referencesImport works with MemberExpression
      console.log("MemberExpression references `name` in `mod`");
    }
  },
  JSXMemberExpression(path) {
    if (path.referencesImport("mod", "name")) {
      // but not with JSXMemberExpression
      // not executed
      console.log("JSXMemberExpression references `name` in `mod`");
    }
  },
});

https://codesandbox.io/s/trusting-platform-g4znd2

Configuration file name

No response

Configuration

No response

Current and expected behavior

For MemberExpression, referencesImport infers if a function is imported from given source.
For JSXMemberExpression it always returns false.

As the structure is similar, I'd expect referencesImport to be useful with both of these types.

Environment

  System:
    OS: Linux 5.4 Debian GNU/Linux 10 (buster) 10 (buster)
  Binaries:
    Node: 14.18.1 - ~/.nvm/versions/node/v14.18.1/bin/node
    Yarn: 1.22.17 - ~/.nvm/versions/node/v14.18.1/bin/yarn
    npm: 6.14.15 - ~/.nvm/versions/node/v14.18.1/bin/npm
  npmPackages:
    @babel/parser: 7.17.8 => 7.17.8
    @babel/traverse: 7.17.3 => 7.17.3

Possible solution

No response

Additional context

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions