- Check that you have ESLint extension installed.
- (Optional) While you are playing with linters and VS Code extensions, you can think about a linter for Markdown files.
- Install required npm development packages
- Edit the config file
npm packages
- @babel/eslint-parser (the parser)
- eslint (the linter itself)
- eslint-config-react-app (ESLint configuration used by Create React App)
- eslint-plugin-import (little addon just for import statements)
- eslint-plugin-jsx-a11y (for amazing SEO results)
- eslint-plugin-react (for JSX)
Install them with yarn add --dev <packages>
ESLint config
My .eslintrc.js
module.exports = {
extends: [
require.resolve(`eslint-config-react-app`),
"eslint:recommended",
"plugin:react/recommended",
"plugin:jsx-a11y/recommended",
"plugin:import/recommended",
],
plugins: ["react", "jsx-a11y"],
rules: {
// react plugin - options
"react/jsx-indent": [2, 2, {indentLogicalExpressions: true}],
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
"prefer-const": "error", // ?
"no-var": "error", // optional, recommended when using es6+
"no-unused-vars": 1, // recommended
"arrow-spacing": ["error", { before: true, after: true }], // recommended
indent: ["error", 2],
"comma-dangle": [
"error",
{
objects: "only-multiline",
arrays: "only-multiline",
imports: "never",
exports: "never",
functions: "never",
},
],
// options to emulate prettier setup
// semi: ["warn", "never"],
// quotes: ["warn", "double", { "allowTemplateLiterals": true }],
"max-len": ["error", { code: 160 }],
"template-curly-spacing": ["error", "never"],
"arrow-parens": ["error", "as-needed"],
// standard.js
"space-before-function-paren": [
"error",
{
named: "never",
anonymous: "never",
asyncArrow: "always",
},
],
},
parser: require.resolve(`@babel/eslint-parser`),
parserOptions: {
requireConfigFile: false,
ecmaVersion: "latest",
sourceType: `module`,
ecmaFeatures: {
jsx: true,
},
},
}
Notes
- I made it working without gatsby-plugin-eslint. If I understand it correctly that plugin makes the build fail if you have any linter errors.
- To disable a rule globally set it to
"off"
in .eslintrc.js file:
module.exports = {
rules: {
"react/prop-types": "off",
}
}