codeshift-transform-declared-arrow-to-func-dec

1.0.0 • Public • Published

Codeshift Declared Arrow Expression to Function Declaration Transform

CI

jscodeshift transform to convert arrow function expressions, assigned to variable declarations, into traditional function declarations

Before:

const foo = 1;
const bar = 2;
 
const add = (a: number, b: number) => {
  return a + b;
};
 
add(foo, bar);

After:

const foo = 1;
const bar = 2;
 
function add(a: number, b: number) {
  return a + b;
}
 
add(foo, bar);

This transform applies to any arrow expression that is assigned to a variable (var/let/const) at the point of declaration.

Usage

$ npm i -DE codeshift-transform-declared-arrow-to-func-dec
$ jscodeshift -t node_modules/codeshift-transform-declared-arrow-to-func-dec/dist/index.js some-source-file.js

Examples

Implied/implicit return

Before:

const f = () => 1;

After:

function f() {
  return 1;
}

Async functions

Before:

const get = async () => {
  const res = await fetch('/foo');
  return res.json();
};

After:

async function get() {
  const res = await fetch('/foo');
  return res.json();
}

Exported functions

Before:

export const f = () => Promise.resolve('Yay!');

After:

export function f() {
  return Promise.resolve('Yay!');
}

Complex functions

Before:

const f = () => {
  const a = 1;
  const b = 2;
  const c = 3;
  const sum = (seed: number) => [a, b, c].reduce((total, n) => total + n, seed);
 
  return sum(0);
};

After:

function f() {
  const a = 1;
  const b = 2;
  const c = 3;
 
  function sum(seed: number) {
    return [a, b, c].reduce((total, n) => total + n, seed);
  }
 
  return sum(0);
}

Unsupported functionality

The following examples are not supported by the transform (but might be introduced in the next major version).

Deferred function assignments

type F = (x: number) => number;
 
let f: F;
 
f = x => x + 1; // will not be transformed!

Rebinding this

function f(this: string) {
  const g = () => { // Will be transformed into a function declaration...
    console.log(this); // ...but `this` will no longer refer to f's context!
  };
 
  g.call('Hello!');
}

Package Sidebar

Install

npm i codeshift-transform-declared-arrow-to-func-dec

Weekly Downloads

1

Version

1.0.0

License

GPL-3.0-only

Unpacked Size

44.7 kB

Total Files

18

Last publish

Collaborators

  • jamesseanwright