Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cpojer/js-codemod
Codemod scripts to transform code to next generation JS
https://github.com/cpojer/js-codemod
Last synced: 1 day ago
JSON representation
Codemod scripts to transform code to next generation JS
- Host: GitHub
- URL: https://github.com/cpojer/js-codemod
- Owner: cpojer
- License: mit
- Created: 2015-03-23T04:45:13.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2022-12-07T09:44:43.000Z (about 2 years ago)
- Last Synced: 2024-10-29T15:35:06.339Z (2 months ago)
- Language: JavaScript
- Size: 335 KB
- Stars: 1,217
- Watchers: 27
- Forks: 109
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-modernization - https://github.com/cpojer/js-codemod - codemod is a Codemod scripts to transform code to next generation JS. (Language Analysis / TypeScript / JavaScript)
README
## js-codemod [![Build Status](https://travis-ci.org/cpojer/js-codemod.svg)](https://travis-ci.org/cpojer/js-codemod)
This repository contains a collection of codemod scripts for use with
[JSCodeshift](https://github.com/facebook/jscodeshift).### Setup & Run
```sh
npm install -g jscodeshift
git clone https://github.com/cpojer/js-codemod.git
jscodeshift -t
```Use the `-d` option for a dry-run and use `-p` to print the output for
comparison.### Included Scripts
#### `arrow-function-arguments`
```sh
jscodeshift -t js-codemod/transforms/arrow-function-arguments.js
```#### `arrow-function`
Transforms callbacks only when it can guarantee it won't break `this` context in the function. Also transforms `function() { }.bind(this)` calls to `() => {}`.
```sh
jscodeshift -t js-codemod/transforms/arrow-function.js
```##### Options:
`--inline-single-expressions=true`: If you are feeling lucky and you know that returning the value of single-expression functions will not affect the behavior of your application you can specify the option and it will transform `function() { relay(); }` to `() => relay()` instead of `() => { relay(); }`.
`--max-width=120`: Try the best it can to keep line lengths under the specified length.
#### `invalid-requires`
```sh
jscodeshift -t js-codemod/transforms/invalid-requires.js
```#### `jest-update`
```sh
jscodeshift -t js-codemod/transforms/jest-update.js
```#### `no-reassign-params`
Converts functions to not reassign to parameters. This is useful to turn on in conjunction with [Flow's const_params](https://flow.org/en/docs/config/options/#toc-experimental-const-params-boolean) option.
```sh
jscodeshift -t js-codemod/transforms/no-reassign-params.js
```#### `no-vars`
Conservatively converts `var` to `const` or `let`.
```sh
jscodeshift -t js-codemod/transforms/no-vars.js
```#### `object-shorthand`
Transforms object literals to use [ES6 shorthand](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#New_notations_in_ECMAScript_2015)
for properties and methods.```sh
jscodeshift -t js-codemod/transforms/object-shorthand.js
```#### `outline-require`
```sh
jscodeshift -t js-codemod/transforms/outline-require.js
```#### `rm-copyProperties`
```sh
jscodeshift -t js-codemod/transforms/rm-copyProperties.js
```#### `rm-merge`
```sh
jscodeshift -t js-codemod/transforms/rm-merge.js
```#### `rm-object-assign`
```sh
jscodeshift -t js-codemod/transforms/rm-object-assign.js
```#### `rm-requires`
Removes any requires where the imported value is not referenced. Additionally
if any module is required more than once the two requires will be merged.```sh
jscodeshift -t js-codemod/transforms/rm-requires.js
```#### `template-literals`
Replaces string concatenation with template literals.
```sh
jscodeshift -t js-codemod/transforms/template-literals.js
```Adapted from ["How to write a codemod" by Ramana Venkata](https://vramana.github.io/blog/2015/12/21/codemod-tutorial/).
Areas of improvement:
- Comments in the middle of string concatenation are currently added before the
string but after the assignment. Perhaps in these situations, the string
concatenation should be preserved as-is.- Nested concatenation inside template literals is not currently simplified.
Currently, a + `b${'c' + d}` becomes `${a}b${'c' + d}` but it would ideally
become ``${a}b${`c${d}`}``.- Unnecessary escaping of quotes from the resulting template literals is
currently not removed. This is possibly the domain of a different transform.- Unicode escape sequences are converted to unicode characters when the
simplified concatenation results in a string literal instead of a template
literal. It would be nice to perserve the original--whether it be a unicode
escape sequence or a unicode character.#### `touchable`
```sh
jscodeshift -t js-codemod/transforms/touchable.js
```#### `trailing-commas`
Adds trailing commas to array and object literals.
```sh
jscodeshift -t js-codemod/transforms/trailing-commas.js
```#### `unchain-variables`
Unchains chained variable declarations.
```sh
jscodeshift -t js-codemod/transforms/unchain-variables.js
```#### `underscore-to-lodash-native`
Replaces underscore (or lodash) to ES6 + lodash, preferring native ES6 array methods. Member imports are used by default to allow tree-shaking, but the `--split-imports=true` option will split each lodash import into its own `lodash/` import.
```sh
jscodeshift -t js-codemod/transforms/underscore-to-lodash-native.js
```#### `unquote-properties`
Removes quotes from object properties whose keys are strings which are valid
identifiers.```sh
jscodeshift -t js-codemod/transforms/unquote-properties.js
```#### `updated-computed-props`
```sh
jscodeshift -t js-codemod/transforms/updated-computed-props.js
```#### `use-strict`
Adds a top-level `'use strict'` statement to JavaScript files
```sh
jscodeshift -t js-codemod/transforms/use-strict.js
```### Included extensions
`jscodeshift-imports` helpers for modifying `import` and `require` statements,
[see docs](extensions/imports/).### Recast Options
[Options to recast's printer](https://github.com/benjamn/recast/blob/master/lib/options.ts) can be provided
through the `printOptions` command line argument```sh
jscodeshift -t transform.js --printOptions='{"quote":"double"}'
```