2022-02-19 16:05:21 +01:00
< h1 align = "center" > eslint-config-conventions< / h1 >
< p align = "center" >
< strong > < a href = "https://eslint.org/docs/developer-guide/shareable-configs" > ESLint shareable config< / a > to enforce strict conventions and good code quality.< / strong >
< / p >
< p align = "center" >
2023-12-26 22:07:17 +01:00
< a href = "./CONTRIBUTING.md" > < img src = "https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt = "CONTRIBUTING" / > < / a >
2022-02-19 16:05:21 +01:00
< a href = "./LICENSE" > < img src = "https://img.shields.io/badge/licence-MIT-blue.svg" alt = "Licence MIT" / > < / a >
< a href = "./CODE_OF_CONDUCT.md" > < img src = "https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg" alt = "Contributor Covenant" / > < / a >
< br / >
2023-12-22 00:23:29 +01:00
< a href = "https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml" > < img src = "https://github.com/theoludwig/eslint-config-conventions/actions/workflows/lint.yml/badge.svg?branch=develop" alt = "lint action" / > < / a >
< a href = "https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml" > < img src = "https://github.com/theoludwig/eslint-config-conventions/actions/workflows/test.yml/badge.svg?branch=develop" alt = "test action" / > < / a >
2022-02-19 16:05:21 +01:00
< br / >
< a href = "https://conventionalcommits.org" > < img src = "https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg" alt = "Conventional Commits" / > < / a >
< a href = "https://github.com/semantic-release/semantic-release" > < img src = "https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg" alt = "semantic-release" / > < / a >
< a href = "https://www.npmjs.com/package/eslint-config-conventions" > < img src = "https://img.shields.io/npm/v/eslint-config-conventions.svg" alt = "npm version" > < / a >
< / p >
## 📜 About
2024-05-21 12:48:50 +02:00
**eslint-config-conventions** is a [ESLint ](https://eslint.org ) configuration to enforce strict conventions and good code quality. It supports both **JavaScript** and **TypeScript** .
2022-02-19 16:05:21 +01:00
2022-09-20 23:08:10 +02:00
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.
2022-02-19 16:05:21 +01:00
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
2024-10-07 17:28:54 +02:00
[Node.js ](https://nodejs.org/ ) >= 20.9.0
2022-02-19 16:05:21 +01:00
### Installation
```sh
npm install --save-dev \
2024-10-07 17:28:54 +02:00
eslint@^9.12.0 \
eslint-plugin-promise@^7.1.0 \
eslint-plugin-unicorn@^56.0.0 \
globals@^15.10.0 \
"typescript@~5.5.4" \
"typescript-eslint@^8.8.0" \
2022-02-19 16:05:21 +01:00
eslint-config-conventions@latest
```
2024-05-21 13:25:42 +02:00
Dependencies are:
2022-02-19 16:05:21 +01:00
- [ESLint ](https://github.com/eslint/eslint )
2024-07-26 07:00:24 +02:00
- [ESLint Plugins ](https://eslint.org/docs/user-guide/configuring/plugins )
2022-02-19 16:05:21 +01:00
- [eslint-plugin-promise ](https://github.com/xjamundx/eslint-plugin-promise )
- [eslint-plugin-unicorn ](https://github.com/sindresorhus/eslint-plugin-unicorn )
2024-10-07 17:28:54 +02:00
- [globals ](https://github.com/sindresorhus/globals )
2022-02-19 16:05:21 +01:00
- [TypeScript ](https://github.com/Microsoft/TypeScript )
2024-10-07 17:28:54 +02:00
- [typescript-eslint ](https://github.com/typescript-eslint/typescript-eslint ): tooling which enables ESLint to support TypeScript.
- This package: `eslint-config-conventions`
2022-02-19 16:05:21 +01:00
2024-05-21 13:25:42 +02:00
### Configuration
2022-02-19 16:05:21 +01:00
2024-10-07 17:28:54 +02:00
#### `eslint.config.js` (JavaScript and TypeScript)
2022-02-19 16:05:21 +01:00
2024-10-07 17:28:54 +02:00
```js
import typescriptESLint from "typescript-eslint"
import eslintConfigConventions from "eslint-config-conventions"
2022-02-19 16:05:21 +01:00
2024-10-07 17:28:54 +02:00
export default typescriptESLint.config(...eslintConfigConventions)
2022-02-19 16:05:21 +01:00
```
2024-05-21 13:25:42 +02:00
#### 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
```
2024-10-07 17:28:54 +02:00
That's all! No need to update the `eslint.config.js` configuration.
2022-02-19 16:05:21 +01:00
2024-05-21 13:25:42 +02:00
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.
2022-02-19 16:05:21 +01:00
#### `package.json`
2024-01-30 01:32:52 +01:00
```json
2022-02-19 16:05:21 +01:00
{
"scripts": {
2024-10-07 17:28:54 +02:00
"lint:eslint": "eslint . --max-warnings 0",
2023-07-14 23:19:09 +02:00
"lint:prettier": "prettier . --check"
2022-02-19 16:05:21 +01:00
}
}
```
### Usage
```sh
2024-07-25 14:00:05 +02:00
node --run lint:eslint
2022-02-19 16:05:21 +01:00
# or to apply automatic fixes to code
2024-07-25 14:00:05 +02:00
node --run lint:eslint -- --fix
2022-02-19 16:05:21 +01:00
# Validate code formatting in all supported languages by Prettier
2024-07-25 14:00:05 +02:00
node --run lint:prettier
2022-02-19 16:05:21 +01:00
```
## 💡 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 )