ESLint shareable config to enforce strict conventions and good code quality.
## 📜 About **eslint-config-conventions** is a [ESLint](https://eslint.org) configuration to enforce strict conventions and good code quality. It supports both **JavaScript** and **TypeScript**. This configuration is mostly **for catching bugs** and **code-quality** so it is recommended to use it with [Prettier](https://prettier.io/) for a consistent code style, it works with any `.prettierrc.json` configuration. More information about **formatting rules** vs **code-quality rules** can be found on [Prettier vs. Linters](https://prettier.io/docs/en/comparison.html). ## ⚙️ Getting Started ### Prerequisites [Node.js](https://nodejs.org/) >= 18.0.0 ### Installation ```sh npm install --save-dev \ eslint@^8.56.0 \ eslint-plugin-promise@^6.1.1 \ eslint-plugin-unicorn@^53.0.0 \ eslint-config-conventions@latest ``` Dependencies are: - [ESLint](https://github.com/eslint/eslint) - 3 [ESLint Plugins](https://eslint.org/docs/user-guide/configuring/plugins) - [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise) - [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) - This package: `eslint-config-conventions` #### Installation with TypeScript If you want to use **TypeScript**, you also need to install: ```sh npm install --save-dev \ "typescript@^5.3.3" \ "@typescript-eslint/eslint-plugin@>=6.21.0" \ "@typescript-eslint/parser@>=6.21.0" ``` Dependencies are: - [TypeScript](https://github.com/Microsoft/TypeScript) - [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint): ESLint rules for TypeScript. - [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint): ESLint parser for TypeScript. ### Configuration #### `.eslintrc.json` (JavaScript) ```json { "extends": ["conventions"], "plugins": ["promise", "unicorn"] } ``` #### `.eslintrc.json` (TypeScript) ```json { "extends": ["conventions"], "plugins": ["promise", "unicorn"], "overrides": [ { "files": ["*.ts", "*.tsx"], "parser": "@typescript-eslint/parser", "plugins": ["@typescript-eslint"], "parserOptions": { "project": "./tsconfig.json" } } ] } ``` #### Configuration with [Prettier](https://prettier.io/) (recommended) ```sh npm install --save-dev prettier # Create an empty config file to let editors and other tools know you are using Prettier # You can personalize it with your own rules echo "{}" > .prettierrc.json ``` That's all! No need to update the `.eslintrc.json` configuration. We discourage usage of [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) and [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier), as `eslint-config-conventions` doesn't include any stylistic rules, and including these packages has several drawbacks (listed in [Integrating with Linters](https://prettier.io/docs/en/integrating-with-linters.html)) and brings no benefits for this configuration. #### `package.json` ```json { "scripts": { "lint:eslint": "eslint . --max-warnings 0 --report-unused-disable-directives --ignore-path .gitignore", "lint:prettier": "prettier . --check" } } ``` ### Usage ```sh npm run lint:eslint # or to apply automatic fixes to code npm run lint:eslint -- --fix # Validate code formatting in all supported languages by Prettier npm run lint:prettier ``` ## 💡 Contributing Anyone can help to improve the project, submit a Feature Request, a bug report or even correct a simple spelling mistake. The steps to contribute can be found in the [CONTRIBUTING.md](./CONTRIBUTING.md) file. ## 📄 License [MIT](./LICENSE)