ESLint configuration for my own projects.
This is not meant to be shared and semantic versioning is not followed.
Please reach out if you're looking for a Node.js API or CLI engineer (11 years of experience). Most recently I have been Netlify Build's and Netlify Plugins' technical lead for 2.5 years. I am available for full-time remote positions.
State should be immutable.
Variables and object properties should be read-only. They should be copied instead of mutated. Assignment should only happen during declaration.
The following patterns should be avoided as they imply state:
- loops (
for
,while
). Use functional methods (likeArray.map()
andArray.filter()
) and recursion instead. - classes/OOP. To inherit/share behavior, use composition or generic programming instead.
- events. Use promises and streams instead.
Global variables should not be used except the ones that are built-in (e.g.
Object
).
Throwing exceptions is allowed as this can simplify code.
Code should be split into small files and functions:
- files have at most 90 non-empty lines and 10 dependencies.
- functions have at most 4 branches and 10 statements.
- branches/blocks should not be nested.
- lines are at most 80 characters long.
- ES modules. Exports should be named (no
export default
). - object and array destructuring.
- object spreading:
{ ...object }
instead ofObject.assign({}, ...object)
- arguments spreading:
funcName(...args)
instead offuncName.call(this, ...args)
- parameters spreading:
(...args) => ...
instead of(arguments) => ...
- template strings instead of concatenation.
async
/await
instead of explicit promises or callbacks.- vanilla JavaScript/TypeScript instead of Lodash/Underscore.
- only JavaScript/TypeScript features supported by the Node.js version specified
in your
package.json
engines
field.
The configuration is very explicit and enforces strict linting. This should help you find bugs and maintain a consistent coding style:
- no dead code.
- typecasting should be explicit.
- file dependencies should be sorted.
- variable names should remain short.
- constants should be assigned to variables.
- avoiding turning off ESLint rules with comments.
- RegExps should use the
u
flag. - no variables shadowing.
- named parameters (i.e. passing an object as single parameter) instead of positional parameters.
- arrow functions should be preferred
For any question, don't hesitate to submit an issue on GitHub.
Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.
This project was made with ❤️. The simplest way to give back is by starring and sharing it online.
If the documentation is unclear or has a typo, please click on the page's Edit
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug, please check our guidelines. Pull requests are welcome!