Skip to content

chore: refactor repo & add jssg codemods#1

Merged
mohab-sameh merged 30 commits into
mainfrom
preview-codemods
Apr 17, 2026
Merged

chore: refactor repo & add jssg codemods#1
mohab-sameh merged 30 commits into
mainfrom
preview-codemods

Conversation

@mohab-sameh
Copy link
Copy Markdown
Contributor

No description provided.

@mohab-sameh mohab-sameh self-assigned this Apr 15, 2026
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
@mohebifar mohebifar requested a review from Copilot April 15, 2026 19:01
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 preserved jscodeshift transforms 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.

Comment on lines +87 to +93
path.node.properties = path.node.properties.map(property => {
if (property.key.name === DOMModuleName) {
return j.identifier('createElement');
} else {
return property;
}
});
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment thread .github/workflows/ci.yml
- uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
cache: pnpm
cache: pnpm
- run: pnpm install --frozen-lockfile

Copilot uses AI. Check for mistakes.
Comment on lines +85 to +94
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;
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +131 to +140
const useContextCalls = rootNode.findAll({
rule: {
kind: "call_expression",
has: {
field: "function",
kind: "identifier",
regex: `^${localName}$`,
},
},
});
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
Comment on lines +11 to +13
"@codemod.com/jssg-types": "latest",
"typescript": "latest",
"@types/node": "latest"
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Suggested change
"@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"

Copilot uses AI. Check for mistakes.
Comment on lines +1 to +5
Object.defineProperty(Function.prototype, "requireActual", {
value: jest.requireActual,
configurable: true,
writable: true,
});
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Copilot uses AI. Check for mistakes.
const replaceDestructuredDOMStatement = (j, root) => {
let hasModifications = false;
//---------
// First update import statments. eg:
Copy link

Copilot AI Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Corrected spelling of 'statments' to 'statements'.

Copilot uses AI. Check for mistakes.
alexbit-codemod and others added 3 commits April 16, 2026 18:00
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
@mohab-sameh mohab-sameh marked this pull request as ready for review April 17, 2026 22:40
@mohab-sameh mohab-sameh merged commit ea4973e into main Apr 17, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants