@contentful/eslint-config-backend

ESLint rule-set according to our company code-style guidelines

Usage no npm install needed!

<script type="module">
  import contentfulEslintConfigBackend from 'https://cdn.skypack.dev/@contentful/eslint-config-backend';
</script>

README

You can find this repo on NPM and you should use NPM to install it. Only clone this repo if you want to contribute.

Installation

$ npm install --save-dev @contentful/eslint-config-backend@latest eslint@latest eslint-plugin-mocha@latest eslint-plugin-promise@latest eslint-plugin-standard@latest eslint-plugin-node@latest eslint-plugin-import@latest

Add the following files to your project:

.eslintrc.js at your project root

module.exports = {
  extends: '@contentful/backend'
};

Optionally if you're using mocha add this file to your test directory test/.eslintrc.js

module.exports = {
  env: {
    mocha: true
  },
  globals: {
    expect: true
  }
};

You now have a locally installed eslint in node_modules/.bin/. It can be run with ./node_modules/.bin/eslint

Pro Tip:

  • add it to your PATH like this: PATH=$PATH:./node_modules/.bin/
  • just run the eslint command in your project folder.

Note that a globally installed eslint will not work because it won't find the config module. Also installing global modules is very unsafe.

Running linter

You can run the linter with eslint -c .eslintrc.{yaml, json} <FILE OR FOLDER PATH> Check ESLint documentation for more information.

IDE integration

Atom

Install the linter-eslint plugin. It should work without any change in configuration.

Other

IDE missing? Contributions are welcomed.

Precommit hook

Note: This is optional and you should discuss it with the owner of the repo before enabling this hook.

Install the pre-commit NPM package: npm install --save-dev pre-commit which sets up hooks automatically.

Update your package.json to include these changes:

"scripts": {
   "lint-js": "LIST=`git diff-index --name-only HEAD | grep \\.js

	
		
		
		
		
		
		
		
	npm:@contentful/eslint-config-backend | Skypack
	
		
		
		
		; if [ \"$LIST\" ]; then node node_modules/eslint/bin/eslint.js -c .eslintrc.yaml $LIST; fi"
},
"pre-commit": [
  "lint-js"
],

ESLint should now run before every commit and automatically lint .js files.

Rules

Rules are based on a combination of StandardJS and this ES6 addition.

Our rules are slightly different in the following points:

Major points

  • Line length: 120 characters
  • Semicolons
  • 2 space indentation
  • Use single quotes

Minor points

  • Each variable should have its own keyword. (So no const foo, bar)
  • No short-hand operators like n++ or n+=1 should be used. Use n = n + 1 instead. For loops are the exception, so for (let i = 0; i < 10; i++) is still allowed.
  • else / elseif must be placed after the previous closing bracket on the same line.