From c59db5295497363531837ebb6d7ce4f282bbb99a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Tue, 20 Nov 2018 20:30:02 +0100 Subject: [PATCH] Extract isBabelPluginFactory helper --- .../src/utils/is-babel-plugin-factory.js | 26 +++++++++++++++ .../src/utils/is-from-babel-types.js | 33 ++++--------------- 2 files changed, 32 insertions(+), 27 deletions(-) create mode 100644 eslint/babel-eslint-plugin-development/src/utils/is-babel-plugin-factory.js diff --git a/eslint/babel-eslint-plugin-development/src/utils/is-babel-plugin-factory.js b/eslint/babel-eslint-plugin-development/src/utils/is-babel-plugin-factory.js new file mode 100644 index 0000000000..287124e228 --- /dev/null +++ b/eslint/babel-eslint-plugin-development/src/utils/is-babel-plugin-factory.js @@ -0,0 +1,26 @@ +"use strict"; + +const getReferenceOrigin = require("./get-reference-origin"); +const getExportName = require("./get-export-name"); + +module.exports = function isBabelPluginFactory(node, scope) { + const { parent } = node; + + if (parent.type === "CallExpression") { + const calleeOrigin = getReferenceOrigin(parent.callee, scope); + + // Using "declare" from "@babel/helper-plugin-utils" + return !!( + calleeOrigin && + calleeOrigin.kind === "import" && + calleeOrigin.name === "declare" && + calleeOrigin.source === "@babel/helper-plugin-utils" + ); + } + + const exportName = getExportName(node); + + // export default function ({ types: t }) {} + // module.exports = function ({ types: t }) {} + return exportName === "default" || exportName === "module.exports"; +}; diff --git a/eslint/babel-eslint-plugin-development/src/utils/is-from-babel-types.js b/eslint/babel-eslint-plugin-development/src/utils/is-from-babel-types.js index 097fb4582c..36ab618817 100644 --- a/eslint/babel-eslint-plugin-development/src/utils/is-from-babel-types.js +++ b/eslint/babel-eslint-plugin-development/src/utils/is-from-babel-types.js @@ -1,7 +1,6 @@ "use strict"; -const getReferenceOrigin = require("./get-reference-origin"); -const getExportName = require("./get-export-name"); +const isBabelPluginFactory = require("./is-babel-plugin-factory"); // Check if a ReferenceOrigin (returned by ./get-reference-origin.js) // is a reference to a @babel/types export. @@ -25,32 +24,12 @@ module.exports = function isFromBabelTypes( } if ( - origin.kind !== "property" || - origin.base.kind !== "param" || - origin.base.index !== 0 + origin.kind === "property" && + origin.base.kind === "param" && + origin.base.index === 0 ) { - // Not a parameter of the plugin factory function - return false; + return isBabelPluginFactory(origin.base.functionNode, scope); } - const { functionNode } = origin.base; - const { parent } = functionNode; - - if (parent.type === "CallExpression") { - const calleeOrigin = getReferenceOrigin(parent.callee, scope); - - // Using "declare" from "@babel/helper-plugin-utils" - return !!( - calleeOrigin && - calleeOrigin.kind === "import" && - calleeOrigin.name === "declare" && - calleeOrigin.source === "@babel/helper-plugin-utils" - ); - } - - const exportName = getExportName(functionNode); - - // export default function ({ types: t }) {} - // module.exports = function ({ types: t }) {} - return exportName === "default" || exportName === "module.exports"; + return false; };