<h1 align="center">Gravitywell ESLint Plugin</h1>
<p align="center">Gravitywell defined ESLint rule sets for ESLint.</p>
<p align="center">
  <img src="https://img.shields.io/github/workflow/status/GravitywellUK/eslint-plugin/CI/master" alt="CI" />
  <img src="https://img.shields.io/github/license/GravitywellUK/eslint-plugin" alt="License" />
  <img src="https://img.shields.io/npm/dm/@gravitywelluk/eslint-plugin" alt="Downloads" />
  <img src="https://img.shields.io/npm/v/@gravitywelluk/eslint-plugin" alt="Version" />
</p>
<br />

## Table of Contents
- [Table of Contents](#table-of-contents)
- [Getting started / Installation](#getting-started--installation)
- [Usage](#usage)
  - [`@gravitywelluk/eslint-recommended`](#gravitywellukeslint-recommended)
  - [`@gravitywelluk/typescript-recommended`](#gravitywelluktypescript-recommended)
  - [`@gravitywelluk/react-recommended`](#gravitywellukreact-recommended)
  - [`@gravitywelluk/react-native-recommended`](#gravitywellukreact-native-recommended)
- [Contributing](#contributing)

## Getting started / Installation

```
# Yarn
yarn add -D @gravitywelluk/eslint-plugin


# NPM
npm install --save-dev @gravitywelluk/eslint-plugin
```

## Usage

In your `.eslintrc` file, add the package as a plugin.

```
plugins: [ "@gravitywelluk/eslint-plugin" ]
```

There are 4 configurations to choose from:

- `@gravitywelluk/eslint-recommended`
- `@gravitywelluk/typescript-recommended`
- `@gravitywelluk/react-recommended`
- `@gravitywelluk/react-native-recommended`

**Note:** You will only need to **choose ONE from the list above** as they inherit each other. Make sure that it is placed last in the `extends` array.

```
plugins: [ "@gravitywelluk/eslint-plugin" ]
extends: [ "plugin:@gravitywelluk/react-recommended" ],
```

### `@gravitywelluk/eslint-recommended`

```
extends: [ "plugin:@gravitywelluk/eslint-recommended" ],
```

This includes the following plugins and rules including Gravitywell's own override rules:

- eslint
  - eslint:recommended
- eslint-plugin-import
  - plugin:import/errors
  - plugin:import/warnings
- eslint-plugin-json
  - plugin:json/recommended

### `@gravitywelluk/typescript-recommended`

```
extends: [ "plugin:@gravitywelluk/typescript-recommended" ],
```

This includes `@gravitywelluk/eslint-recommended` and the following plugins and rules :

- @gravitywelluk/eslint-recommended
- @typescript-eslint/eslint-plugin
  - plugin:@typescript-eslint/eslint-recommended
  - plugin:@typescript-eslint/recommended
- eslint-plugin-import
  - plugin:import/typescript

### `@gravitywelluk/react-recommended`

```
extends: [ "plugin:@gravitywelluk/react-recommended" ],
```

This includes `@gravitywelluk/typescript-recommended` and the following plugins and rules:

- @gravitywelluk/typescript-recommended
- react
  - plugin:react/recommended
- react-hooks
  - plugin:react-hooks/recommended

### `@gravitywelluk/react-native-recommended`

```
extends: [ "plugin:@gravitywelluk/react-native-recommended" ],
```

This includes `@gravitywelluk/react-recommended` and the following plugins and rules :

- @gravitywelluk/react-recommended
- @react-native-community/eslint-config

## Contributing

To contribute to this package you will need to first setup access to NPM packages.

1. You will firstly need to create an NPM **Access Token**. Use the following link on [Creating and viewing authentication tokens](https://docs.npmjs.com/creating-and-viewing-authentication-tokens).

2. You will then need to add the following to your `~/.npmrc` file.
   ```
   //registry.npmjs.org/:_authToken=ACCESS_TOKEN
   ```
3. Contribute using the **Git Truck** flow (`pull-request` > `master`).

**Note:** Publishing is automated via a CI workflow.