diff --git a/packages/eslint-plugin-pf-codemods/index.js b/packages/eslint-plugin-pf-codemods/index.js index d48cba082..fed246f96 100644 --- a/packages/eslint-plugin-pf-codemods/index.js +++ b/packages/eslint-plugin-pf-codemods/index.js @@ -1,27 +1,36 @@ const createListOfRules = (version) => { const rules = {}; - require('glob').sync(`./packages/eslint-plugin-pf-codemods/lib/rules/v${version}/*.js`).forEach( function( file ) { - const ruleName = /.*\/([^.]+)/.exec(file)[1]; - rules[ruleName] = require(`./lib/rules/v${version}/${ruleName}`); - }); + require("glob") + .sync(`./packages/eslint-plugin-pf-codemods/lib/rules/v${version}/*.js`) + .forEach(function (file) { + const ruleName = /.*\/([^.]+)/.exec(file)[1]; + rules[ruleName] = require(`./lib/rules/v${version}/${ruleName}`); + }); return rules; -} +}; const v5rules = createListOfRules("5"); const v4rules = createListOfRules("4"); // if you want a rule to have a severity that defaults to warning rather than error, add the rule name to the below array -const warningRules = ["applicationLauncher-warn-input", "card-warn-component", "horizontalSubnav-ariaLabel", "tabs-warn-children-type-changed", "wizard-warn-button-order"] +const warningRules = [ + "applicationLauncher-warn-input", + "card-warn-component", + "horizontalSubnav-ariaLabel", + "react-dropzone-warn-upgrade", + "tabs-warn-children-type-changed", + "wizard-warn-button-order", +]; const createRules = (rules) => { return Object.keys(rules).reduce((acc, rule) => { - const severity = warningRules.includes(rule) ? "warn" : "error" + const severity = warningRules.includes(rule) ? "warn" : "error"; acc[`@patternfly/pf-codemods/${rule}`] = severity; return acc; - }, {}) -} + }, {}); +}; -const mappedRules = {...createRules(v5rules), ...createRules(v4rules)}; +const mappedRules = { ...createRules(v5rules), ...createRules(v4rules) }; module.exports = { configs: { @@ -44,6 +53,6 @@ module.exports = { rules: mappedRules, }, }, - rules: {...v5rules, ...v4rules}, - ruleVersionMapping: {"v4": Object.keys(v4rules), "v5": Object.keys(v5rules)} + rules: { ...v5rules, ...v4rules }, + ruleVersionMapping: { v4: Object.keys(v4rules), v5: Object.keys(v5rules) }, }; diff --git a/packages/eslint-plugin-pf-codemods/lib/rules/v5/react-dropzone-warn-upgrade.js b/packages/eslint-plugin-pf-codemods/lib/rules/v5/react-dropzone-warn-upgrade.js new file mode 100644 index 000000000..228162b1c --- /dev/null +++ b/packages/eslint-plugin-pf-codemods/lib/rules/v5/react-dropzone-warn-upgrade.js @@ -0,0 +1,26 @@ +// https://github.com/patternfly/patternfly-react/pull/7926 +module.exports = { + meta: {}, + create: function (context) { + return { + ImportDeclaration(node) { + const importsWithDropzone = node.specifiers.find( + (specifier) => + (["FileUpload", "MultipleFileUpload"].includes( + specifier.imported.name + ) && + node.source.value === "@patternfly/react-core") || + (specifier.imported.name === "CodeEditor" && + node.source.value === "@patternfly/react-code-editor") + ); + + if (importsWithDropzone) { + context.report({ + node, + message: `The react-dropzone dependency used within ${importsWithDropzone.imported.name} has been updated from version 9 to version 14.`, + }); + } + }, + }; + }, +}; diff --git a/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js b/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js index a504d40cf..8c3ffc95a 100644 --- a/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js +++ b/packages/eslint-plugin-pf-codemods/lib/rules/v5/wizard-warn-button-order.js @@ -1,5 +1,3 @@ -const { getPackageImports } = require("../../helpers"); - // https://github.com/patternfly/patternfly-react/pull/8409 module.exports = { create: function (context) { diff --git a/packages/eslint-plugin-pf-codemods/test/rules/v5/react-dropzone-warn-upgrade.js b/packages/eslint-plugin-pf-codemods/test/rules/v5/react-dropzone-warn-upgrade.js new file mode 100644 index 000000000..3bc67ff6b --- /dev/null +++ b/packages/eslint-plugin-pf-codemods/test/rules/v5/react-dropzone-warn-upgrade.js @@ -0,0 +1,38 @@ +const ruleTester = require("../../ruletester"); +const rule = require("../../../lib/rules/v5/react-dropzone-warn-upgrade"); + +ruleTester.run("react-dropzone-warn-upgrade", rule, { + valid: [], + invalid: [ + { + code: `import { FileUpload } from '@patternfly/react-core';`, + output: `import { FileUpload } from '@patternfly/react-core';`, + errors: [ + { + message: `The react-dropzone dependency used within FileUpload has been updated from version 9 to version 14.`, + type: "ImportDeclaration", + }, + ], + }, + { + code: `import { MultipleFileUpload } from '@patternfly/react-core';`, + output: `import { MultipleFileUpload } from '@patternfly/react-core';`, + errors: [ + { + message: `The react-dropzone dependency used within MultipleFileUpload has been updated from version 9 to version 14.`, + type: "ImportDeclaration", + }, + ], + }, + { + code: `import { CodeEditor } from '@patternfly/react-code-editor';`, + output: `import { CodeEditor } from '@patternfly/react-code-editor';`, + errors: [ + { + message: `The react-dropzone dependency used within CodeEditor has been updated from version 9 to version 14.`, + type: "ImportDeclaration", + }, + ], + }, + ], +}); diff --git a/packages/pf-codemods/README.md b/packages/pf-codemods/README.md index 7a76ecf28..acc8298f3 100644 --- a/packages/pf-codemods/README.md +++ b/packages/pf-codemods/README.md @@ -386,6 +386,10 @@ Out: /> ``` +### react-dropzone-warn-upgrade [(#7926)](// https://github.com/patternfly/patternfly-react/pull/7926) + +The `react-dropzone` dependency used with FileUpload, MultipleFileUpload, and CodeEditor has been updated from version 9 to version 14. + ### remove-removeFindDomNode [(#8371)](https://github.com/patternfly/patternfly-react/pull/8371) [(#8316)](https://github.com/patternfly/patternfly-react/pull/8316) We've removed the `removeFindDomNode` property as it is now the default behavior. The affected components are as follows: ApplicationLauncher, ClipboardCopy, ContextSelector, Dropdown, NavItem, OptionsMenu, Popover, SearchInput, Select, OverflowTab, Timepicker, Tooltip, Truncate. @@ -458,58 +462,58 @@ We've removed the deprecated `ToggleMenuBaseProps` interface. We've updated the default value of the `getResizeObserver` helper function's third parameter, `useRequestAnimationFrame`. This rule will only provide two suggestions detailing when to pass which boolean into this parameter. -### tableComposable-remove-hasSelectableRowCaption [(#8352)](https://github.com/patternfly/patternfly-react/pull/8352) +### simpleList-remove-isCurrent [(#8132)](https://github.com/patternfly/patternfly-react/pull/8132) -We've removed the deprecated `hasSelectableRowCaption` prop. +We've removed the deprecated the `isCurrent` prop. This rule wil replace it with `isActive`. #### Examples In: ```jsx - + ``` Out: ```jsx - + ``` -### simpleList-remove-isCurrent [(#8132)](https://github.com/patternfly/patternfly-react/pull/8132) +### spinner-svg-default [(#8183)](https://github.com/patternfly/patternfly-react/pull/8183) -We've removed the deprecated the `isCurrent` prop. This rule wil replace it with `isActive`. +We've updated the Spinner to default to an svg, so the `isSVG` property is no longer required. #### Examples In: ```jsx - + ``` Out: ```jsx - + ``` -### spinner-svg-default [(#8183)](https://github.com/patternfly/patternfly-react/pull/8183) +### tableComposable-remove-hasSelectableRowCaption [(#8352)](https://github.com/patternfly/patternfly-react/pull/8352) -We've updated the Spinner to default to an svg, so the `isSVG` property is no longer required. +We've removed the deprecated `hasSelectableRowCaption` prop. #### Examples In: ```jsx - + ``` Out: ```jsx - + ``` ### tabs-rename-hasBorderBottom [(#8517)](https://github.com/patternfly/patternfly-react/pull/8517) diff --git a/test/test.tsx b/test/test.tsx index e08d36e1c..0781aaee8 100644 --- a/test/test.tsx +++ b/test/test.tsx @@ -1,15 +1,18 @@ import { AccordionExpandableContent } from "@patternfly/react-core"; import { ApplicationLauncher } from "@patternfly/react-core"; import { Card } from "@patternfly/react-core"; +import { CodeEditor } from "@patternfly/react-code-editor"; import { DropdownToggle, Toggle } from "@patternfly/react-core"; +import { FileUpload } from "@patternfly/react-core"; import { KEY_CODES } from "@patternfly/react-core"; +import { MultipleFileUpload } from "@patternfly/react-core"; import { Nav } from "@patternfly/react-core"; import { Tabs } from "@patternfly/react-core"; import { Wizard } from "@patternfly/react-core"; import { WizardFooter } from "@patternfly/react-core/next"; <> - -