/eslint-config-kingstinct-react-native

Eslint configuration for React-native based on Airbnb with some great tweaks

Primary LanguageJavaScript

Codeship Status for robertherber/eslint-config-kingstinct-react-native

Usage

v2.0

Just releasing version 2 of this eslint setup. I added the flowtype-errors plugin which will actually run a flow server and lints that directly. To use it make sure you've got flow-bin installed - and if not go ahead and disable the rules flowtype-errors/show-errors and flowtype-errors/show-warnings by doing this:

    { ...,
        rules: { ...,
          'flowtype-errors/show-errors': 0,
          'flowtype-errors/show-warnings': 0,
        }
    }

This is the base eslint config I use for React Native. It's based on the popular Airbnb-config with a few plugin additions:

  • flowtype
  • flowtype-errors (which runs flow-bin)
  • import
  • jest
  • json
  • lodash-fp
  • promise
  • react
  • react-native

I've also made some minor changes to the rules, so if you've got other preferences you might want to override some rules. I highly recommend you to use eslint, flowtype with plugins for your texteditor/IDE.

The two main principles are to catch errors early on and to boost productivity (so for example I've disabled react/sort-comp as it's not fixed automatically yet). Two of the choices I've made that you might need to configure are:

  • Enforce non-native promises, I recommend using bluebird for more features.
  • Why? Ensuring the same feature set is available on all Promises you expose.
  • Disable if you just want to use native ES6 Promises. Add this to your .eslintrc:
    { ...,
        rules: { ...,
          'lodash-fp/use-fp': 0
        }
    }
    
  • Enforce lodash-fp instead of lodash.
    • Why? Many lodash methods are mutable which might cause hard-to-debug side effects, especially when using redux . With lodash-fp you're safe.
    • Disable if you really want to use the mutable lodash flavour (not recommended). Add this to your .eslintrc:
      { ...,
          rules: { ...,
            'promise/no-native': 0
          }
      }
      
  1. Install the correct versions of each package, which are listed by the command:
npm info "eslint-config-kingstinct-react-native@latest" peerDependencies

Linux/OSX users can run (if you're using NPM)

(
  export PKG=eslint-config-kingstinct-react-native;
  npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs npm install --save-dev "$PKG@latest"
)

or (if you're using yarn)

(
  export PKG=eslint-config-kingstinct-react-native;
  npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs yarn add --dev "$PKG@latest"
)

Which produces and runs a command like:

npm install --save-dev eslint-config-kingstinct-react-native eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#

Windows users can either install all the peer dependencies manually, or use the install-peerdeps cli tool.

npm install -g install-peerdeps
install-peerdeps --dev eslint-config-kingstinct-react-native

The cli will produce and run a command like:

npm install --save-dev eslint-config-kingstinct-react-native eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
  1. Add "extends": "kingstinct-react-native" to your .eslintrc

Running tests

You can run tests with npm test. It will run the lint config on the project itself.