chore: refactor repo & add jssg codemods#1
Conversation
Alex's update-react-imports fix is preserved on branch alex/update-react-imports-fix for later re-incorporation. # Conflicts: # update-react-imports/scripts/codemod.ts # update-react-imports/tests/fragment-only/metrics.json # update-react-imports/tests/jsx-only/metrics.json # update-react-imports/tests/member-expression/metrics.json # update-react-imports/tests/mixed-usage/metrics.json # update-react-imports/tests/original-react-basic-default-export/metrics.json # update-react-imports/tests/original-react-not-removed/metrics.json # update-react-imports/tests/react-as-value/metrics.json # update-react-imports/tests/react-fragment-member/metrics.json
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
Refactors the repository structure to include a legacy jscodeshift snapshot and adds multiple JSSG (ast-grep) codemods with accompanying fixtures, docs, and CI support.
Changes:
- Adds
codemods/legacy/package with preservedjscodeshifttransforms and fixtures. - Introduces several new JSSG codemods (e.g.,
use-context-hook,replace-act-import,replace-reactdom-render,react-proptypes-to-prop-types) with tests/metrics. - Updates repo documentation and CI workflow to run lint, active codemod tests, and legacy tests.
Reviewed changes
Copilot reviewed 238 out of 994 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| codemods/legacy/transforms/testfixtures/class/class-displayName.input.js | Adds legacy fixture for React.createClass displayName cases. |
| codemods/legacy/transforms/testfixtures/class/class-create-class-naming.output.js | Adds expected output fixture for createClass module/variable renaming. |
| codemods/legacy/transforms/testfixtures/class/class-create-class-naming.input.js | Adds input fixture for createClass module/variable renaming. |
| codemods/legacy/transforms/testfixtures/class/class-anonymous2.output.js | Adds expected output for anonymous createClass conversion. |
| codemods/legacy/transforms/testfixtures/class/class-anonymous2.input.js | Adds input fixture for anonymous createClass conversion. |
| codemods/legacy/transforms/testfixtures/class/class-anonymous.output.js | Adds expected output for wrapper(createClass) conversion. |
| codemods/legacy/transforms/testfixtures/class/class-anonymous.input.js | Adds input fixture for wrapper(createClass) conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/noop-require.input.js | Adds noop fixture for require-style React Native View usage. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/noop-import.input.js | Adds noop fixture for import-style React Native View usage. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/multiple-replacements.output.js | Adds expected output for multiple View.propTypes replacements. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/multiple-replacements.input.js | Adds input fixture for multiple View.propTypes replacements. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/import-flow-type-with-require.output.js | Adds expected output ensuring Flow type imports are preserved with requires. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/import-flow-type-with-require.input.js | Adds input fixture ensuring Flow type imports are preserved with requires. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-require-only-reference.output.js | Adds expected output for destructured require conversion to ViewPropTypes. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-require-only-reference.input.js | Adds input fixture for destructured require conversion to ViewPropTypes. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-require-multi-reference.output.js | Adds expected output for multi-reference destructured require conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-require-multi-reference.input.js | Adds input fixture for multi-reference destructured require conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-import-only-reference.output.js | Adds expected output for destructured import conversion to ViewPropTypes. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-import-only-reference.input.js | Adds input fixture for destructured import conversion to ViewPropTypes. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-import-multi-reference.output.js | Adds expected output for multi-reference destructured import conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/destructured-import-multi-reference.input.js | Adds input fixture for multi-reference destructured import conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-require-only-reference.output.js | Adds expected output for default require conversion to ViewPropTypes require. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-require-only-reference.input.js | Adds input fixture for default require conversion to ViewPropTypes require. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-require-multi-reference.output.js | Adds expected output for default require multi-reference conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-require-multi-reference.input.js | Adds input fixture for default require multi-reference conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-import-only-reference.output.js | Adds expected output for default import-only conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-import-only-reference.input.js | Adds input fixture for default import-only conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-import-multi-reference.output.js | Adds expected output for default import multi-reference conversion. |
| codemods/legacy/transforms/testfixtures/ReactNative-View-propTypes/default-import-multi-reference.input.js | Adds input fixture for default import multi-reference conversion. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-no-change-require.input.js | Adds noop fixture for non-DOM usage with require React. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-no-change-require-dom-from-other-libraries.input.js | Adds noop fixture to avoid rewriting non-React DOM factories. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-no-change-local-dom-from-other-libraries.input.js | Adds noop fixture for locally defined DOM object. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-no-change-import.input.js | Adds noop fixture for non-DOM usage with import React. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-no-change-import-dom-from-other-libraries.input.js | Adds noop fixture to avoid rewriting non-React imported DOM. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-deconstructed-require.output.js | Adds expected output for destructured DOM -> createElement (require React). |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-deconstructed-require.input.js | Adds input fixture for destructured DOM (require React). |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-deconstructed-require-part-two.output.js | Adds expected output for destructured require('react') DOM -> createElement. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-deconstructed-require-part-two.input.js | Adds input fixture for destructured require('react') DOM usage. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-deconstructed-import.output.js | Adds expected output for destructured import DOM -> createElement. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-deconstructed-import.input.js | Adds input fixture for destructured import DOM usage. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-basic-case.output.js | Adds expected output for React.DOM.foo -> React.createElement usage. |
| codemods/legacy/transforms/testfixtures/React-DOM-to-react-dom-factories/react-dom-basic-case.input.js | Adds input fixture for React.DOM.foo usage. |
| codemods/legacy/transforms/testfixtures/.eslintrc | Disables lint rules for legacy fixtures. |
| codemods/legacy/transforms/ReactNative-View-propTypes.js | Adds legacy transform for View.propTypes -> ViewPropTypes plus import/require handling. |
| codemods/legacy/transforms/React-DOM-to-react-dom-factories.js | Adds legacy transform converting React.DOM calls to createElement. |
| codemods/legacy/package.json | Adds isolated legacy package with Jest/Babel tooling and CI test script. |
| codemods/legacy/jest/setup-require-actual.js | Adds Jest setup to expose jest.requireActual via Function.prototype. |
| codemods/legacy/.babelrc | Adds Babel config for legacy tests. |
| codemods/jssg/use-context-hook/tsconfig.json | Adds TypeScript config for JSSG codemod package. |
| codemods/jssg/use-context-hook/tests/use-context/metrics.json | Adds metrics fixture for useContext -> use migration. |
| codemods/jssg/use-context-hook/tests/use-context/input.tsx | Adds input fixture for useContext -> use migration. |
| codemods/jssg/use-context-hook/tests/use-context/expected.tsx | Adds expected output fixture for useContext -> use migration. |
| codemods/jssg/use-context-hook/tests/use-context-2/metrics.json | Adds metrics fixture for React.useContext -> React.use migration. |
| codemods/jssg/use-context-hook/tests/use-context-2/input.tsx | Adds input fixture for React.useContext -> React.use migration. |
| codemods/jssg/use-context-hook/tests/use-context-2/expected.tsx | Adds expected output fixture for React.useContext -> React.use migration. |
| codemods/jssg/use-context-hook/tests/typescript-use-context/metrics.json | Adds TS fixture metrics for useContext -> use migration. |
| codemods/jssg/use-context-hook/tests/typescript-use-context/input.tsx | Adds TS input fixture for useContext -> use migration. |
| codemods/jssg/use-context-hook/tests/typescript-use-context/expected.tsx | Adds TS expected fixture for useContext -> use migration. |
| codemods/jssg/use-context-hook/tests/typescript-use-context-2/metrics.json | Adds TS fixture metrics for React.useContext -> React.use migration. |
| codemods/jssg/use-context-hook/tests/typescript-use-context-2/input.tsx | Adds TS input fixture for React.useContext -> React.use migration. |
| codemods/jssg/use-context-hook/tests/typescript-use-context-2/expected.tsx | Adds TS expected fixture for React.useContext -> React.use migration. |
| codemods/jssg/use-context-hook/tests/typescript-any-use-context/input.tsx | Adds no-op fixture ensuring non-React useContext calls are untouched. |
| codemods/jssg/use-context-hook/tests/typescript-any-use-context/expected.tsx | Adds expected output for non-React useContext no-op. |
| codemods/jssg/use-context-hook/tests/type-identifier-rename/metrics.json | Adds metrics for type identifier rename interplay with useContext -> use. |
| codemods/jssg/use-context-hook/tests/type-identifier-rename/input.tsx | Adds input fixture for type identifier rename interplay. |
| codemods/jssg/use-context-hook/tests/type-identifier-rename/expected.tsx | Adds expected output for type identifier rename interplay. |
| codemods/jssg/use-context-hook/tests/shadowed-local-binding/metrics.json | Adds metrics for shadowed binding handling. |
| codemods/jssg/use-context-hook/tests/shadowed-local-binding/input.tsx | Adds input for shadowed useContext binding. |
| codemods/jssg/use-context-hook/tests/shadowed-local-binding/expected.tsx | Adds expected output for shadowed useContext binding. |
| codemods/jssg/use-context-hook/tests/multiple-use-context-imports/metrics.json | Adds metrics for multiple/aliased imports. |
| codemods/jssg/use-context-hook/tests/multiple-use-context-imports/input.tsx | Adds input for multiple/aliased imports. |
| codemods/jssg/use-context-hook/tests/multiple-use-context-imports/expected.tsx | Adds expected output for multiple/aliased imports. |
| codemods/jssg/use-context-hook/tests/mixed-import/input.tsx | Adds input for default+named import mixed case. |
| codemods/jssg/use-context-hook/tests/mixed-import/expected.tsx | Adds expected output for default+named import mixed case. |
| codemods/jssg/use-context-hook/tests/any-use-context/input.tsx | Adds no-op fixture for unrelated .useContext() calls. |
| codemods/jssg/use-context-hook/tests/any-use-context/expected.tsx | Adds expected output for unrelated .useContext() no-op. |
| codemods/jssg/use-context-hook/tests/aliased-use-context/metrics.json | Adds metrics for aliased useContext. |
| codemods/jssg/use-context-hook/tests/aliased-use-context/input.tsx | Adds input for aliased useContext. |
| codemods/jssg/use-context-hook/tests/aliased-use-context/expected.tsx | Adds expected output for aliased useContext. |
| codemods/jssg/use-context-hook/scripts/codemod.ts | Implements JSSG transform for useContext -> use, plus metrics. |
| codemods/jssg/use-context-hook/package.json | Adds package manifest and test/typecheck scripts for the codemod. |
| codemods/jssg/use-context-hook/codemod.yaml | Adds codemod registry metadata. |
| codemods/jssg/use-context-hook/README.md | Documents how to run and develop the codemod. |
| codemods/jssg/replace-use-form-state/tsconfig.json | Adds TypeScript config for replace-use-form-state package. |
| codemods/jssg/replace-use-form-state/tests/type-identifier-rename/metrics.json | Adds metrics fixture for type rename edge cases. |
| codemods/jssg/replace-use-form-state/tests/type-identifier-rename/input.tsx | Adds input fixture for type rename edge cases. |
| codemods/jssg/replace-use-form-state/tests/type-identifier-rename/expected.tsx | Adds expected output fixture for type rename edge cases. |
| codemods/jssg/replace-use-form-state/tests/shadowed-local-binding/metrics.json | Adds metrics fixture for shadowed binding handling. |
| codemods/jssg/replace-use-form-state/tests/shadowed-local-binding/input.tsx | Adds input fixture for shadowed binding handling. |
| codemods/jssg/replace-use-form-state/tests/shadowed-local-binding/expected.tsx | Adds expected output fixture for shadowed binding handling. |
| codemods/jssg/replace-use-form-state/tests/namespace-and-named/metrics.json | Adds metrics fixture for namespace + named import cases. |
| codemods/jssg/replace-use-form-state/tests/namespace-and-named/input.tsx | Adds input fixture for namespace + named import cases. |
| codemods/jssg/replace-use-form-state/tests/namespace-and-named/expected.tsx | Adds expected output fixture for namespace + named import cases. |
| codemods/jssg/replace-use-form-state/tests/multiple-react-dom-imports-second-has-hook/metrics.json | Adds metrics fixture for multi-import ordering cases. |
| codemods/jssg/replace-use-form-state/tests/multiple-react-dom-imports-second-has-hook/input.tsx | Adds input fixture for multi-import ordering cases. |
| codemods/jssg/replace-use-form-state/tests/multiple-react-dom-imports-second-has-hook/expected.tsx | Adds expected output for multi-import ordering cases. |
| codemods/jssg/replace-use-form-state/tests/multiple-react-dom-imports-both-have-hook/metrics.json | Adds metrics fixture for multiple imports both containing target hook. |
| codemods/jssg/replace-use-form-state/tests/multiple-react-dom-imports-both-have-hook/input.tsx | Adds input fixture for multiple imports both containing target hook. |
| codemods/jssg/replace-use-form-state/tests/multiple-react-dom-imports-both-have-hook/expected.tsx | Adds expected output for multiple imports both containing target hook. |
| codemods/jssg/replace-use-form-state/tests/member-access-non-import-no-change/input.tsx | Adds no-op fixture for member access on non-imported identifier. |
| codemods/jssg/replace-use-form-state/tests/member-access-non-import-no-change/expected.tsx | Adds expected output for member access no-op. |
| codemods/jssg/replace-use-form-state/tests/default-and-named/metrics.json | Adds metrics fixture for default+named import patterns. |
| codemods/jssg/replace-use-form-state/tests/default-and-named/input.tsx | Adds input fixture for default+named import patterns. |
| codemods/jssg/replace-use-form-state/tests/default-and-named/expected.tsx | Adds expected output fixture for default+named import patterns. |
| codemods/jssg/replace-use-form-state/tests/aliased-to-same-name/metrics.json | Adds metrics fixture for redundant aliasing. |
| codemods/jssg/replace-use-form-state/tests/aliased-to-same-name/input.tsx | Adds input fixture for redundant aliasing. |
| codemods/jssg/replace-use-form-state/tests/aliased-to-same-name/expected.tsx | Adds expected output fixture for redundant aliasing. |
| codemods/jssg/replace-use-form-state/scripts/codemod.ts | Implements JSSG transform for useFormState -> useActionState. |
| codemods/jssg/replace-use-form-state/package.json | Adds package manifest and scripts for replace-use-form-state codemod. |
| codemods/jssg/replace-use-form-state/codemod.yaml | Adds codemod registry metadata. |
| codemods/jssg/replace-use-form-state/README.md | Documents how to run and develop the codemod. |
| codemods/jssg/replace-string-ref/tsconfig.json | Adds TypeScript config for replace-string-ref package. |
| codemods/jssg/replace-string-ref/tests/non-identifier-ref-name/metrics.json | Adds metrics fixture for non-identifier string refs. |
| codemods/jssg/replace-string-ref/tests/non-identifier-ref-name/input.tsx | Adds input fixture for non-identifier string refs. |
| codemods/jssg/replace-string-ref/tests/non-identifier-ref-name/expected.tsx | Adds expected output for non-identifier string refs. |
| codemods/jssg/replace-string-ref/tests/namespace-import/metrics.json | Adds metrics fixture for namespace React import case. |
| codemods/jssg/replace-string-ref/tests/namespace-import/input.tsx | Adds input fixture for namespace React import case. |
| codemods/jssg/replace-string-ref/tests/namespace-import/expected.tsx | Adds expected output for namespace React import case. |
| codemods/jssg/replace-string-ref/tests/multiple-string-refs/metrics.json | Adds metrics fixture for multiple string refs. |
| codemods/jssg/replace-string-ref/tests/multiple-string-refs/input.tsx | Adds input fixture for multiple string refs. |
| codemods/jssg/replace-string-ref/tests/multiple-string-refs/expected.tsx | Adds expected output for multiple string refs. |
| codemods/jssg/replace-string-ref/tests/mixin-component-no-change/input.tsx | Adds no-op fixture for mixin superclass case. |
| codemods/jssg/replace-string-ref/tests/mixin-component-no-change/expected.tsx | Adds expected output for mixin superclass no-op. |
| codemods/jssg/replace-string-ref/tests/member-expression-ref-value-no-change/input.tsx | Adds no-op fixture for non-string ref expression. |
| codemods/jssg/replace-string-ref/tests/member-expression-ref-value-no-change/expected.tsx | Adds expected output for non-string ref expression no-op. |
| codemods/jssg/replace-string-ref/tests/export-default-class/metrics.json | Adds metrics fixture for export-default class case. |
| codemods/jssg/replace-string-ref/tests/export-default-class/input.tsx | Adds input fixture for export-default class case. |
| codemods/jssg/replace-string-ref/tests/export-default-class/expected.tsx | Adds expected output fixture for export-default class case. |
| codemods/jssg/replace-string-ref/tests/class-component-named-import/metrics.json | Adds metrics fixture for named Component/PureComponent imports. |
| codemods/jssg/replace-string-ref/tests/class-component-default-import/metrics.json | Adds metrics fixture for default React import. |
| codemods/jssg/replace-string-ref/tests/class-component-custom-import-names/metrics.json | Adds metrics fixture for aliased React/Component imports. |
| codemods/jssg/replace-string-ref/tests/class-component-custom-import-names/expected.tsx | Adds expected output for aliased React/Component imports. |
| codemods/jssg/replace-string-ref/scripts/codemod.ts | Implements JSSG transform for string refs -> callback refs. |
| codemods/jssg/replace-string-ref/package.json | Adds package manifest and scripts for replace-string-ref codemod. |
| codemods/jssg/replace-string-ref/codemod.yaml | Adds codemod registry metadata. |
| codemods/jssg/replace-string-ref/README.md | Documents how to run and develop the codemod. |
| codemods/jssg/replace-reactdom-render/tsconfig.json | Adds TypeScript config for replace-reactdom-render package. |
| codemods/jssg/replace-reactdom-render/tests/nested/metrics.json | Adds metrics fixture for nested render call. |
| codemods/jssg/replace-reactdom-render/tests/nested/expected.tsx | Adds expected output fixture for nested render call. |
| codemods/jssg/replace-reactdom-render/tests/multiple-named-render-imports/metrics.json | Adds metrics fixture for multiple named render imports. |
| codemods/jssg/replace-reactdom-render/tests/multiple-named-render-imports/input.tsx | Adds input fixture for multiple named render imports. |
| codemods/jssg/replace-reactdom-render/tests/multiple-named-render-imports/expected.tsx | Adds expected output fixture for multiple named render imports. |
| codemods/jssg/replace-reactdom-render/tests/multiple-member-render-imports/metrics.json | Adds metrics fixture for default+namespace ReactDOM imports. |
| codemods/jssg/replace-reactdom-render/tests/multiple-member-render-imports/input.tsx | Adds input fixture for default+namespace ReactDOM imports. |
| codemods/jssg/replace-reactdom-render/tests/multiple-member-render-imports/expected.tsx | Adds expected output fixture for default+namespace ReactDOM imports. |
| codemods/jssg/replace-reactdom-render/tests/default/metrics.json | Adds metrics fixture for default ReactDOM import case. |
| codemods/jssg/replace-reactdom-render/tests/default/expected.tsx | Adds expected output for default ReactDOM import case. |
| codemods/jssg/replace-reactdom-render/scripts/codemod.ts | Implements JSSG transform for ReactDOM.render -> createRoot().render. |
| codemods/jssg/replace-reactdom-render/package.json | Adds package manifest and scripts for replace-reactdom-render codemod. |
| codemods/jssg/replace-reactdom-render/codemod.yaml | Adds codemod registry metadata. |
| codemods/jssg/replace-reactdom-render/README.md | Documents how to run and develop the codemod. |
| codemods/jssg/replace-act-import/tsconfig.json | Adds TypeScript config for replace-act-import package. |
| codemods/jssg/replace-act-import/tests/wildcard-import/expected.tsx | Adds expected output fixtures for namespace import handling. |
| codemods/jssg/replace-act-import/tests/wildcard-import-2/expected.tsx | Adds expected output fixture variant for whitespace/newlines. |
| codemods/jssg/replace-act-import/tests/named-reexport-no-change/input.tsx | Adds no-op fixture to avoid mutating named re-export. |
| codemods/jssg/replace-act-import/tests/named-import/expected.tsx | Adds expected output for named act import migration. |
| codemods/jssg/replace-act-import/tests/named-import-2/expected.tsx | Adds expected output for mixed named specifiers formatting case. |
| codemods/jssg/replace-act-import/tests/multiple-named-imports/metrics.json | Adds metrics for consolidating multiple named imports. |
| codemods/jssg/replace-act-import/tests/multiple-named-imports/input.tsx | Adds input fixture for consolidating multiple named imports. |
| codemods/jssg/replace-act-import/tests/multiple-named-imports/expected.tsx | Adds expected output for consolidating multiple named imports. |
| codemods/jssg/replace-act-import/tests/multiple-named-imports-with-other-specifier/metrics.json | Adds metrics for splitting imports while migrating act. |
| codemods/jssg/replace-act-import/tests/multiple-named-imports-with-other-specifier/input.tsx | Adds input fixture for splitting imports while migrating act. |
| codemods/jssg/replace-act-import/tests/multiple-named-imports-with-other-specifier/expected.tsx | Adds expected output for splitting imports while migrating act. |
| codemods/jssg/replace-act-import/scripts/codemod.ts | Implements JSSG transform migrating act to react. |
| codemods/jssg/replace-act-import/package.json | Adds package manifest and scripts for replace-act-import codemod. |
| codemods/jssg/replace-act-import/codemod.yaml | Adds codemod registry metadata. |
| codemods/jssg/replace-act-import/README.md | Documents how to run and develop the codemod. |
| codemods/jssg/react-proptypes-to-prop-types/workflow.yaml | Adds workflow params for module-name override. |
| codemods/jssg/react-proptypes-to-prop-types/tsconfig.json | Adds TypeScript config for react-proptypes-to-prop-types package. |
| codemods/jssg/react-proptypes-to-prop-types/tests/with-top-comment/input.tsx | Adds fixture ensuring top comments preserved. |
| codemods/jssg/react-proptypes-to-prop-types/tests/with-top-comment/expected.tsx | Adds expected output ensuring top comments preserved. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require/metrics.json | Adds metrics fixture for require-based migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require/input.tsx | Adds input fixture for require-based migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require/expected.tsx | Adds expected output fixture for require-based migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-destructured-only/input.tsx | Adds input fixture for destructured PropTypes removal. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-destructured-only/expected.tsx | Adds expected output fixture for destructured PropTypes removal. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-destructured-multi/input.tsx | Adds fixture for mixed Component + PropTypes destructuring. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-destructured-multi/expected.tsx | Adds expected output for mixed Component + PropTypes destructuring. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-destructured-direct/input.tsx | Adds fixture for destructuring PropTypes directly from require('react'). |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-destructured-direct/expected.tsx | Adds expected output for destructuring PropTypes directly from require('react'). |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-alias/input.tsx | Adds fixture for aliasing PropTypes during destructuring. |
| codemods/jssg/react-proptypes-to-prop-types/tests/require-alias/expected.tsx | Adds expected output for aliasing PropTypes during destructuring. |
| codemods/jssg/react-proptypes-to-prop-types/tests/no-change-require/input.tsx | Adds no-op fixture for already-migrated require case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/no-change-require/expected.tsx | Adds expected output for already-migrated require case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/no-change-import/input.tsx | Adds no-op fixture for already-migrated import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/no-change-import/expected.tsx | Adds expected output for already-migrated import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/nested-destructured-proptypes-import/input.tsx | Adds fixture for nested destructuring of PropTypes members. |
| codemods/jssg/react-proptypes-to-prop-types/tests/nested-destructured-proptypes-import/expected.tsx | Adds expected output for nested destructuring migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/named-parameters/input.tsx | Adds fixture ensuring named parameters aren’t broken by import edits. |
| codemods/jssg/react-proptypes-to-prop-types/tests/named-parameters/expected.tsx | Adds expected output for named parameters fixture. |
| codemods/jssg/react-proptypes-to-prop-types/tests/module-name/test.config.json | Adds test config for overriding module-name param. |
| codemods/jssg/react-proptypes-to-prop-types/tests/module-name/metrics.json | Adds metrics fixture for module-name override case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/module-name/input.tsx | Adds input fixture for module-name override case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/module-name/expected.tsx | Adds expected output fixture for module-name override case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/mixed-import-and-require/metrics.json | Adds metrics fixture for files mixing import and require. |
| codemods/jssg/react-proptypes-to-prop-types/tests/mixed-import-and-require/input.tsx | Adds input fixture for files mixing import and require. |
| codemods/jssg/react-proptypes-to-prop-types/tests/mixed-import-and-require/expected.tsx | Adds expected output fixture for files mixing import and require. |
| codemods/jssg/react-proptypes-to-prop-types/tests/mixed-import-and-require-2/input.tsx | Adds fixture for Flow type import + require + destructuring. |
| codemods/jssg/react-proptypes-to-prop-types/tests/mixed-import-and-require-2/expected.tsx | Adds expected output for Flow type import + require + destructuring. |
| codemods/jssg/react-proptypes-to-prop-types/tests/import-flow-type-with-require/input.tsx | Adds fixture for Flow type import ordering with requires. |
| codemods/jssg/react-proptypes-to-prop-types/tests/import-flow-type-with-require/expected.tsx | Adds expected output for Flow type import ordering with requires. |
| codemods/jssg/react-proptypes-to-prop-types/tests/import-alias/input.tsx | Adds fixture for aliased PropTypes named import from react. |
| codemods/jssg/react-proptypes-to-prop-types/tests/import-alias/expected.tsx | Adds expected output for aliased PropTypes named import from react. |
| codemods/jssg/react-proptypes-to-prop-types/tests/destructured-proptypes-import/input.tsx | Adds fixture for { PropTypes } from 'react' migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/destructured-proptypes-import/expected.tsx | Adds expected output for { PropTypes } from 'react' migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/default-import/metrics.json | Adds metrics fixture for default React import migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/default-import/input.tsx | Adds input fixture for default React import migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/default-import/expected.tsx | Adds expected output for default React import migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/default-and-named-import/input.tsx | Adds fixture for default+named React import migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/default-and-named-import/expected.tsx | Adds expected output for default+named React import migration. |
| codemods/jssg/react-proptypes-to-prop-types/tests/assigned-to-var-with-different-name/metrics.json | Adds metrics fixture for PropTypes alias variables. |
| codemods/jssg/react-proptypes-to-prop-types/tests/assigned-to-var-with-different-name/input.tsx | Adds input fixture for PropTypes alias variables. |
| codemods/jssg/react-proptypes-to-prop-types/tests/assigned-to-var-with-different-name/expected.tsx | Adds expected output fixture for PropTypes alias variables. |
| codemods/jssg/react-proptypes-to-prop-types/tests/assigned-from-react-var/metrics.json | Adds metrics fixture for removing now-unneeded PropTypes vars. |
| codemods/jssg/react-proptypes-to-prop-types/tests/assigned-from-react-var/input.tsx | Adds input fixture for removing now-unneeded PropTypes vars. |
| codemods/jssg/react-proptypes-to-prop-types/tests/assigned-from-react-var/expected.tsx | Adds expected output for removing now-unneeded PropTypes vars. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-require/metrics.json | Adds metrics fixture for already-migrated require case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-require/input.tsx | Adds input fixture for already-migrated require case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-require/expected.tsx | Adds expected output for already-migrated require case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-named-import/metrics.json | Adds metrics fixture for already-migrated named import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-named-import/input.tsx | Adds input fixture for already-migrated named import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-named-import/expected.tsx | Adds expected output for already-migrated named import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-named-as-import/metrics.json | Adds metrics fixture for already-migrated named-as import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-named-as-import/input.tsx | Adds input fixture for already-migrated named-as import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-named-as-import/expected.tsx | Adds expected output for already-migrated named-as import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-import/metrics.json | Adds metrics fixture for already-migrated import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-import/input.tsx | Adds input fixture for already-migrated import case. |
| codemods/jssg/react-proptypes-to-prop-types/tests/already-migrated-import/expected.tsx | Adds expected output for already-migrated import case. |
| codemods/jssg/react-proptypes-to-prop-types/scripts/codemod.ts | Implements JSSG transform for React.PropTypes -> prop-types package. |
| codemods/jssg/react-proptypes-to-prop-types/package.json | Adds package manifest and scripts for react-proptypes-to-prop-types codemod. |
| codemods/jssg/react-proptypes-to-prop-types/codemod.yaml | Adds codemod registry metadata. |
| codemods/jssg/react-proptypes-to-prop-types/README.md | Documents how to run and develop the codemod. |
| README.md | Adds top-level documentation listing available codemods and usage. |
| PARITY_STATUS.md | Adds parity/certification status document for codemods. |
| LEGACY.md | Documents legacy transforms and how to run them. |
| .github/workflows/ci.yml | Adds CI jobs for lint/docs, active tests/typecheck, and legacy tests. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| path.node.properties = path.node.properties.map(property => { | ||
| if (property.key.name === DOMModuleName) { | ||
| return j.identifier('createElement'); | ||
| } else { | ||
| return property; | ||
| } | ||
| }); |
There was a problem hiding this comment.
This produces an invalid AST for object destructuring: ObjectPattern.properties elements must be Property/pattern nodes, not an Identifier. Instead, keep the property node and rename its key/value to createElement (preserving shorthand when applicable), e.g. transform { DOM } = React into { createElement } = React.
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: 20 | ||
| cache: pnpm |
There was a problem hiding this comment.
The legacy CI job runs pnpm run test:legacy without installing dependencies, which will fail on a clean runner. Add an install step (e.g. pnpm install --frozen-lockfile) before running the legacy tests.
| cache: pnpm | |
| cache: pnpm | |
| - run: pnpm install --frozen-lockfile |
| const argList = args.children().filter((child) => | ||
| child.kind() !== "(" && child.kind() !== ")" && child.kind() !== "," | ||
| ); | ||
|
|
||
| if (argList.length < 2) return; | ||
|
|
||
| const element = argList[0]!; | ||
| const container = argList[1]!; | ||
| const statement = call.ancestors().find((ancestor) => ancestor.kind() === "expression_statement"); | ||
| if (!statement) return; |
There was a problem hiding this comment.
For ReactDOM.render(element, container, callback), the third argument is silently dropped, which changes runtime behavior. Consider preserving it by emitting an additional callback() after root.render(...) when a 3rd argument is present, or explicitly skipping transformation when extra args exist.
| const useContextCalls = rootNode.findAll({ | ||
| rule: { | ||
| kind: "call_expression", | ||
| has: { | ||
| field: "function", | ||
| kind: "identifier", | ||
| regex: `^${localName}$`, | ||
| }, | ||
| }, | ||
| }); |
There was a problem hiding this comment.
Interpolating localName into a regex without escaping can mis-match or throw for valid identifier names containing regex meta characters (e.g. $). Escape localName before building the regex (or use an exact-text matcher if available) to ensure only the intended identifier is counted/transformed.
| "@codemod.com/jssg-types": "latest", | ||
| "typescript": "latest", | ||
| "@types/node": "latest" |
There was a problem hiding this comment.
Using latest for devDependencies makes installs non-reproducible and can break CI/tests unexpectedly when upstream releases change. Prefer pinning versions (or at least use a semver range) and relying on the lockfile for deterministic builds.
| "@codemod.com/jssg-types": "latest", | |
| "typescript": "latest", | |
| "@types/node": "latest" | |
| "@codemod.com/jssg-types": "^0.1.0", | |
| "typescript": "^5.6.3", | |
| "@types/node": "^22.10.2" |
| Object.defineProperty(Function.prototype, "requireActual", { | ||
| value: jest.requireActual, | ||
| configurable: true, | ||
| writable: true, | ||
| }); |
There was a problem hiding this comment.
Patching Function.prototype in Jest setup is a global side effect that can cause hard-to-debug interactions across test files (and impacts any functions created during tests). Prefer attaching helpers to globalThis (or exporting a utility) instead of modifying built-in prototypes.
| const replaceDestructuredDOMStatement = (j, root) => { | ||
| let hasModifications = false; | ||
| //--------- | ||
| // First update import statments. eg: |
There was a problem hiding this comment.
Corrected spelling of 'statments' to 'statements'.
Expand include patterns for spec files, __tests__, and tests/ trees so the workflow discovers typical test sources and JSSG fixtures. Add excludes for .git and JSSG expected golden files. Made-with: Cursor
No description provided.