An ESLint Plugin to Lint and auto-fix plain Functions into Arrow Functions, in all cases where conversion would result in the same behaviour (Arrow Functions do not support
this,arguments, ornew.targetfor example).
npm install --save-dev eslint eslint-plugin-prefer-arrow-functionsFor ESLint 9 and above, use the shared config all in eslint.config.mjs:
import pluginJs from '@eslint/js';
import preferArrowFunctions from 'eslint-plugin-prefer-arrow-functions';
export default [
  pluginJs.configs.all,
  preferArrowFunctions.configs.all,
];Or configure the rule(s) on your own:
import pluginJs from '@eslint/js';
import preferArrowFunctions from 'eslint-plugin-prefer-arrow-functions';
export default [
  pluginJs.configs.all,
  {
    plugins: {
      'prefer-arrow-functions': preferArrowFunctions
    },
    rules: {
      'prefer-arrow-functions/prefer-arrow-functions': [
        'warn',
        {
          allowedNames: [],
          allowNamedFunctions: false,
          allowObjectProperties: false,
          classPropertiesAllowed: false,
          disallowPrototype: false,
          returnStyle: 'unchanged',
          singleReturnOnly: false,
        },
      ],
    },
  },
];For ESLint 8 and below.
Add the plugin to the plugins section and the rule to the rules section in your .eslintrc. The default values for
options are listed in this example.
{
  "plugins": ["prefer-arrow-functions"],
  "rules": {
    "prefer-arrow-functions/prefer-arrow-functions": [
      "warn",
      {
        "allowedNames": [],
        "allowNamedFunctions": false,
        "allowObjectProperties": false,
        "classPropertiesAllowed": false,
        "disallowPrototype": false,
        "returnStyle": "unchanged",
        "singleReturnOnly": false
      }
    ]
  }
}An optional array of function names to ignore. When set, the rule won't report named functions such as
function foo() {} whose name is identical to a member of this array.
Controls how named functions are handled:
- When true, the rule won't report any named functions such asfunction foo() {}. Anonymous functions such asconst foo = function() {}will still be reported.
- When "only-expressions", the rule will allow named function expressions (likecallback(function namedFn() {})) but will still transform named function declarations (likefunction foo() {}).
- When false(default), all functions will be transformed to arrow functions when safe to do so.
If set to true, the rule won't report named methods such as
const myObj = {
  hello() {},
};When true, functions defined as
class instance fields
will be converted to arrow functions when doing so would not alter or break their behaviour.
When true, functions assigned to a prototype will be converted to arrow functions when doing so would not alter or
break their behaviour.
- When "implicit", arrow functions such asx => { return x; }will be converted tox => x.
- When "explicit", arrow functions such asx => xwill be converted tox => { return x; }.
- When "unchanged"or not set, arrow functions will be left as they were.
When true, only function declarations which only contain a return statement will be converted. Functions
containing block statements will be ignored.
This option works well in conjunction with ESLint's built-in arrow-body-style set to
as-needed.
This project is a fork of https://github.com/TristonJ/eslint-plugin-prefer-arrow by Triston Jones.