eslint-config-conventions

ESLint shareable config to enforce strict conventions and good code quality.

Licence MIT Contributor Covenant

Conventional Commits semantic-release npm version

## 📜 About **eslint-config-conventions** is a [ESLint](https://eslint.org) configuration to enforce strict conventions and good code quality, it is highly inspired from [eslint-config-standard-with-typescript](https://github.com/standard/eslint-config-standard-with-typescript) but it is **stricter** and with **no formatting rules**, **only code-quality rules**. It supports both **JavaScript** and **TypeScript**. This configuration is mostly **for catching bugs** and **code-quality** so it is recommanded 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/) >= 16.0.0 ### Installation `npm@<7` does not automatically install `peerDependencies`, so if that's what you're using, install them manually. Here is an example, but use it only for reference, because your decisions regarding version ranges and range specifiers may vary. ```sh npm install --save-dev \ eslint@^8.9.0 \ eslint-plugin-import@^2.26.0 \ eslint-plugin-promise@^6.0.0 \ eslint-plugin-unicorn@^42.0.0 \ eslint-config-conventions@latest ``` Yes, this is a large number of packages. This is due to [a known limitation in ESLint](https://github.com/eslint/eslint/issues/3458). This list of dependencies are: - [ESLint](https://github.com/eslint/eslint) - 3 [ESLint Plugins](https://eslint.org/docs/user-guide/configuring/plugins) - [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) - [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` If you want to use **TypeScript**, you also need to install: ```sh npm install --save-dev \ typescript@^4.6.0 \ @typescript-eslint/eslint-plugin@^5.18.0 \ @typescript-eslint/parser@^5.18.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 with [Prettier](https://prettier.io/) (recommended) You will need to install some dependencies in addition to those required: ```sh npm install --save-dev prettier eslint-config-prettier eslint-plugin-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 ``` #### `.eslintrc.json` ```json { "extends": ["conventions", "prettier"], "plugins": ["prettier"], "parserOptions": { "project": "./tsconfig.json" }, "rules": { "prettier/prettier": "error" } } ``` **Note:** Please read some important instructions regarding the `project` option [here](https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/parser/README.md#configuration). `"parserOptions.project"` is only required if you use **TypeScript**. #### `package.json` ```jsonc { "scripts": { "lint:typescript": "eslint \"**/*.{js,jsx,ts,tsx}\" --ignore-path \".gitignore\"", "lint:prettier": "prettier \".\" --check --ignore-path \".gitignore\"" } } ``` ### Usage ```sh npm run lint:typescript # or to apply automatic fixes to code npm run lint:typescript -- --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)