ESLint rules adapted from https://github.com/airbnb/javascript
The main adaptation we've made is to downgrade non-critical rules to 'warn' level, to prevent linting recommendations from blocking app development (eg. in Create React App projects, where any error results in a red screen).
Pre-commit hooks and CI processes should use ESLint's --max-warnings=0
flag to ensure that lint warnings don't make it into production code.
Using the lint rules in a new package
-
Run the following:
( export PKG=@dangerfarms/eslint-config-df-base; npm info "$PKG@latest" peerDependencies --json | command sed 's/[\{\},]//g ; s/: /@/g' | xargs yarn add "$PKG@latest" )
Note: this produces and runs a command like the following:
yarn add @dangerfarms/eslint-config-df-base eslint@^#.#.# eslint-plugin-jsx-a11y@^#.#.# eslint-plugin-import@^#.#.# eslint-plugin-react@^#.#.#
, pinning the versions to the supported ones. -
Add
"@dangerfarms/eslint-config-df-base"
to your project's ESLint config, under theextends
property.{ "extends": "@dangerfarms/eslint-config-df-base" }
-
Add the
eslint
script to yourpackage.json
.{ "scripts": { "eslint": "eslint src" } }
Usage with git hooks
-
yarn add husky lint-staged
-
Update
package.json
with the following root keys.{ "husky": { "hooks": { "pre-commit": "lint-staged" } }, "lint-staged": { "*.js": [ "eslint --max-warnings=0 --fix", "git add" ] } }
TODO: maybe we can automate this, and have a single bootstrapping command to install default ESLint config, git hooks, etc on a new project.
Modifying the rules
You can clone this project if you'd like to update the rules.
For local development with yarn
the following might be helpful.
cd ~/Code/dangerfarms/javascript/packages/eslint-config-df
yarn link
cd ~/Code/dangerfarms/javascript/packages/eslint-config-df-base
yarn link
cd ~/Code/dangerfarms/project
yarn link "@dangerfarms/eslint-config-df"
yarn link "@dangerfarms/eslint-config-df-base"
Now you can modify eslint-config-df
and eslint-config-df-base
in place, and run ESLint against project
to see the effects. This allows manual testing of the ESLint rules against a particular project without having to publish a new version.