From 84961ebb05d72704501142ede7a6ae7b783f0013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Fri, 31 May 2019 23:54:44 +0200 Subject: [PATCH] Refactor isImportTypeOnly helper function (#10047) --- .../src/index.js | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/packages/babel-plugin-transform-typescript/src/index.js b/packages/babel-plugin-transform-typescript/src/index.js index 29afc79cf1..785eedc089 100644 --- a/packages/babel-plugin-transform-typescript/src/index.js +++ b/packages/babel-plugin-transform-typescript/src/index.js @@ -17,12 +17,7 @@ function isInType(path) { } } -interface State { - programPath: any; -} - const PARSED_PARAMS = new WeakSet(); -const PRAGMA_KEY = "@babel/plugin-transform-typescript/jsxPragma"; export default declare((api, { jsxPragma = "React" }) => { api.assertVersion(7); @@ -39,16 +34,15 @@ export default declare((api, { jsxPragma = "React" }) => { Identifier: visitPattern, RestElement: visitPattern, - Program(path, state: State) { - state.programPath = path; - + Program(path, state) { const { file } = state; + let fileJsxPragma = null; if (file.ast.comments) { for (const comment of (file.ast.comments: Array)) { const jsxMatches = JSX_ANNOTATION_REGEX.exec(comment.value); if (jsxMatches) { - file.set(PRAGMA_KEY, jsxMatches[1]); + fileJsxPragma = jsxMatches[1]; } } } @@ -76,7 +70,11 @@ export default declare((api, { jsxPragma = "React" }) => { // import anyway. if ( binding && - isImportTypeOnly(file, binding, state.programPath) + isImportTypeOnly({ + binding, + programPath: path, + jsxPragma: fileJsxPragma || jsxPragma, + }) ) { importsToRemove.push(binding.path); } else { @@ -327,15 +325,14 @@ export default declare((api, { jsxPragma = "React" }) => { // 'access' and 'readonly' are only for parameter properties, so constructor visitor will handle them. } - function isImportTypeOnly(file, binding, programPath) { + function isImportTypeOnly({ binding, programPath, jsxPragma }) { for (const path of binding.referencePaths) { if (!isInType(path)) { return false; } } - const fileJsxPragma = file.get(PRAGMA_KEY) || jsxPragma; - if (binding.identifier.name !== fileJsxPragma) { + if (binding.identifier.name !== jsxPragma) { return true; }