THIS REPOSITORY IS NOT MAINTAINED ANYMORE. Its contents have been moved to https://github.com/bevirtuous/tools.
This eslint configuration extends the default configuration from Airbnb. It brings everything you need to start with it.
npm i @virtuous/eslint-config --save-dev
Add the following to the .eslintrc in your project:
{
"extends": "@virtuous/eslint-config",
...
}
We have some extra rules implemented that extend Airbnb's Default Codestyle. We strongly recommend to read those default rules first to get into the basics!
- General 1.1. Commented out code 1.2. Comma dangle 1.3. Multiple empty lines
- Functions 2.1. Point free
- Objects 3.1. Single line objects
- Documentation 4.1. JSDoc requirement
- React 5.1 Prop Types
No code should be left commented out.
/**
* static propTypes = {
* width: PropTypes.string.isRequired,
* color: PropTypes.string,
* height: PropTypes.string.isRequired,
* };
*/
Dangling commas are required for objects with multiple items or properties.
This applies to Array
, Object
, Import
and Export
.
// bad
const myObject = {
a: 1,
b: 2
};
// good
const myObject = {
a: 1,
b: 2,
};
// bad
import { var1, var2, var3 } from 'Variables';
// good
import {
var1,
var2,
var3,
} from 'Variables';
There should not be multiple empty lines between code blocks.
// bad
const a = 1;
const b = 1;
while (...) {
...
}
// good
const a = 1;
const b = 2;
while (...) {
...
}
A function should not simply call another function.
// bad
const funcA = (params) {
...
};
const funcB = (params) {
funcA(params);
};
// good
const funcAB = (params) {
...
}
If an object is defined with multiple properties then each property should occupy a new line.
// bad
const x = { a: 1, b: 2, c: 3 };
// good
const w = { a: 1 };
const x = {
a: 1,
b: 2,
c: 3,
};
Every Function
, Class
, Method
and Arrow Function
definition should
include a valid JSDoc specification.
// bad (missing parameter descriptions)
/**
* This is funcA. It does something complicated.
*/
const funcA = (param1, param2) {
...
};
// bad (invalid specification)
/**
* This is funcB. It also does something complicated.
* @param {Object} parameters
*/
const funcB = (param1, param2) {
...
};
// good
/**
* It does something simple because we are using our heads.
* @param {string} param1 My first parameter.
* @param {boolean} param2 My Second parameter.
*/
const funcC = (param1, param2) {
...
};
PropTypes should be sorted by type (required or not) and alphabetically.
// bad
static propTypes = {
width: PropTypes.string.isRequired,
color: PropTypes.string,
height: PropTypes.string.isRequired,
};
// good
static propTypes = {
height: PropTypes.string.isRequired,
width: PropTypes.string.isRequired,
color: PropTypes.string,
};
Virtuous' eslint configuration is available under the MIT License.
See the LICENSE file for more information.