# ESLint config noise

An opinionated [ESLint](https://github.com/eslint/eslint) config. There are many ways to [configure ESLint in the official documentation](https://eslint.org/docs/user-guide/configuring).

## Noise base config

### Plugins

- [eslint-plugin-import](https://github.com/benmosher/eslint-plugin-import)
- [eslint-plugin-promise](https://github.com/xjamundx/eslint-plugin-promise)
- [eslint-plugin-unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn)

### Install

```sh
npm install --save-dev eslint@^8.8 eslint-config-noise eslint-plugin-import@^2.27 eslint-plugin-promise@^6.0 eslint-plugin-unicorn@^43.0
```

### Configure

#### Recommended

`.eslintrc`

```json
{ "extends": ["noise"] }
```

## Extensions

### Node

#### Plugins

- [eslint-plugin-node](https://github.com/mysticatea/eslint-plugin-node)

#### Install

Make sure you have install the Noise base config.

```sh
npm install --save-dev eslint-plugin-node@^11.1
```

#### Configure

##### Recommended

`.eslintrc`

```json
{ "extends": ["noise", "noise/node"] }
```

##### Scripts

`.eslintrc`

```json
{ "extends": ["noise", "noise/node/script"] }
```

### React

#### Plugins

- [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y)
- [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react)
- [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/master/packages/eslint-plugin-react-hooks)

#### Install

Make sure you have install the Noise base config.

```sh
npm install --save-dev eslint-plugin-jsx-a11y@^6.4 eslint-plugin-react@^7.23 eslint-plugin-react-hooks@^4.2
```

#### Configure

##### Recommended

`.eslintrc`

```json
{ "extends": ["noise", "noise/browser", "noise/react"] }
```

### TypeScript

#### Plugins

- [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint)

#### Install

Make sure you have install the Noise base config.

```sh
npm install --save-dev @typescript-eslint/eslint-plugin@^5.20 @typescript-eslint/parser@^5.20 eslint-import-resolver-typescript@^2.5
```

#### Configure

##### Recommended

`.eslintrc`

```json
{ "extends": ["noise", "noise/typescript"] }
```

### Vue

#### Plugins

- [eslint-plugin-vue](https://github.com/vuejs/eslint-plugin-vue)

#### Install

Make sure you have install the Noise base config.

```sh
npm install --save-dev eslint-config-prettier@^6 eslint-plugin-vue@^9.0
```

#### Configure

##### Recommended

`.eslintrc`

```json
{ "extends": ["noise", "noise/vue", "noise/vue/ts"] }
```

### Web-App

Many web apps are a combination of Node.js and browser directives. This presets
combines much of the `browser` and `node` configs with some tweaks.

#### Plugins

- [eslint-plugin-node](https://github.com/mysticatea/eslint-plugin-node)

#### Install

Make sure you have install the Noise base config.

```sh
npm install --save-dev eslint-plugin-node@^11.1
```

#### Configure

##### Recommended

`.eslintrc`

```json
{ "extends": ["noise", "noise/web-app"] }
```

## Combining multiple extensions

You can combine multiple extensions by following the install step per extension and configure them together.

`.eslintrc`

```json
{ "extends": ["noise", "noise/react", "noise/typescript"] }
```

You can use the ESLint config overrides option to have a more structured configuration.

You can combine multiple extensions by following the install step per extension and configure them together.

`.eslintrc`

```json
{
  "extends": ["noise"],
  "overrides": [
    {
      "files": ["**/*.ts"],
      "extends": ["noise/typescript"]
    },
    {
      "files": ["**/*.{jsx,tsx}"],
      "extends": ["noise/react"]
    },
    {
      "files": ["**/*.vue"],
      "extends": ["noise/vue", "noise/vue/ts"]
    },
    {
      "files": ["server/src/**"],
      "extends": ["noise/node", "noise/typescript"]
    },
    {
      "files": ["scripts/**"],
      "extends": ["noise/node", "noise/node/scripts"]
    },
    {
      "files": ["web-app/src/**"],
      "extends": ["noise/web-app"]
    }
  ]
}
```
