Skip to content

Releases: facebook/jscodeshift

v0.3.30

25 Oct 20:13
Compare
Choose a tag to compare

Fixes

v0.3.29

25 Oct 17:46
Compare
Choose a tag to compare

New

  • Collections now have a .length property which is equivalent to .size() (#151, @DrewML)

  • You can now reference jscodeshift as j directly from the transform's API options. I.e. you can write

    export default function transformer(file, { j }) {
      return j(file.source).toSource();
    }

    instead of

    export default function transformer(file, api) {
      const j = api.jscodeshift;
    
      return j(file.source).toSource();
    }

    or

    export default function transformer(file, {jscodeshift: j}) {
      return j(file.source).toSource();
    }

    (#153, @vjeux)

Improved

  • Experimental settings have been enabled for the flow parser, so it is now be able to process files that use e.g. public class fields (a2e4a3a)

v0.3.28

15 Aug 16:28
Compare
Choose a tag to compare

New

Changed

  • Better error message when using .get on an empty collection ( #140 , @DrewML )
  • jscodeshift now depends on recast v0.11.11 which adds better support for new flow type constructs.

v0.3.27

29 Jul 23:10
Compare
Choose a tag to compare

Fixes

v0.3.26

18 Jul 10:21
Compare
Choose a tag to compare

New

  • Return value of Runner.run includes elapsed time and stats collected via stats method ( #128, @iamdustan).
  • jscodeshift --version also prints the used recast version ( #131, @keyanzhang)

Fixes

  • renameTo ignores Identifiers that are not variable references ( #125, Robby Nevels)
  • Transformers / codemods can use experimental features ( >= stage 1) and flow type annotations again (28eb515). This was a regressions.

v0.3.25

23 Jun 00:57
Compare
Choose a tag to compare

Fixed

  • testUtils supports custom parsers (e5fb37d)
  • testUtils also passes a stub for the stats method to the transformer (e5fb37d)

v0.3.24

22 Jun 20:27
Compare
Choose a tag to compare

Fixed

  • Fixed stats output in dry run. Thanks @gaearon for noticing.

v0.3.23

22 Jun 18:08
Compare
Choose a tag to compare

Fixed

  • Fixes an issue with using jscodeshift inside jest unit tests ( #122 )

v0.3.22

20 Jun 23:18
Compare
Choose a tag to compare

Fixed: jscodeshift installation

Seems like npm cannot handle local files (#120) :-/

v0.3.21

20 Jun 20:40
Compare
Choose a tag to compare

New: Choose your parser

Problem: jscodeshift uses Babel v5 to parse source files. Since Babel v5 doesn't get updated anymore, jscodeshift is unable to parse files that contain more modern flow type annotation.

To solve this, jscodeshift now supports three parsers, babel v5, babylon and flow, and even allows you to pass your own. Babel v5 still stays the default parser, but we will likely use another parser (babylon or flow) as default in the future. Having the option to pass a custom parser allows us to experiment which works best with jscodeshift/recast.

How to choose a parser

CLI

--parser allows you specify one of the built-in parsers from the command line: --parser=babelv5, --parser=babylon, --parser=flow.

API

jscodeshift now accepts a second argument that is directly passed to recast's parse method. This allows you to load your own parser, as long as it is compatible with recast:

jscodeshift(source, {parser: require('myParser')})

Transformer

The value of the parser export of the transformer is used as parser. The value can either be the name of one of the built-in parsers (babel, babylon, flow) or an object that can be directly passed to recast.parse.

Examples:

export const parser = 'flow';
// or
export {default as parser} from 'myParser';

This allows transformers to specify their own parser (as long as it is compatible with ESTree / recast), making them a bit more independent from jscodeshift's internals.


jscodeshift --version now also lists the versions of the built-in parsers

$ jscodeshift --version
jscodeshift: 0.3.21
 - babel: 5.8.38
 - babylon: 6.8.1
 - flow: 0.26.0

Reinstalling jscodeshift is probably the simplest way for now to update the built-in parsers.