• Stars
    star
    1,214
  • Rank 38,600 (Top 0.8 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 9 years ago
  • Updated almost 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Codemod scripts to transform code to next generation JS

js-codemod Build Status

This repository contains a collection of codemod scripts for use with JSCodeshift.

Setup & Run

npm install -g jscodeshift
git clone https://github.com/cpojer/js-codemod.git
jscodeshift -t <codemod-script> <file>

Use the -d option for a dry-run and use -p to print the output for comparison.

Included Scripts

arrow-function-arguments

jscodeshift -t js-codemod/transforms/arrow-function-arguments.js <file>

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 () => {}.

jscodeshift -t js-codemod/transforms/arrow-function.js <file>
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

jscodeshift -t js-codemod/transforms/invalid-requires.js <file>

jest-update

jscodeshift -t js-codemod/transforms/jest-update.js <file>

no-reassign-params

Converts functions to not reassign to parameters. This is useful to turn on in conjunction with Flow's const_params option.

jscodeshift -t js-codemod/transforms/no-reassign-params.js <file>

no-vars

Conservatively converts var to const or let.

jscodeshift -t js-codemod/transforms/no-vars.js <file>

object-shorthand

Transforms object literals to use ES6 shorthand for properties and methods.

jscodeshift -t js-codemod/transforms/object-shorthand.js <file>

outline-require

jscodeshift -t js-codemod/transforms/outline-require.js <file>

rm-copyProperties

jscodeshift -t js-codemod/transforms/rm-copyProperties.js <file>

rm-merge

jscodeshift -t js-codemod/transforms/rm-merge.js <file>

rm-object-assign

jscodeshift -t js-codemod/transforms/rm-object-assign.js <file>

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.

jscodeshift -t js-codemod/transforms/rm-requires.js <file>

template-literals

Replaces string concatenation with template literals.

jscodeshift -t js-codemod/transforms/template-literals.js <file>

Adapted from "How to write a codemod" by Ramana Venkata.

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

jscodeshift -t js-codemod/transforms/touchable.js <file>

trailing-commas

Adds trailing commas to array and object literals.

jscodeshift -t js-codemod/transforms/trailing-commas.js <file>

unchain-variables

Unchains chained variable declarations.

jscodeshift -t js-codemod/transforms/unchain-variables.js <file>

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/<method> import.

jscodeshift -t js-codemod/transforms/underscore-to-lodash-native.js <file>

unquote-properties

Removes quotes from object properties whose keys are strings which are valid identifiers.

jscodeshift -t js-codemod/transforms/unquote-properties.js <file>

updated-computed-props

jscodeshift -t js-codemod/transforms/updated-computed-props.js <file>

use-strict

Adds a top-level 'use strict' statement to JavaScript files

jscodeshift -t js-codemod/transforms/use-strict.js <file>

Included extensions

jscodeshift-imports helpers for modifying import and require statements, see docs.

Recast Options

Options to recast's printer can be provided through the printOptions command line argument

jscodeshift -t transform.js <file> --printOptions='{"quote":"double"}'

More Repositories

1

vite-ts-react-tailwind-template

Minimal, sensible defaults, fast.
TypeScript
544
star
2

remdx

Beautiful Minimalist React & MDX Presentations
TypeScript
229
star
3

mootools-mobile

Makes your web applications more touching.
JavaScript
131
star
4

pyjest

Example Jest runner for Python
JavaScript
83
star
5

mootools-filemanager

A filemanager for the web based on MooTools that allows you to (pre)view, upload and modify files and folders via the browser.
PHP
83
star
6

eslint-config

Opinionated ESLint config with sensible defaults.
JavaScript
63
star
7

PowerTools

A powerful! collection of low-level plugins for MooTools
Shell
57
star
8

palette-swap

Image palette swapping and color replacement tool based on canvas for Node.js and browsers.
TypeScript
56
star
9

mootools-history

History Management via popstate or hashchange.
JavaScript
56
star
10

dotfiles

My dotfiles and VS Code setup.
Shell
46
star
11

licht-theme

A comfortable light theme for VS Code, SublimeText, Atom and TextMate.
Less
39
star
12

copy-as-markdown

A React hook to copy text as Markdown.
TypeScript
38
star
13

mootools-tree

MooTools powered Tree Components: Sortable Tree + Expand/Collapse Functionality
JavaScript
36
star
14

profane

Zero dependency profanity detector.
TypeScript
30
star
15

best-test-framework

The best test framework.
JavaScript
27
star
16

jest-bundler

The famous jest-bundler.
JavaScript
21
star
17

safe-word-list

A word list of the most common safe English words.
JavaScript
19
star
18

php-type

Types! For PHP. Like JavaScript
PHP
17
star
19

php-cache

May the cache be with you
PHP
15
star
20

scroll-loader

Loads additional content on a website when a user reaches the end of the page.
JavaScript
14
star
21

mootools-class-extras

Provides useful additions to Class
JavaScript
13
star
22

mootools-form-autogrow

Automatically resizes textareas based on their content.
JavaScript
10
star
23

mootools-interface

Interfaces. In JavaScript.
JavaScript
9
star
24

mootools-custom-event

Allows to create custom events based on other custom events.
JavaScript
7
star
25

posts

A space for discussing posts on cpojer.net.
6
star
26

mootools-form-placeholder

Provides a fallback for the placeholder property on input elements for older browsers.
JavaScript
5
star
27

mootools-dynamic-matcher

Searches elements via complex selectors and executes functions on them.
JavaScript
4
star
28

mootools-router

Router for client side web apps based on CrossroadsJS (http://millermedeiros.github.com/crossroads.js), adapted to MooTools.
JavaScript
3
star
29

mootilities

A few very simple and experimental MooTools gems to ease web app development.
JavaScript
2
star
30

dunkel-theme

A comfortable high-contrast dark theme for VS Code.
2
star
31

eslint-plugin

ESLint plugins for Nakazawa Tech.
JavaScript
1
star
32

cpojer

1
star
33

event-stack

Helps you Escape.
JavaScript
1
star
34

agent-conf-2023

People of Agent Conf 2023
HTML
1
star