More strict ESLint for better code quality

Thomas Vogel
Agent_sh
Published in
3 min readOct 13, 2016

I set up ESLint for react and node.js development at arkulpa. This config improved our code style quality and reduced simple stupid errors. First there was some work to update the existing code but now we really enjoy the output. It is my first post on Medium and I hope it is helpful for your ESLint setup.

Installing Lint for node js.

npm install --save-dev eslint

I use node.js with

--harmony

The ESLint rules explained. → http://eslint.org/docs/rules/

the config in yml style

#.eslintrc for node.jsenv:
node:
true
es6: true

rules:
# Possible Errors
# http://eslint.org/docs/rules/#possible-errors
comma-dangle: [2, only-multiline]
no-control-regex: 2
no-debugger: 2
no-dupe-args: 2
no-dupe-keys: 2
no-duplicate-case: 2
no-empty-character-class: 2
no-ex-assign: 2
no-extra-boolean-cast: 2
no-extra-parens: [2, functions]
no-extra-semi: 2
no-func-assign: 2
no-invalid-regexp: 2
no-irregular-whitespace: 2
no-obj-calls: 2
no-proto: 2
no-template-curly-in-string: 2
no-unexpected-multiline: 2
no-unreachable: 2
no-unsafe-negation: 2
use-isnan: 2
valid-typeof: 2
no-fallthrough: 2
no-global-assign: 2
no-multi-spaces: 2
no-octal: 2
no-redeclare: 2
no-self-assign: 2
no-unused-labels: 2
strict: [2, global]
no-delete-var: 2
no-undef: 2
no-unused-vars: [2, {args: none}]
no-mixed-requires: 2
no-new-require: 2
no-path-concat: 2
no-restricted-modules: [2, sys, _linklist]

# Stylistic Issues
# http://eslint.org/docs/rules/#stylistic-issues
brace-style: [2, 1tbs, {allowSingleLine: true}]
comma-spacing: 2
eol-last: 2
func-call-spacing: 2
indent: [2, 4, {SwitchCase: 1, MemberExpression: 1}]
key-spacing: [2, {mode: minimum}]
keyword-spacing: 2
linebreak-style: [2, unix]
max-len: [1, 120, 2]
new-parens: 2
no-mixed-spaces-and-tabs: 2
no-multiple-empty-lines: [2, {max: 2}]
no-trailing-spaces: 2
quotes: [2, single, avoid-escape]
semi: 2
space-before-blocks: [2, always]
space-before-function-paren: [2, never]
space-in-parens: [2, never]
space-infix-ops: 2
space-unary-ops: 2

# ECMAScript 6
# http://eslint.org/docs/rules/#ecmascript-6
arrow-parens: [2, always]
arrow-spacing: [2, {before: true, after: true}]
constructor-super: 2
no-class-assign: 2
no-confusing-arrow: 2
no-const-assign: 2
no-dupe-class-members: 2
no-new-symbol: 2
no-this-before-super: 2
prefer-const: 2
rest-spread-spacing: 2
template-curly-spacing: 2


# Global scoped method and vars
globals:
COUNTER_HTTP_CLIENT_REQUEST:
false
COUNTER_HTTP_CLIENT_RESPONSE: false
COUNTER_HTTP_SERVER_REQUEST: false
COUNTER_HTTP_SERVER_RESPONSE: false
COUNTER_NET_SERVER_CONNECTION: false
COUNTER_NET_SERVER_CONNECTION_CLOSE: false
DTRACE_HTTP_CLIENT_REQUEST: false
DTRACE_HTTP_CLIENT_RESPONSE: false
DTRACE_HTTP_SERVER_REQUEST: false
DTRACE_HTTP_SERVER_RESPONSE: false
DTRACE_NET_SERVER_CONNECTION: false
DTRACE_NET_STREAM_END: false
LTTNG_HTTP_CLIENT_REQUEST: false
LTTNG_HTTP_CLIENT_RESPONSE: false
LTTNG_HTTP_SERVER_REQUEST: false
LTTNG_HTTP_SERVER_RESPONSE: false
LTTNG_NET_SERVER_CONNECTION: false
LTTNG_NET_STREAM_END: false

For react + babel and webpack

there are more steps to do

Install ESLint, react and the Babel plugin

npm install --save-dev eslintnpm install --save-dev eslint-plugin-reactnpm install --save-dev babel-eslint

the config in JSON style:

The ESLint rules explained. → http://eslint.org/docs/rules/


{
"parser": "babel-eslint",
"plugins": [
"react",
"babel"
],
"ecmaFeatures": {
"jsx": true,
"arrowFunctions": true,
"modules": true,
"class": true
},
"env": {
"browser": true,
"amd": true,
"es6": true,
"node": true
},
"rules": {
"comma-dangle": 1,
"no-undef": 1,
"strict": 2,
"no-extra-semi": 1,
"no-underscore-dangle": 0,
"no-console": 1,
"no-unused-vars": 1,
"no-unreachable": 1,
"no-alert": 0,
"react/jsx-uses-react": 1,
"brace-style": [2, 1tbs, {allowSingleLine: true}],
"comma-spacing": 2,
"eol-last": 2,
"indent": [2, 4, { "SwitchCase": 1 }],
"key-spacing": [2, {mode: minimum}],
"linebreak-style": [2, unix],
"max-len": [1, 120, 2],
"new-parens": 2,
"no-mixed-spaces-and-tabs": 2,
"no-multiple-empty-lines": [2, {max: 2}],
"no-trailing-spaces": 2,
"quotes": [2, single, avoid-escape],
"semi": 2,
"space-before-blocks": [2, always],
"space-before-function-paren": [2, never],
"space-in-parens": [2, never],
"space-infix-ops": 2,
"space-unary-ops": 2
}
}

Setup Webpack to lint your JS code

npm --save-dev install eslint-loader

And in your Webpack config you have to add this

preLoaders: [
{
test: /\.(js|jsx)$/,
include: srcPath,
loader: 'eslint-loader',
query: {
presets: ['es2015']
}
}
],

--

--

Thomas Vogel
Agent_sh

software developer, co-founder of arkulpa, co-organizer of Agent Javascript Conference, ice hockey player, happy father and husband