eslint-config-standard-prettier-fp v15.10.14
ESLint configuration combining:
- functional programming.
- Standard JavaScript which prescribes how to format your code.
- Prettier which automatically formats your code as part of your build process or inside your IDE.
- editorconfig which fulfills a similar goal but more generic and limited.
- modularity by encouraging splitting your code into small modules and functions.
- modern JavaScript.
- strictness.
The configuration is very opinionated but you can override specific rules in
your .eslintrc to fit your needs and coding style.
Install
$ npm install -D eslint-config-standard-prettier-fp eslint@^6.3.0 eslint-config-prettier@^6.2.0 eslint-config-standard@^14.1.0 eslint-import-resolver-node@^0.3.2 eslint-plugin-ava@^8.0.0 eslint-plugin-eslint-comments@^3.1.2 eslint-plugin-filenames@^1.3.2 eslint-plugin-fp@^2.3.0 eslint-plugin-html@^6.0.0 eslint-plugin-import@^2.18.2 eslint-plugin-markdown@^1.0.0 eslint-plugin-node@^10.0.0 eslint-plugin-promise@^4.2.1 eslint-plugin-standard@^4.0.1 eslint-plugin-unicorn@^10.0.0 eslint-plugin-you-dont-need-lodash-underscore@^6.7.0 prettier@^1.18.2Then add the following files.
.eslintrc.yml:
extends: standard-prettier-fp/.eslintrc.yml.prettierrc.yml:
eslint-config-standard-prettier-fp.gitattributes:
* text=auto eol=lfFinally copy the .editorconfig:
$ cp node_modules/eslint-config-standard-prettier-fp/.editorconfig .Prettier
prettier must be run before eslint to avoid conflicts.
We recommend using first prettier --write then eslint --fix --cache.
Do not forget to add .eslintcache to your .gitignore file.
Coding style
Functional programming
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.
Modularity
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.
Modern JavaScript
- 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:
function(...args)instead offunction(arguments) - template strings instead of concatenation.
async/awaitinstead of explicit promises or callbacks.- vanilla JavaScript instead of Lodash/Underscore.
- only JavaScript features supported by the Node.js version specified in your
package.jsonenginesfield.
Strictness
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
uflag. - no variables shadowing.
Other styling rules
- named parameters (i.e. passing an object as single parameter) instead of positional parameters.
- function declarations should be
const funcName = function() { ... }
HTML and Markdown
eslint-plugin-html and eslint-plugin-markdown are included so you can lint JavaScript inside HTML or Markdown files.
Support
If you found a bug or would like a new feature, don't hesitate to submit an issue on GitHub.
For other questions, feel free to chat with us on Gitter.
Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.
Contributing
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 or add a new feature, please check our guidelines. Pull requests are welcome!
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago