eslint-config-restrictor
v1.0.0
Published
Opinionated ESLint Config
Readme
Opinionated Eslint Setup
Eslint modularized config based on Andres Troinano rules.
Support for React, Typescript and Node projects with or without Prettier.
What it does
- Lints JavaScript and Typescript based with our opinionated rules
- Fixes issues and formatting errors with Prettier
Installing
If you don't already have a
package.jsonfile, create one withnpm init.Then we need to install everything needed by the config:
npx install-peerdeps --dev eslint-config-restrictorYou can see in your package.json there are now a few list of devDependencies.
Create a
.eslintrcfile in the root of your project's directory (it should live where package.json does). Your.eslintrcfile should look like this:
{
"extends": ["restrictor"]
}Tip: You can alternatively put this object in your package.json under the property "eslintConfig":. This makes one less file in your project.
- You can add two scripts to your package.json to lint and/or fix:
"scripts": {
"lint": "eslint './**/*.{js,jsx,ts,tsx}'",
"lint:fix": "eslint './**/*.{js,jsx,ts,tsx}' --fix"
},- Now you can manually lint your code by running
npm run lintand fix all fixable issues withnpm run lint:fix. You probably want your editor to do this though.
Add additional configuration
A few extra configuration files are available but they require additionals dependencies. You can combine them.
React
For react projects you should also extend this configuration.
npm install -D eslint-config-react-app eslint-plugin-react eslint-plugin-flowtype eslint-plugin-import eslint-plugin-react-hooks eslint-plugin-jsx-a11yAnd extend your .eslintrc file.
{
"extends": ["restrictor", "restrictor/react"]
}Typescript
For Typescript project you should also extend this configuration.
npm install -D @typescript-eslint/eslint-plugin @typescript-eslint/parser eslint-import-resolver-typescriptAnd extend your .eslintrc file
{
"extends": ["restrictor", "restrictor/typescript"]
}Node.js
For use in a node.js project you should also extend this configuration.
npm install -D eslint-plugin-import eslint-plugin-node eslint-plugin-promiseAnd extend your .eslintrc file.
{
"extends": ["restrictor", "restrictor/node"]
}Prettier
For use prettier in your project you should also extend this configuration.
npm install -D prettier eslint-plugin-prettier eslint-config-prettierAnd extend your .eslintrc file.
{
"extends": ["restrictor", "restrictor/prettier"]
}Important note: restrictor/prettier should be placed last because overrides some rules from the other config files.
All of them!
You can use them all together if the project requires.
Install all devDependencies together.
npm install -D eslint-config-react-app eslint-plugin-react eslint-plugin-flowtype eslint-plugin-import eslint-plugin-react-hooks eslint-plugin-jsx-a11y @typescript-eslint/eslint-plugin @typescript-eslint/parser prettier eslint-plugin-prettier eslint-config-prettierAnd add all the config files to .eslintrc.
{
"extends": [
"restrictor",
"restrictor/react",
"restrictor/typescript",
"restrictor/prettier"
]
}Settings
If you'd like to overwrite eslint or prettier settings, you can add the rules in your .eslintrc file. The ESLint rules go directly under "rules" while prettier options can be defined in a .prettierrc file or go under "prettier/prettier". Note that prettier rules overwrite anything in my config (trailing comma, and single quote), so you'll need to include those as well.
{
"extends": [
"restrictor"
],
"rules": {
"no-console": 2,
"prettier/prettier": [
"error",
{
"semi": false,
"singleQuote": true
}
]
}
}OR in a .prettierrc.
{
"semi": false,
"singleQuote": true
}With VS Code
Once you have done the above installs. You probably want your editor to lint and fix for you. Here are the instructions for VS Code:
- Install the ESLint package
- Now we need to setup some VS Code settings via
Code/File→Preferences→Settings. It's easier to enter these settings while editing thesettings.jsonfile, so click the{}icon in the top right corner:
// These are all my auto-save configs
"editor.formatOnSave": true,
// turn it off for JS and JSX, we will do this via eslint
"[javascript]": {
"editor.formatOnSave": false
},
"[javascriptreact]": {
"editor.formatOnSave": false
},
// tell the ESLint plugin to run on save
"eslint.autoFixOnSave": true,
// turn on eslint on .js,.jsx,.ts and .tsx files
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
],